<?xml version="1.0" encoding="UTF-8"?>
<hibernate-generic datetime="2026-02-04 08:05:42">
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">763</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="children"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">837</id>
</element>
</collection>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Linux Port]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">760</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">8981108</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">8981109</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">8981110</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">8981111</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">8981112</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">8981113</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">8981114</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1343548</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1343549</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3276977</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3276978</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277050</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">5734404</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:40:04.233</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-07 18:51:42.937</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">764</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">765</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">766</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">836</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">842</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">843</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113441</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913334</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913336</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913338</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913340</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">9076790</id>
</element>
</collection>
</object>
<object class="Space" package="com.atlassian.confluence.spaces">
<id name="id">20</id>
<property name="name"><![CDATA[Autonomous Underwater Vehicles]]></property>
<property name="key"><![CDATA[AUV]]></property>
<property name="description" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">750</id>
</property>
<property name="homePage" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="permissions"><element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">821</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">822</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">823</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">824</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">825</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">826</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">827</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">828</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">829</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">830</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">831</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">833</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">834</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">835</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">836</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">838</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">839</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">840</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">4882483</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">4882484</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">4882485</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">4882486</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">4882487</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">4882488</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">4882489</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">19300460</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406543</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406544</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406545</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406546</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406547</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406548</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406549</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406550</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406551</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406552</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406553</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406554</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406555</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406556</id>
</element>
</collection>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.827</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 11:17:34.827</property>
<property name="spaceType">global</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">15630343</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[.bookmarks]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">15663111</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">15695889</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">15695890</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"/><property name="creationDate">2010-11-18 20:06:03.090</property>
<property name="lastModifierName"/><property name="lastModificationDate">2010-11-18 20:06:03.090</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">589901</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">589871</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1063</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">589871</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Minutes from 2007-04-02--Status meeting on AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">622668</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">656041</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-04-02 21:49:41.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-04-03 08:15:38.007</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">589903</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">557064</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">751</id>
<collection name="children"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">869</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">875</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">919</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1063</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">589937</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1179753</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797667</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">13926452</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">748</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">16285899</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">16285900</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">16285901</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">16285902</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">16285903</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">16285904</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">16285905</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">16285906</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">16285907</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">16285908</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">16285909</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">16285910</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">16285911</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">16285912</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">753669</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">753670</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1343494</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3276976</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277025</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277048</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277051</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604527</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604580</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">4849681</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">4849684</id>
</element>
</collection>
<property name="version">22</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.863</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">752</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">762</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">868</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">870</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">871</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">872</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">873</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">874</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">921</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">922</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">923</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1064</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">589841</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">589872</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1179833</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114108</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8356096</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912906</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797669</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">13926455</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">16220230</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">753</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="children"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">857</id>
</element>
</collection>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<collection name="comments"><element class="Comment" package="com.atlassian.confluence.pages"><id name="id">855</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[2007-02-02 Minutes]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">750</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277021</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:25:44.040</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-12 08:51:26.597</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">754</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">755</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">756</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">757</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">758</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">759</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">760</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">761</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">856</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">28</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">32</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1063</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="children"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">589839</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">589871</id>
</element>
</collection>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Minutes from 2007-03-05--Status meeting on AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1060</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-03-05 16:23:06.817</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-03-05 16:23:06.817</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579617</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Requirements]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645135</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:06:33.030</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:08:59.037</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579618</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579620</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579621</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10912189</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Autonomy Deployment Log]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10944946</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-12-09 13:37:55.857</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-12-09 14:02:53.357</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">10912191</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10912192</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="labellings"><element class="Labelling" package="com.atlassian.confluence.labels"><id name="id">11206659</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579613</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<collection name="children"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579617</id>
</element>
</collection>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Autonomy ODSS Integration]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645131</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776501</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776502</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 00:40:17.360</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 09:04:34.493</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579615</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579622</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579623</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579624</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579625</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579627</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579628</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579631</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579633</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579634</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579635</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">18841640</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">18841641</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">18841642</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">18841643</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">18841644</id>
</element>
</collection>
<collection name="labellings"><element class="Labelling" package="com.atlassian.confluence.labels"><id name="id">19234832</id>
</element>
</collection>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32819</id>
<property name="context"><![CDATA[AUV]]></property>
<property name="key"><![CDATA[atlassian.confluence.css.resource.counter]]></property>
<property name="value"><![CDATA[<int>2</int>]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">589871</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1063</id>
</property>
<collection name="children"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">589901</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913153</id>
</element>
</collection>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1063</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Minutes from 2007-03-26--Status meeting on AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">622638</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1343550</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">4849703</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">5734401</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">5734403</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-03-28 13:53:38.653</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-03-28 13:53:38.653</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797756</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Iridum modem testing]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830525</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-04-17 15:16:21.417</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-21 15:02:58.217</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797788</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797790</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797796</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797797</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797819</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797820</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798646</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798648</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1179753</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Debrief 2007-06-22--Debrief spreadsheet for AUV Deliberative Autonomy project from June 20th cruise]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1212520</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-06-22 16:21:58.477</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-06-22 16:21:58.477</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">1540107</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">837</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</element>
</collection>
<collection name="comments"><element class="Comment" package="com.atlassian.confluence.pages"><id name="id">839</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Missing Headers]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">834</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-08 10:48:23.677</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-08 10:48:48.037</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">838</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">589839</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1063</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1063</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Minutes from 2007-03-19--Status meeting on AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">622607</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-03-19 12:52:33.537</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-03-19 12:54:46.760</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">589840</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">557059</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372360</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[AUV Software Install on Debian 4.0]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9405092</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9441008</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:24.673</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-31 08:47:26.347</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372361</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372363</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372393</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372395</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372397</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372399</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372401</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372404</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372405</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372411</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5832794</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Running and Testing AUV Linux]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5865558</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-17 08:43:40.023</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-17 08:43:40.023</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8356111</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<collection name="comments"><element class="Comment" package="com.atlassian.confluence.pages"><id name="id">11239519</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8388867</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440012</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440013</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440014</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440015</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440016</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440017</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440018</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440019</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440020</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440021</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440022</id>
</element>
</collection>
<property name="version">16</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:27:42.153</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8356119</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8356157</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8356158</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8356167</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8356230</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913236</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913250</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913252</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913254</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913257</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913277</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913353</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9371957</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372355</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372356</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">869</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Meeting Minutes]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">866</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">3824</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277020</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-13 08:35:49.407</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-13 08:35:49.407</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114074</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<collection name="children"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372360</id>
</element>
</collection>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[AUV Debian4 Linux and auv-pkgs Install, build]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179556</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440023</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440024</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440025</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9440026</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277034</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277035</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277036</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277038</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277226</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277228</id>
</element>
</collection>
<property name="version">21</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:42:01.203</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114076</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114078</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114079</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114082</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114084</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114378</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114593</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114597</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5374034</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5832786</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5832789</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5832841</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5832876</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8060983</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8060985</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8060987</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9371959</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372039</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372118</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372358</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">8159310</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">857</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">854</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-02-12 13:41:13.823</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-02-22 15:30:28.900</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">858</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">987</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">33</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11239490</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Autonomy Critical Events 2010]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11272257</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-01-20 10:10:26.367</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-01-20 10:17:18.513</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">11239492</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11239494</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">11403266</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">11403267</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">11403268</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">11763714</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797697</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830466</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453426</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453427</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453428</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453429</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453430</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453431</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453432</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453433</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453434</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453435</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453436</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453437</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453438</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453439</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453440</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453441</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453442</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453443</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453444</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453445</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453446</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453447</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453448</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453449</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453450</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453451</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453452</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453453</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453454</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453455</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453456</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453457</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453458</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453459</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453460</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453461</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453462</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453463</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453464</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453465</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453466</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453467</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453468</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453469</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453470</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453471</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453472</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453473</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453474</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453475</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10453476</id>
</element>
</collection>
<property name="version">34</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.643</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797701</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797703</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797705</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797707</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797709</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797711</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797713</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797715</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797717</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797719</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797724</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797726</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797738</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797740</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797742</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797798</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797826</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797831</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797864</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797934</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797950</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797952</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797954</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797956</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797958</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798101</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798103</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798105</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798112</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798114</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798267</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798269</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10354778</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">9928711</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">9928712</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113885</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="children"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5832794</id>
</element>
</collection>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179370</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896065</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896066</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896067</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896068</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896069</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896070</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896071</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896072</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896073</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896074</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896075</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896076</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896077</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896078</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896079</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896080</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896081</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896082</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896083</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896084</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896085</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896086</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896087</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896088</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896089</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896090</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896091</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3276987</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3276988</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3276990</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277005</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277026</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277037</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277042</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277047</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277049</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277117</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277178</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277179</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277188</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604543</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604646</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">5734406</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">5734413</id>
</element>
</collection>
<property name="version">92</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.140</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113887</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113889</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113891</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113893</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113895</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113897</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113899</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113901</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113903</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113905</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113907</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113911</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113913</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113915</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113917</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113919</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113921</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113936</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113938</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113940</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113942</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113944</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113952</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113953</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113955</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113956</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113958</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113960</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113962</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113977</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113979</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113990</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113992</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113993</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114005</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114034</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114055</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114057</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114059</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114061</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114068</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114069</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114072</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114080</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114086</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114090</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114095</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114099</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114320</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114380</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114382</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114384</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114386</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114387</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114423</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114454</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114456</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114458</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114473</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114481</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114499</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114601</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114602</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114604</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114606</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114608</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114610</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114612</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114613</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114704</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637262</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637354</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637356</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637358</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637360</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637440</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637444</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637445</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637450</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637461</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637557</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637558</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637828</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5374738</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5374740</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5832788</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5832791</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5832792</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5832903</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5832905</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797666</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">3309639</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">3309640</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">3309667</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">3309670</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">3309671</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">3309672</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">875</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Source Code]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">872</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">983101</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">983102</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">983103</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1343495</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1343546</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-13 08:40:08.137</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-05-02 16:00:52.877</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">876</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">917512</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">917513</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">1048577</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20971526</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004294</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">21431164</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">21431165</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">21431166</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">21431167</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">21431168</id>
</element>
</collection>
<property name="version">31</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-06-05 13:05:46.247</property>
<property name="versionComment"><![CDATA[Updated doc accrrding to current trex version]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">20971528</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20971536</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20971567</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20971569</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20971571</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20971573</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20971574</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20972038</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20972040</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20972044</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20972051</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20972053</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20972054</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20972056</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20972057</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20972081</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20972086</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">21364752</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">21364753</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">21364755</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">21364756</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">21364758</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">21364771</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">21364774</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">21364776</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">21364778</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">21364787</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">21364859</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">21364862</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">21364890</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="labellings"><element class="Labelling" package="com.atlassian.confluence.labels"><id name="id">21102593</id>
</element>
<element class="Labelling" package="com.atlassian.confluence.labels"><id name="id">21102594</id>
</element>
<element class="Labelling" package="com.atlassian.confluence.labels"><id name="id">21102595</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">13926456</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="children"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">13926458</id>
</element>
</collection>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Decision Support System]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">13959222</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">15706753</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">15706754</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">15706755</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">15706756</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">15706757</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">15706758</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">15706759</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">15706760</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-07-12 22:29:00.377</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-01-07 17:42:00.533</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">14188593</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">14188595</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">14188597</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">14188614</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">14188699</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">14516232</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">15630379</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">15630861</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">13926458</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Lessons Learned Drifter Following Expt June'10]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">13959223</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-07-12 22:30:06.847</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-07-13 08:51:52.967</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">13926460</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">13926462</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">13926452</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Decision Support for CANON]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">13959218</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-07-12 22:23:42.903</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-07-12 22:23:42.903</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355444</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Task List July 2009]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388176</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457431</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457432</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457433</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457434</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457435</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457436</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457437</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457438</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457439</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457440</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457441</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457442</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457443</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457444</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457445</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457446</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457447</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457448</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457449</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457450</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457451</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457452</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457453</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457454</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457455</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457456</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457457</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457458</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457459</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">10457460</id>
</element>
</collection>
<property name="version">14</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:52:32.680</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.010</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355449</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355451</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355470</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355472</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355474</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355477</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355479</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355481</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355483</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355485</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355487</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355490</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355542</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">10485893</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">919</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">916</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-02-20 13:10:43.733</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-02-20 13:57:30.357</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">920</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="labellings"><element class="Labelling" package="com.atlassian.confluence.labels"><id name="id">30</id>
</element>
</collection>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32801</id>
<property name="context"><![CDATA[AUV]]></property>
<property name="key"><![CDATA[atlassian.confluence.theme.settings]]></property>
<property name="value"><![CDATA[<map>
  <entry>
    <string>theme.key</string>
    <string></string>
  </entry>
</map>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">32802</id>
<property name="context"><![CDATA[AUV]]></property>
<property name="key"><![CDATA[atlassian.confluence.space.settings]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.setup.settings.SpaceSettings>
  <spaceKey>AUV</spaceKey>
  <disableLogo>false</disableLogo>
  <colourSchemesSettings>
    <colourSchemeType>custom</colourSchemeType>
  </colourSchemesSettings>
</com.atlassian.confluence.setup.settings.SpaceSettings>]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">17465421</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Autonomy Critical events 2011]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">17498188</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-06-07 16:15:43.807</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-06-07 16:18:58.090</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">17465423</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">17661957</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913153</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">589871</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1063</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">589871</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Minutes from 2009-02-02--Status meeting on AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8945911</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-02-02 11:40:17.867</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-02-02 11:43:17.397</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913155</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913157</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8912903</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8945671</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">14286898</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">14286899</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">14286900</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">14286901</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">14286902</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">14286903</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">14286904</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">14286905</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">14286906</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">14286907</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">14286908</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">14286909</id>
</element>
</collection>
<property name="version">19</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:14:37.147</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913008</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8913396</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9371891</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9371893</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9371901</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9371903</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9371905</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355138</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11239504</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11239506</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11239508</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">13664264</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">13664268</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">14188550</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">14188552</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">14188554</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">14188555</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">14188557</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">11403269</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">14319617</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8912901</id>
<collection name="children"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912916</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797756</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10912189</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11239490</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11796734</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8945669</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776478</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776479</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776480</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776481</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776482</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776483</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776484</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776485</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776486</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776487</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776488</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776489</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776490</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776491</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776492</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776493</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18776494</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">9306172</id>
</element>
</collection>
<property name="version">44</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.873</property>
<property name="versionComment"><![CDATA[Added ODSS integration page]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912905</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912927</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372094</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797721</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797803</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797804</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797805</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797806</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797809</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797811</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797812</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797813</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797873</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797874</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797875</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797876</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797877</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797878</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797880</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797884</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797886</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797888</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797889</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798265</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798266</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355446</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10355447</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10911875</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10911877</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10911878</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10912187</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10912267</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10912344</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11239489</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11239495</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11796730</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">15630872</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">15990834</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">16220231</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">16220233</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">17465429</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">17465430</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579629</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">9502773</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">9928720</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">11042865</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">11042866</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">11042892</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">11042900</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">11403265</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">15728705</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16154625</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16351237</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">17661961</id>
</element>
</collection>
<collection name="labellings"><element class="Labelling" package="com.atlassian.confluence.labels"><id name="id">11206658</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11796734</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[TREX Volume Survey Operations]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11829491</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2010-04-13 14:54:41.987</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2010-04-15 08:06:03.357</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">11796736</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11796808</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835056</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Minutes from 2007-08-17--Lessons Learned from AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867820</id>
</element>
</collection>
<property name="version">14</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-09-18 09:00:02.313</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-09-19 13:51:26.647</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835057</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835058</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835059</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835060</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835061</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835062</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835063</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835064</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835065</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835066</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835067</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835068</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835069</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8912916</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Example of A TREX reactor]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8945683</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-21 11:24:32.257</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-01-21 14:16:14.797</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912917</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912920</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">8912924</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637442</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Driver Porting Details]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670197</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899874</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899875</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899876</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899877</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899878</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899879</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899880</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899881</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899882</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899883</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899884</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899885</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899886</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899887</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899888</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899889</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899890</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899891</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899892</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899893</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899894</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899895</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899896</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899897</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899898</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899899</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899900</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899901</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899902</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899903</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899904</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899905</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899906</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899907</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899908</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899909</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899910</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899911</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899912</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899913</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899914</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899915</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899916</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899917</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899918</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899919</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899920</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899921</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899922</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899923</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899924</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899925</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899926</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899927</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899928</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899929</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899930</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899931</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899932</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899933</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899934</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899935</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899936</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899937</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899938</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899939</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899940</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899941</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899942</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899943</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899944</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899945</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899946</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899947</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899948</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899949</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899950</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899951</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899952</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899953</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899954</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899955</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899956</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899957</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899958</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899959</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899960</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899961</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899962</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899963</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899964</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899965</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899966</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899967</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899968</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899969</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899970</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899971</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899972</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899973</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899974</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899975</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899976</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899977</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899978</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899979</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899980</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899981</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899982</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899983</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899984</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899985</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899986</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899987</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899988</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899989</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899990</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899991</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899992</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899993</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899994</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899995</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899996</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899997</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899998</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5899999</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900000</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900001</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900002</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900003</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900004</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900005</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900006</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900007</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900008</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900009</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900010</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900011</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900012</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900013</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900014</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900015</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900016</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900017</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900018</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900019</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900020</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900021</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900022</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900023</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900024</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900025</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900026</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900027</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900028</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900029</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900030</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900031</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900032</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900033</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900034</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900035</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900036</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900037</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900038</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900039</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900040</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900041</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900042</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900043</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900044</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900045</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900046</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900047</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900048</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900049</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900050</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900051</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900052</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900053</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900054</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900055</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900056</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900057</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900058</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900059</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900060</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900061</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900062</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900063</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900064</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900065</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900066</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900067</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900068</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900069</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900070</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900071</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900072</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900073</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900074</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900075</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900076</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900077</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900078</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900079</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900080</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900081</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900082</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900083</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900084</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900085</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900086</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900087</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900088</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900089</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900090</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900091</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900092</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900093</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900094</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900095</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900096</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900097</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900098</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900099</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900100</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900101</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900102</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900103</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900104</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900105</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900106</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900107</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900108</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900109</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900110</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900111</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900112</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900113</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900114</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900115</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900116</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900117</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900118</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900119</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900120</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900121</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900122</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900123</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900124</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900125</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900126</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900127</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900128</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900129</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900130</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900131</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900132</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900133</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900134</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900135</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900136</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900137</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900138</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900139</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900140</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900141</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900142</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900143</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900144</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900145</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900146</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900147</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900148</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900149</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900150</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900151</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900152</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900153</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900154</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900155</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900156</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900157</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900158</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900159</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900160</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900161</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900162</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900163</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900164</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900165</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900166</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900167</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900168</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900169</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900170</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900171</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900172</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900173</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900174</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900175</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900176</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900177</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900178</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900179</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900180</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900181</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900182</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900183</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900184</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900185</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900186</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900187</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900188</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900189</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900190</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900191</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900192</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900193</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900194</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900195</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900196</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900197</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900198</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900199</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900200</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900201</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900202</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900203</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900204</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900205</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900206</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900207</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900208</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900209</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900210</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900211</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900212</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900213</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900214</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900215</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900216</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900217</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900218</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900219</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900220</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900221</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900222</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900223</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900224</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900225</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900226</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900227</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5900228</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604542</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604544</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604545</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604628</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">5734407</id>
</element>
</collection>
<property name="version">14</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-21 07:41:49.843</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.297</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637447</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637449</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637452</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637453</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5374753</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5374773</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5374775</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5374777</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5374779</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5374781</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5832711</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5832787</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5832907</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">5767169</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797667</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[2009-04-13 Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830436</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896092</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896093</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896094</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896095</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896096</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896097</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896098</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">9896099</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-13 13:25:12.547</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-13 13:25:12.547</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1179834</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<collection name="comments"><element class="Comment" package="com.atlassian.confluence.pages"><id name="id">1179838</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[MATLAB Tools]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1212601</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">1246243</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">1246244</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">1246245</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">5734409</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">5734411</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">5734412</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 09:26:04.537</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 15:42:54.930</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1179836</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1179837</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1179841</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1179842</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1179843</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1179844</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1179845</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1179846</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1179847</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">1540119</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">1540120</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114460</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Termios Dev Info]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179932</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5505102</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5505103</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">5505104</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277174</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277175</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277181</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3277227</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-01 11:50:27.647</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-06-13 20:44:56.687</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114462</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114465</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114466</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114495</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114497</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">5374032</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">589937</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"><![CDATA[Minutes of weekly meeting on April 9, 2007]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">622702</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[cmcgann]]></property>
<property name="creationDate">2007-04-11 18:22:26.960</property>
<property name="lastModifierName"><![CDATA[cmcgann]]></property>
<property name="lastModificationDate">2007-04-11 18:22:26.960</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453456</id>
<property name="destinationPageTitle"><![CDATA[auvsbd\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453457</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 missions\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453458</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 missions\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453459</id>
<property name="destinationPageTitle"><![CDATA[1\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453452</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 bin\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453453</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 bin\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453454</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 logs\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453455</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 bin\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453448</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 amc\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453449</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 amc\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453450</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 auv-linux\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453451</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 bin\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453444</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 amc\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453445</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 amc\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453446</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 \~\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453447</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 \~\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453441</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 missions\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5832711</id>
<property name="title"><![CDATA[Driver Porting Details]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5865478</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-21 07:41:49.843</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-11 15:51:47.617</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453440</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 amc\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453443</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 missions\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453442</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 missions\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453437</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 missions\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453436</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 tests\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453439</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 amc\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453438</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 dorado1\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">14188699</id>
<property name="title"><![CDATA[Decision Support System]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">14221465</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-07-12 22:29:00.377</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2010-08-12 08:56:28.510</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453433</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 amc\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1064</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1061</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-20 14:19:22.560</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453432</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 amc\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453435</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 tests\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10912191</id>
<property name="title"><![CDATA[Autonomy Deployment Log]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10944948</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-12-09 13:37:55.857</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-12-09 13:37:55.857</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10912189</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453434</id>
<property name="destinationPageTitle"><![CDATA[AuvApplication\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10912192</id>
<property name="title"><![CDATA[Autonomy Deployment Log]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10944949</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-12-09 13:37:55.857</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-12-09 14:02:37.450</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10912189</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453429</id>
<property name="destinationPageTitle"><![CDATA[AuvApplication\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453428</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 amc\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453431</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 tests\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10912187</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10944944</id>
</element>
</collection>
<property name="version">31</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-11-02 15:55:01.793</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453430</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 amc\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">13959223</id>
<property name="body"><![CDATA[1. Add sliders for replaying data from the past. (KR)
2. Figure out a way to get the web server to be publicly available (perhaps in the DMZ?). (KR)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926458</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1212520</id>
<property name="body"><![CDATA[Attached is the spreadsheet used for tracking the different scenarios from and their results from the June 20th engineering cruise for T-REX]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179753</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">13959222</id>
<property name="body"><![CDATA[{section}
{column:width=75%}
[Lessons Learned from June 29th-30th Drifter following Experiment|AUV:Lessons Learned Drifter Following Expt June'10]
{column}
{column:width=25%}
{panel:title=Developer Resources}
# Client Frameworks
## Comparisons
## [Java Posse Rundown|http://javaposse.com/java_posse_320_roundup_10_rich_client_vs_web]
## Google Web Toolkit
### [GWT and HTML5 - Google I/O|http://www.java-tv.com/2010/08/11/gwt-html5-can-do-what/]
### [SmartClient - RIA AJAX components built on GWT|http://www.smartclient.com]
## Messaging Frameworks (think events)
### [Lightweight AMQP|http://soa.dzone.com/articles/lightweight-alternative]
# Security
## [Securing GWT Clients|http://java.dzone.com/articles/securing-gwt-client-acris]
# Testing
## [GWT Testing Best Practices|http://www.softdevtube.com/2010/08/09/gwt-testing-best-practices/]
## [Testing Web Clients (Selenium)|http://weblogs.java.net/blog/johnsmart/archive/2010/08/09/selenium-2web-driver-land-where-page-objects-are-king]
# Utilities
## uDig - userfriendly desktop GIS
## 
{panel}
{column}
{section}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453476</id>
<property name="destinationPageTitle"><![CDATA[<number>\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.757</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.757</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453475</id>
<property name="destinationPageTitle"><![CDATA[exec\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.757</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.757</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453474</id>
<property name="destinationPageTitle"><![CDATA[<number>\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.757</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.757</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453473</id>
<property name="destinationPageTitle"><![CDATA[downlink\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.757</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.757</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453472</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 missions\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.757</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.757</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453471</id>
<property name="destinationPageTitle"><![CDATA[downlink\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.757</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.757</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453470</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 missions\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.757</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.757</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453469</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 missions\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.757</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.757</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453468</id>
<property name="destinationPageTitle"><![CDATA[root@trex2 logs\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.757</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.757</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453467</id>
<property name="destinationPageTitle"><![CDATA[root@trex2 logs\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.757</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.757</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453466</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 logs\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.757</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.757</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453465</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 log\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.757</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.757</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453464</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 log\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.757</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.757</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">13959218</id>
<property name="body"><![CDATA[]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926452</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453463</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 log\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.757</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.757</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453462</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 log\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453461</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 missions\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453460</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 missions\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">3309639</id>
<property name="fileName"><![CDATA[interfaces]]></property>
<property name="contentType"><![CDATA[text/plain]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:12:27.493</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-07 10:12:27.493</property>
<property name="fileSize">714</property>
<property name="comment"><![CDATA[/etc/network/interfaces file]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">3309640</id>
<property name="fileName"><![CDATA[serial.conf]]></property>
<property name="contentType"><![CDATA[application/octet-stream]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:12:51.293</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-07 10:12:51.293</property>
<property name="fileSize">3611</property>
<property name="comment"><![CDATA[/etc/serial.conf file for Xtreme104 serial card]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">4849703</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[https://oceana.mbari.org/confluence/display/AUV/Home]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">589871</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-06-03 13:48:15.030</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-03 13:48:15.030</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5832789</id>
<property name="title"><![CDATA[AUV Debian4 Linux Install]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5865553</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-17 07:58:54.760</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">3309672</id>
<property name="fileName"><![CDATA[parosci.testresultssoak.2Apr08]]></property>
<property name="contentType"><![CDATA[text/plain]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-02 09:14:52.010</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-02 09:14:52.010</property>
<property name="fileSize">276122</property>
<property name="comment"><![CDATA[parosci soak test results (continuous runs of 'good' snipped to reduce size)]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5832787</id>
<property name="title"><![CDATA[Driver Porting Details]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5865551</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-21 07:41:49.843</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-14 17:42:08.023</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">3309670</id>
<property name="fileName"><![CDATA[teledynedvl.testresults.1Apr08]]></property>
<property name="contentType"><![CDATA[text/plain]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-01 16:09:54.583</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-01 16:11:05.027</property>
<property name="fileSize">7244</property>
<property name="comment"><![CDATA[TeledyneDvl test results - reads for a while then 'buffer full']]></property>
<property name="attachmentVersion">2</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5832788</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5865552</id>
</element>
</collection>
<property name="version">86</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-09 16:41:33.397</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">3309671</id>
<property name="fileName"><![CDATA[teledynedvl.testresults.1Apr08]]></property>
<property name="contentType"><![CDATA[text/plain]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-01 16:09:54.583</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-01 16:11:05.027</property>
<property name="fileSize">7244</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">3309670</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453426</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 \~\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10453427</id>
<property name="destinationPageTitle"><![CDATA[dorado1@trex2 amc\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-05-29 09:51:45.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-29 09:51:45.753</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5832791</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5865555</id>
</element>
</collection>
<property name="version">87</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-17 08:37:54.893</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5832792</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5865556</id>
</element>
</collection>
<property name="version">88</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-17 08:39:09.827</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5832786</id>
<property name="title"><![CDATA[AUV Debian4 Linux Install]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5865550</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-06-13 20:51:11.687</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637558</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670313</id>
</element>
</collection>
<property name="version">82</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-23 13:35:25.840</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637557</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670312</id>
</element>
</collection>
<property name="version">81</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-21 09:41:14.843</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">3309667</id>
<property name="fileName"><![CDATA[teledyne.test.results]]></property>
<property name="contentType"><![CDATA[text/plain]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-03-25 16:26:02.247</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-25 16:26:02.247</property>
<property name="fileSize">41807</property>
<property name="comment"><![CDATA[teledyne test results PD0 08 Mar 25]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Labelling" package="com.atlassian.confluence.labels">
<id name="id">11206658</id>
<property name="label" class="Label" package="com.atlassian.confluence.labels"><id name="id">11173889</id>
</property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="spaceKey"><![CDATA[AUV]]></property>
<property name="user"><![CDATA[fpy]]></property>
<property name="creationDate">2009-12-09 13:49:51.643</property>
<property name="lastModificationDate">2009-12-09 13:49:51.643</property>
</object>
<object class="Labelling" package="com.atlassian.confluence.labels">
<id name="id">11206659</id>
<property name="label" class="Label" package="com.atlassian.confluence.labels"><id name="id">11173889</id>
</property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10912189</id>
</property>
<property name="spaceKey"><![CDATA[AUV]]></property>
<property name="user"><![CDATA[fpy]]></property>
<property name="creationDate">2009-12-09 13:49:58.467</property>
<property name="lastModificationDate">2009-12-09 13:49:58.467</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">14188557</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">14221325</id>
</element>
</collection>
<property name="version">18</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:10:27.853</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">14188555</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">14221323</id>
</element>
</collection>
<property name="version">17</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:09:59.200</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5832841</id>
<property name="title"><![CDATA[AUV Debian4 Linux and auv-pkgs Install, build]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5865603</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-17 08:37:54.973</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11796808</id>
<property name="title"><![CDATA[TREX Volume Survey Operations]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11829565</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2010-04-13 14:54:41.987</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2010-04-13 14:57:31.077</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">11796734</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">13926455</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">13959220</id>
</element>
</collection>
<property name="version">20</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-13 13:30:50.427</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">14188552</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">14221320</id>
</element>
</collection>
<property name="version">15</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 12:59:45.293</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">14188554</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">14221322</id>
</element>
</collection>
<property name="version">16</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:06:15.967</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">14188550</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">14221318</id>
</element>
</collection>
<property name="version">14</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2010-06-14 16:20:13.517</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">13926460</id>
<property name="title"><![CDATA[Lessons Learned Drifter Following Expt June'10]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">13959225</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-07-12 22:30:06.847</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-07-12 22:30:06.847</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926458</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">13926462</id>
<property name="title"><![CDATA[Lessons Learned Drifter Following Expt June'10]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">13959226</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-07-12 22:30:06.847</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-07-12 22:31:32.687</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926458</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5832876</id>
<property name="title"><![CDATA[AUV Debian4 Linux and auv-pkgs Install, build]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5865637</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-23 14:36:41.303</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896066</id>
<property name="destinationPageTitle"><![CDATA[Termios Dev Info]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896067</id>
<property name="destinationPageTitle"><![CDATA[Driver Porting Details]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896065</id>
<property name="destinationPageTitle"><![CDATA[AUV Debian4 Linux and auv-pkgs Install, build]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11796730</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11829487</id>
</element>
</collection>
<property name="version">36</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-01-20 10:17:55.947</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11796736</id>
<property name="title"><![CDATA[TREX Volume Survey Operations]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11829493</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2010-04-13 14:54:41.987</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2010-04-13 14:54:41.987</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">11796734</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896079</id>
<property name="destinationPageTitle"><![CDATA[1\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896078</id>
<property name="destinationPageTitle"><![CDATA[2\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896077</id>
<property name="destinationPageTitle"><![CDATA[AUV Debian4 Linux and auv-pkgs Install, build]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004294</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

{toc}

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

h4. get short help

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}

h4. TREX version

{panel}
{panel:title=TREX version}
 * *format:* 
 ** GET http://<host>/rest/version
 * Gets information of the currently running version of trex
 * *output:*
 {code:javascript}
{
    "version_major": "0",
    "version_minor": "5",
    "version_release": "0",
    "version_rc": "1",
    "svn_root": "trunk",
    "svn_rev": "1450",
    "version_str": "0.5.0-rc1 (svn:trunk[1450])"
} 
{code}
 ** *note* svn_rev may not be a integer but is the output of the svnversion command. Which mean that ift can be a range of version (eg 1447:1450) and/or be postfixed by a modification flag letter (M for locally modified, S for a branch of tag instead of the trunk)  
{panel}

h3. Tick and date related services

h4. Current tick

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "2656",
    "date": "2013-06-04T15:29:04.923976"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. Next tick

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "2658",
    "date": "2013-06-04T15:31:04.923976"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. Initial tick

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/initial
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/initial
 {code:javascript}
{
    "value": "0",
    "date": "2013-06-02T19:13:04.923976"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. Final tick

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "1000000",
    "date": "2015-04-28T05:53:04.923976"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. tick info

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/2658
 {code:javascript}
{
    "value": "2658",
    "date": "2013-06-04T15:31:04.923976"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. tick at a date

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-01-01
 {code:javascript}
{
    "value": "305566",
    "date": "2013-12-31T23:59:04.923976"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. tick rate/duration

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}

h4. Wait for new tick

{panel:title=Wait for new tick}
* *format:* GET http://<host>/rest/tick/wait
* This request implements a long pull in order for the client to be notified when the next tick occurs. 
The request will not respond until the next tick occurs.
* *output:* similar to GET http://<host>/rest/tick  
{panel}

h3. Timelines and goals services

h4. List of trex existing timelines

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/timelines
 ** GET http://<host>/rest/timelines/timline_a/timeline_b ...
 * *options:*
 ** full=(0|1) set it to 1 in order to see all the timelines (including timelines with name starting with an underscore). Useful only when no timeline names are appended to the URL  
 ** format=(tick|date) indicate whether data of from and to option are expressed as trex _tick_ or ISO _date_. Default is _date_
 ** from=<tick_or_date> give a lower bound for the time window of interest. the value format depends on _format_ option
 ** to=<tick_or_date> give a upper bound for the he time window of interest. the value format depends on _format_ option
 ** example GET http://<host>/timelines?full=1&format=tick&from=10
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "alive": "true",
            "accept_goals": "false",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_state"
        },
        {
            "name": "dorado_survey",
            "alive": "true",
            "accept_goals": "true",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "1",
                "duration": "00:01:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_survey"
        },
        ...
    ]
}
 {code}
 
 ** "timelines" is the table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 *** "alive" a boolean indicating whether this timeline is still managed or "dead" (resulting on a Failed state)
 *** "accept_goals" a boolean indicating if this timeline accept goals or not (for example position updates on assets do not accept goals)
 *** "publish_plan" a boolean indicating if this timeline will publish its future when it has a plan or can only display its past and current state
 *** "latency" The expected maximum delay until a received goal on this timeline will be processed
 *** "look_ahead" How far ahead in the future this timeline is usually planned for 
 *** "total_obs" Number of tokens for this token that overlaps [from, to]
 *** "obs_period" Average duration of tokens for this token that overlaps [from, to]
 ** booth look_ahead and latency are json object giving their value both in term of TREX tick and real-time duration 
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically). Similarly all the attached information (except for their name) can change as the mission advance (although we often avoid it).
 ** Only total_obs and obs_period are affected by the from and to options
 ** It is possible to restrict the set of timeline to a known subset by specifying them on the URI. For example get http://<host>/rest/a/b/c will give information of only a, b and c  
{panel}


h4. Contents of a timeline

{panel:title=Contents of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}&to=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{date\}&format=date
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}&format=tick
 * *input:*
 ** \{name\} the name of the timeline
 ** _format_ the format used to specify _from_ and _to_ . Possible formats are:
 *** *date* : _from_ and _to_ are specified as date (eg 2013-06-03T16:04:57.330-07:00)
 *** *tick* : _from_ and _to_ are given as integer which are directly trex tick values
 *** If not specified the default format is *date*
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 ** when _to_ is not specified it is set to +infinity, when _from_ is not specified it is set to the current tick of -infinity if the specified _to_ is in the past.
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. Meaning all the token which
 *** can end after _from_ (ie their largest possible end time is >= to _from_)
 *** can start before _to_ (ie their smallest possible start time is <= to _to_)
 ** While the json format id still underwork here's an example of what I have now :
(the request: http://<host>/rest/timeline/dorado_survey?from=2013-06-03T16:04:57.330-07:00&to=2013-06-13T16:10:29.449-07:00)
 {code:javascript}
{
  "name": "dorado_survey"  
  "requested_tick_range": {
    "int": {
      "max": "16077",
      "min": "1671"
    }
  },
  "tokens": [
    {
      "pred": "None",
      "on": "dorado_survey"
      "Variable": [
        {
          "name": "start",
          "type": "date",
          "date": {
            "value": "2013-06-02T19:13:04.923976"
          }
        },
        {
          "name": "end",
          "type": "date",
          "date": {
            "min": "2013-06-04T15:36:04.923976"
          }
        },
        {
          "name": "duration",
          "type": "duration",
          "duration": {
            "min": "44:23:00"
          }
        }
      ]
    }
  ]
}
{code}
 ** In this example the result has the following attributes :
 *** "name" : The name of the timeline
 *** "alive" : Indicates if this timeline is currently still managed
 *** "requested_tick_range" : an interval giving the range \[_from_, _to_\] into ticks
 *** "token" : A table with all the tokens that match this range. Tokens are sorted by occurrence order

 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 ** 400: parsing error from the optionals fields 
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=2013-05-23&to=2013-05-31T12:00:00
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100&format=tick
{panel}

h4. Post a new goal

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
** Associated data: the goal in json format (request header need to set Content-Type to application/json)
 * *example of a curl command:*
 {code:none}
   curl -X POST --header 'Content-Type:application/json' -d '
   {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable": [
            { "name": "drifter",
              "type": "enum",
              "enum": { "elem": [ { "value": "MBARI21" } ] }
            },
            { "name": "lagrangian",
              "type": "bool",
              "bool": { "value": "1" }
            },
            { "name": "path",
              "enum": { "elem": [ { "value": "square" } ] }
            },
            { "name": "size", 
              "float": { "value": 1000.0 }
            },
            { "name": "start",
              "type": "date",
              "date": { "min": "2013-05-16T15:53:00" }
            },
            { "name": "duration"
              "duration": { "max": "18:00:00" },
              "type": "duration"
            }
        ]
    }
   }' http://<host>/rest/goal
 {code}
* *output on success:* A json structure with the following attributes:
** _id_ : A unique identifier for the goal
** _href_: URL where this goal can be accessed (through GET or DELETE)
** _Goal_: The goal representation (should be fairly similar to what data was posted but with small tweaks such as updated start duration and end information)
* *example output* from the command above:
{code:javascript}
{
    "id": "0xb0425cb0",
    "href": "/rest/goal/0xb0425cb0",
    "Goal":
    {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable":
        [
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "spotSim"
                        }
                    ]
                },
                "type": "enum",
                "name": "drifter"
            },
            {
                "bool":
                {
                    "value": "1"
                },
                "type": "bool",
                "name": "lagrangian"
            },
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "square"
                        }
                    ]
                },
                "type": "enum",
                "name": "path"
            },
            {
                "float":
                {
                    "value": "1000.0000000000000000"
                },
                "type": "float",
                "name": "size"
            },
            {
                "date":
                {
                    "min": "2013-05-16T16:16:01.566673"
                },
                "type": "date",
                "name": "start"
            },
            {
                "date":
                {
                    "min": "2013-05-16T16:17:01.566673"
                },
                "type": "date",
                "name": "end"
            },
            {
                "duration":
                {
                    "min": "00:01:00",
                    "max": "18:00:00"
                },
                "type": "duration",
                "name": "duration"
            }
        ]
    }
}
{code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

h4. Modify an existing goal

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

h4. Cancel a goal

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned


{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896076</id>
<property name="destinationPageTitle"><![CDATA[&nbsp;1.5 weeks\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896083</id>
<property name="destinationPageTitle"><![CDATA[2\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896082</id>
<property name="destinationPageTitle"><![CDATA[1\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896081</id>
<property name="destinationPageTitle"><![CDATA[2\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896080</id>
<property name="destinationPageTitle"><![CDATA[1\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896071</id>
<property name="destinationPageTitle"><![CDATA[2\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896070</id>
<property name="destinationPageTitle"><![CDATA[2\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896069</id>
<property name="destinationPageTitle"><![CDATA[1-2 weeks\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896068</id>
<property name="destinationPageTitle"><![CDATA[Running and Testing AUV Linux]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896075</id>
<property name="destinationPageTitle"><![CDATA[1 week\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5832903</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5865664</id>
</element>
</collection>
<property name="version">89</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-17 08:39:57.050</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896074</id>
<property name="destinationPageTitle"><![CDATA[1 - 2 weeks\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896073</id>
<property name="destinationPageTitle"><![CDATA[2\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5832905</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5865666</id>
</element>
</collection>
<property name="version">90</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 09:42:28.107</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896072</id>
<property name="destinationPageTitle"><![CDATA[2\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896092</id>
<property name="destinationPageTitle"><![CDATA[Hans/Pat/Frederic\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797667</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-13 13:25:12.733</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-13 13:25:12.733</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896093</id>
<property name="destinationPageTitle"><![CDATA[Hans\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797667</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-13 13:25:12.733</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-13 13:25:12.733</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">14188595</id>
<property name="title"><![CDATA[Decision Support System]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">14221362</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-07-12 22:29:00.377</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2010-08-11 10:49:28.550</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388176</id>
<property name="body"><![CDATA[Sept.&nbsp;9th&nbsp;Sea date: RC15 with auv-linux
* RC15 with auv-linux, 2 CPU's.&nbsp;&nbsp;&nbsp; No change to TREX.&nbsp;&nbsp; Front Following
* PSIM (nightly PSIM + monte carlo), FSIM (flight code test 150x speed), LSIM (cycle accurate simulator, analogous to QSIM), VSIM (with Linux), HITL (with Linux)
** PSIM with latency modelling \[Brent\]&nbsp;
** LSIM \-&nbsp;'angus'.&nbsp;&nbsp; Substantial task to get test platform setup. \[Thom\].&nbsp; by Aug. 7
** Bit copy from DMO auv-linux hard drive
** QSIM needed for validation of TREX (LSIM should then work no problem).&nbsp;
** VSIM with linux harddisk (at least twice, preferrably 5 times)
** Task:&nbsp;&nbsp;examine \*.cfg files used with QNX and insure they are the same when used with AUV-Linux
** AUV-Linux 'check-in', are we testing with what is used by DMO.&nbsp;&nbsp; Hans indicated he would use the head of CVS.&nbsp;&nbsp;
* \[P1, file bugs against auv-linux for changes needed for Sept sea date to insure publishing log files (McCann) is working).
\\

Oct. 1st &nbsp;Sea date:
* the head of TREX, code&nbsp;freeze by August 21st.
* Changes:
** Merged updates from RC15 into the head.&nbsp;
** Volume Survey (TBD, per John Ryan or Bob V.).&nbsp;&nbsp;&nbsp; &nbsp;
** Improved Gulper resource management (major enhancement, Angel)
** Redistributed / new partition of the model.&nbsp;&nbsp; Adding robustness to the model with more flexible constraints.&nbsp;&nbsp;
*** Work will need to be done for front following (angle has already updated volume survey).
** Transect prediction enhancement (looks further into the volume survey to calculate the min/max transects which are dynamically update)&nbsp;
\\

Date Unknown: Smart Gulper - goal would be November timeframe \[Brent\]
* Using TREX to manage Gulper sampling during a classical scripted survey
* Transition to use Corba to collect sensor data to determine Gulper firing (retiring VCS server).&nbsp;&nbsp; First step towards testing the Corba transition.
* Could be a singe CPU deployment (two user processes)
* Customer: Bob Vrijenhoek, Julio Harvey
\\

2 days contingency sea time
\\

Priority:&nbsp; P1="must have", P2="should have", P3="nice to have"
\\

*Core T-REX issues:*

1. Merge front branch with mainline in SVN. \[P1 - 2009\]
- The current state of T-REX is divided between the HEAD and the Front branches. There are aspects of the HEAD particularly Angel's 5 reactor configuration which should be folded in. Ideally we should merge the Front branch into the mainline and declare the Front branch dead.
-* Updates have been made to pull Front branch (RC15) to the head \[P1, Frederic, Done Jul 16\]
-* Test and Validation of the SVN head \[Frederic, Angel, in progress Jul 20, goal is to complete Jul 25\]

2. Move to Google/T-REX \[P2\] - (not crucial for MBARI, but should be done to insure clean tech transfer&nbsp;and efficient evolution in the future)
- move our code to Google \[P2 - 2010\]
- clean up interface w/ EUROPA esp. for ESA project \[P2, Frederic, goal mid-Sept 2009\]
-* Subtask: bring in latest EUROPA code to test the interface&nbsp;\[P2, Frederic 2009&nbsp;\]

\\
- this is something long overdue and we need to work on primarily to ensure some bugs found in T-REX core and some key issues in EUROPA are incorporated. Plus not doing so incrementally and ever so often will lead to different trajectories of code base which might kill us later on. Specifically for the ESA project the last item needs to be undertaken anyway since APSI will need to replace EUROPA.

3. Improvements to PSim for AUV dynamics model (partially checked in to Front branch 2009)
- this is to make the PSim reflect the uncertainty of the environment as well as to do a better job reflecting the dynamics of the AUV itself. This also ties in with the comment from Brent to patch the PSim to reflect the latency of execution of commands sent to the VCS. This should be managed by Brent or Thom as it is a relatively independent model and will still be a strong basis for testing purposes for further development of TREX.&nbsp;&nbsp; \[P1, Brent, Frederic to meet with Brent on Wednesday, needed by mid-August in order to be used by Sept. sea date\]

4. Cleaner separation of model (e.g rules.nddl)&nbsp; \[P3, time should be allocated in the schedule to allow refactoring, test plan is to use .valid files to verify model correctness.&nbsp;&nbsp; Goal would be to test at sea October 2009&nbsp;or later\]
- this involves (along with #5 below) of cleanly separating the model elements needed for a specific mission and structuring the code base in a way that is more intuitive instead of lumping all the constraints in one file.

5. Better configuration mgmt. of files in T-REX \[P3 - plan for December or 1Q2010, since build process changes are disruptive\]
- related to above, but more focused on the directory structure and build process of T-REX and moving away from the ctd2007 based directory structure.

6. Send more data from VCS to T-REX \[P1 - plan for October 2009, low risk modification\]
- by putting the lat/long into state publisher which in turn gets put in vehicle state timeline, we will be able to use the log files directly for Google Earth visualization without doing convulsions as Alhayat needs to do now.

7. Modeling how to break up a survey or goal and continue/need for interruption \[Potentially high risk modification, will require re-engineering of top level models and potential modification of TREX.&nbsp;&nbsp;&nbsp;&nbsp; Volume survey presents an easier 'restart' manually, side note from Frederic:&nbsp; Volume survey demonstrates the capability of TREX more than front following.).&nbsp;&nbsp;&nbsp; Plan for November/December, will likely 3 or months of effort (simulator and sea dates).&nbsp;&nbsp; We may not want to do this in 2009 (plan for 2010)
- this is an important (hence in bold font) issue that needs to be tackled and also something we signed up to do this year. Namely to be able to interrupt a mission and then resume. It will show a clear demarcation with the existing Layered Control work and really demonstrate that we can use plan projection for tasks which are less reactive and interrupt driven. It primarily involves modeling and will require you to be involved. It might be a case study for more complex modeling where Brent/Thom can look over your shoulder. We should aim to do this task as soon as possible given its utility (including what Julio seems to have mentioned on Monday) and its demonstration of clear implication of our work, not to mention publication possibilities.

Angel:

8. Implementation of parametric functions for Gulper usage \[P1 for Oct. 1\]
- this is the effort Angel is focusing on now and will provide utility-estimate based means to figure out when to trigger gulpers. More importantly this could be used in conjunction with T-REX Jr. where no deliberation for nav/control will be necessary and the standard script based approach in concert with cluster based estimation and these functions drive how a light-weight version of T-REX can be used. I have made this in bold font also given it should be considered on the critical path.

9. Resource reasoning (i.e how many gulpers left for the remainder of the mission) with and without task interruption.&nbsp; \[P2 since there are risk associated with the associated model changes, AND, Angel is gone end of Aug. not recommended for 2009\]
- this task is tied in with #7 above as one starting point for resource reasoning albeit of a simpler variety. The objective would be to see if goals can be executed/dropped in the light of existing gulper availability at sea and to do simple resource reasoning. In the event that when our AUVs have 48 hour battery charge and can revisit the location in the bay after an initial survey, the need to do this simple kind of reasoning increases.

T-REX items for Brent/Thom for '09

10. Psim modeling latency \[P1 Brent for Sept deployment, target is 2nd week in Aug\]
- this issue is directly related to #3 above. And would be a nice clean sub-task that Brent can work on.

11. VCS Config file (e.g ctd1 in devices. cfg)&nbsp; \[P3, this task may be elimated if we transition to Corba\]
- this should be wrapped up with #5 above to get an overall clean approach to dealing with varying configurations. Not only should the T-REX core be properly and systematically reconfigured, but so should the VCSServer. I suggest all file configuration issues (this and #5) be given to Thom.

12. Garbage collection of behaviors on stack (Tom O.)&nbsp;&nbsp; \[P3, Improves FSIM efficiency, November ?\]
* For longer missions, the stack size may be an issue (setpoint 0 inserted as IDLE instruction).&nbsp;&nbsp; Another option is to add an idle behaviour with a timeout and idle_stop behaviour to terminate idle.
* an item for Brent and Thom to work on. More specifically this might be something Thom can use to dive into AUV code given he's not at all familiar with how it is sturcutred other than having skimmed it some time ago.

13. Failure tracking during development&nbsp;and deployment&nbsp;\[P1\]
- this item relates to code checked in partially by Conor which might need modification and used for development time tracking and fixing of bugs. It also relates to issues in identifying a cause of failure and to see how improvements/augmentation can be done.
- Explaination:&nbsp; there is some instrumenting in TREX that facilitates debug, new developers need guidance on how to utilize the instrumentation output to understand what to fix/change. \[P1\]&nbsp;&nbsp;
-* Additional instrumentation or improvement to existing instrumentation \[P3\]
- Pre-deployment review&nbsp;with DMO of operation parameters (max speed, max depth, check-in frequency,&nbsp;localization (too&nbsp;close to shore)).&nbsp;&nbsp; Cruise plan with details (sensors, operational parms) \[P1\]&nbsp;
- Deployment results analysis for&nbsp;concise root cause on failures - deployment results report&nbsp;\[P1\]
\\

14. Set up a notification mechanism of which behavior is currently running on the stack (Tom)&nbsp; \[P3, November-December\]
- this is important so in the future T-REX can work around anomalies when lower level behaviors are superseded and T-REX needs to be contexually aware of vehicle state.

15. For a light weight VCS server (T-REX Jr) [see attachment to this email]&nbsp; \[P2 - date is TBD\]
- a. fire gulper without Layered Control
- b. VCSServer has no expectation on T-REX activity (i.e there is no need to track pings anymore) and it is robust to the case where T-REX is dead; this property should also be checked and applied to the StatePublisher
- c. VCSServer does not launch the Supervisor but is instead launched by it and reflects the nominal operation of the vehicle (ie what Hans does)
- this is an important (therefore in bold) part of our development to demonstrate this year and will make us more ubiquitous and possibly something Hans can use on his own provided for feature tracking the features are already encoded in the clusters that have been created.

16. Track multiple sensor signals for firing gulpers&nbsp;&nbsp; \[P2, follow-on to TREX-jr / SmartGulper, likely 2010\]
(important and useful for T-REX Jr). Share task with Angel.
- we will definitely need this in the near term (therefore also in bold). However the way in which we need to put this development feature together is in a way that differentiates us from what Rob and Layered Control can do.

17. Connecting a synthetic ocean model to the Linux Sim&nbsp; \[P2, Goal is November but could be 2010, Tom O.\]
- current Sim (both QNX and its Linux port) are limited in not being able to model dynamic features in the ocean. Since T-REX is going after unstructured phenomenon in the ocean, we need a way to be able to model them on shore to test the system more robustly. Mike Godin has some kind of a connection with a ROMS model. We should connect with him to understand what has been done to date.

Sea dates mission targets:

18. We agreed that for the week of Sept 7th when AUV-Linux will be tested and if/when we get a chance to do a full days mission we will use RC15 (i.e RC14 with the temporal constraint fix from the July 1st mission). We do not want to have any other changes brought in even if this is a test of Linux and not T-REX.

19. For the Oct 1st mission we should target (subject to agreement with John) an INL survey but use the updated 5 reactor configuration from Angel.

20. I was under the impression from an earlier schedule from John that Oct 26th is an autonomy day. But Rev 8 of the Zephyr schedule does not show that. This needs to be worked out with Teresa/Chris Grech in addition to the two floater days we still have.
\\

Plan visualization: (Alhayat)

Both the items are things we should get Alhayat to develop during his stay, and one which seems doable. However his approach thus far is not wholly satisfactory and we need a way to have interpolation of sensor data clearly visible within Google Earth or COVE. So this should be carefully supervised.&nbsp;&nbsp;&nbsp;
* Contact Google Earth team about missing features.

21. Visualize plans with track: show high-level tokens on the track with Google Earth (check on status of COVE and keep that engagement going)
- do with using KML files first. \[P1 - Done, Alhayat\]

22. Make the visualization dynamic so real-time evolution can be shown in GE (programmatic interface) (P2 - goal mid-Aug, Alhayat)
* Recommendation is javascript and GE as this seems far more stable and has a larger user base even for ocean based visualization.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896094</id>
<property name="destinationPageTitle"><![CDATA[Tom/Frederic\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797667</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-13 13:25:12.733</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-13 13:25:12.733</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896095</id>
<property name="destinationPageTitle"><![CDATA[Frederic\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797667</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-13 13:25:12.733</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-13 13:25:12.733</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5832907</id>
<property name="title"><![CDATA[Driver Porting Details]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5865668</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-21 07:41:49.843</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-17 08:37:54.743</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">14188597</id>
<property name="title"><![CDATA[Decision Support System]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">14221364</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-07-12 22:29:00.377</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2010-08-11 10:50:02.623</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896096</id>
<property name="destinationPageTitle"><![CDATA[Frederic\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797667</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-13 13:25:12.733</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-13 13:25:12.733</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896097</id>
<property name="destinationPageTitle"><![CDATA[Hans\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797667</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-13 13:25:12.733</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-13 13:25:12.733</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896098</id>
<property name="destinationPageTitle"><![CDATA[Hans/Thom\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797667</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-13 13:25:12.733</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-13 13:25:12.733</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896099</id>
<property name="destinationPageTitle"><![CDATA[Thom/Kanna\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797667</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-13 13:25:12.733</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-13 13:25:12.733</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896084</id>
<property name="destinationPageTitle"><![CDATA[2\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896085</id>
<property name="destinationPageTitle"><![CDATA[AttributeParser\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896086</id>
<property name="destinationPageTitle"><![CDATA[1\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896087</id>
<property name="destinationPageTitle"><![CDATA[uplinkQserver\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896088</id>
<property name="destinationPageTitle"><![CDATA[1\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896089</id>
<property name="destinationPageTitle"><![CDATA[all\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896090</id>
<property name="destinationPageTitle"><![CDATA[//www.cprogramming.com/debugging/valgrind.html]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9896091</id>
<property name="destinationPageTitle"><![CDATA[//www.tldp.org/HOWTO/Valgrind-HOWTO/\\]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-04-13 09:43:36.283</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-13 09:43:36.283</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">14188593</id>
<property name="title"><![CDATA[Decision Support System]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">14221360</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-07-12 22:29:00.377</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-07-12 22:29:00.377</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">14188614</id>
<property name="title"><![CDATA[Decision Support System]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">14221381</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-07-12 22:29:00.377</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2010-08-11 10:52:08.327</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">8159310</id>
<property name="fileName"><![CDATA[omniNotify.patch]]></property>
<property name="contentType"><![CDATA[text/x-patch]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="creatorName"><![CDATA[brent]]></property>
<property name="creationDate">2008-12-14 12:37:43.633</property>
<property name="lastModifierName"><![CDATA[brent]]></property>
<property name="lastModificationDate">2008-12-14 12:38:49.997</property>
<property name="fileSize">5178</property>
<property name="comment"><![CDATA[Allows omniNotify v2.1 to be compiled with gcc 4.2+ and latest microsoft C++ compilers]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1212601</id>
<property name="body"><![CDATA[h2. AUV CTD GUI (a.k.a. reviewGUI)

h3. About
From [~jgb]

{quote}If you are not interested in a graphical interface for easily plotting AUV data, or never use MATLAB, read no further...

Francois Cazenave, a summer student in my lab, has developed a nice GUI for selecting and plotting AUV data.  I think he did a nice job - certainly we are finding it useful, so I wanted to share it with the rest of you.  Please find attached his instructions for loading and using the GUI.  While he is still around, it would be great if folks could try it out and send us comments (especially if you encounter problems). 

This is intended as a tool for getting at and plotting ALL of the Dorado data, for those of you that might want to delve deeper than the standard plots.  There are some known issues - for example the AUV records some of its units incorrectly (e.g. degrees and radians) and since the GUI simply reflects the AUV data set, there are some places where the units are incorrect. 

I apologize to those of you who receive this multiple times - hopefully the various AUV lists are not too redundant.{quote}

h3. Documentation
* [Download documentation|^AUV-CTD-GUI.doc]
* Source code is in CVS in the auv_ctd module under src/matlab/reviewgui

h3. Download
* [Zip file of Matlab code|^reviewGUI.zip]


]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637262</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670030</id>
</element>
</collection>
<property name="version">71</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-10 16:16:50.973</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604646</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/display/FOCE/Configuring+Debian+Linux+for+FOCE+PC-104+Stack]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-05-06 16:29:15.047</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-06 16:29:15.047</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776501</id>
<property name="destinationPageTitle"><![CDATA[https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 09:04:34.507</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 09:04:34.507</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776502</id>
<property name="destinationPageTitle"><![CDATA[Requirements]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 09:04:34.507</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 09:04:34.507</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16351237</id>
<property name="fileName"><![CDATA[TREX-Checklist-V13.doc]]></property>
<property name="contentType"><![CDATA[application/msword]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 18:09:54.383</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 18:09:54.383</property>
<property name="fileSize">56320</property>
<property name="comment"><![CDATA[T-REX Checklist]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10911875</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10944639</id>
</element>
</collection>
<property name="version">28</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-07-18 07:55:44.930</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10911877</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10944641</id>
</element>
</collection>
<property name="version">29</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-11-02 15:42:48.487</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10911878</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10944642</id>
</element>
</collection>
<property name="version">30</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-11-02 15:53:50.883</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776483</id>
<property name="destinationPageTitle"><![CDATA[Autonomy Deployment Log]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776482</id>
<property name="destinationPageTitle"><![CDATA[TREX Volume Survey Operations]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776481</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/confluence/display/AUV/Task+List+July+2009]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637354</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670113</id>
</element>
</collection>
<property name="version">72</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-14 09:04:41.863</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776480</id>
<property name="destinationPageTitle"><![CDATA[Example of A TREX reactor]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776479</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776478</id>
<property name="destinationPageTitle"><![CDATA[TREX - installation]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776490</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans10.pdf]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776491</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans11.pdf]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776488</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776489</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776486</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776487</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist-V13.doc]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776484</id>
<property name="destinationPageTitle"><![CDATA[Autonomy ODSS Integration]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776485</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1343548</id>
<property name="viewCount">3</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/Linux+Port]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-08-03 13:55:15.047</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-04 11:23:15.023</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1343549</id>
<property name="viewCount">7</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/Home]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-08-03 13:55:15.097</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-22 16:23:15.037</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1343546</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/dosearchsite.action]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">875</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-07-24 09:01:15.090</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-07-24 09:01:15.090</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776494</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/confluence/download/attachments/8912901/TREX-Comm-strategy.pdf]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1343550</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/Home]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">589871</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-08-03 13:56:15.037</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-08-03 13:56:15.037</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776492</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/confluence/download/attachments/8912901/Timeline-2011.jpg]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18776493</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/confluence/download/attachments/8912901/CANON.pdf]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:26:36.903</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:26:36.903</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">9502773</id>
<property name="fileName"><![CDATA[TREX tuto.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-03-06 14:28:13.383</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-03-06 14:28:13.383</property>
<property name="fileSize">4944097</property>
<property name="comment"><![CDATA[PDF version of the March 6th 2009]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">14319617</id>
<property name="fileName"><![CDATA[TREX-svn.png]]></property>
<property name="contentType"><![CDATA[image/png]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2010-08-09 12:36:14.183</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 12:36:14.183</property>
<property name="fileSize">81144</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457460</id>
<property name="destinationPageTitle"><![CDATA[P1 - Done, Alhayat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.070</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.070</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457450</id>
<property name="destinationPageTitle"><![CDATA[P1\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457451</id>
<property name="destinationPageTitle"><![CDATA[P1\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457448</id>
<property name="destinationPageTitle"><![CDATA[P3, this task may be elimated if we transition to Corba\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457449</id>
<property name="destinationPageTitle"><![CDATA[P3, Improves FSIM efficiency, November ?\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457446</id>
<property name="destinationPageTitle"><![CDATA[P2 since there are risk associated with the associated model changes, AND, Angel is gone end of Aug. not recommended for 2009\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457447</id>
<property name="destinationPageTitle"><![CDATA[P1 Brent for Sept deployment, target is 2nd week in Aug\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457444</id>
<property name="destinationPageTitle"><![CDATA[P1 - plan for October 2009, low risk modification\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457445</id>
<property name="destinationPageTitle"><![CDATA[P1 for Oct. 1\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457458</id>
<property name="destinationPageTitle"><![CDATA[P2, follow-on to TREX-jr / SmartGulper, likely 2010\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.070</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.070</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457459</id>
<property name="destinationPageTitle"><![CDATA[P2, Goal is November but could be 2010, Tom O.\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.070</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.070</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457456</id>
<property name="destinationPageTitle"><![CDATA[see attachment to this email]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.070</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.070</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457457</id>
<property name="destinationPageTitle"><![CDATA[P2 - date is TBD\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.070</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.070</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457454</id>
<property name="destinationPageTitle"><![CDATA[P1\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.070</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.070</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604527</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/login.action?os_destination=%2Fdisplay%2FAUV%2FHome]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-18 10:57:15.050</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-18 10:57:15.050</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457455</id>
<property name="destinationPageTitle"><![CDATA[P3, November-December\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.070</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.070</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457452</id>
<property name="destinationPageTitle"><![CDATA[P3\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457453</id>
<property name="destinationPageTitle"><![CDATA[P1\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457435</id>
<property name="destinationPageTitle"><![CDATA[P1, Frederic, Done Jul 16\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457434</id>
<property name="destinationPageTitle"><![CDATA[P1 - 2009\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113889</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179374</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-07 14:40:10.997</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457433</id>
<property name="destinationPageTitle"><![CDATA[Brent\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457432</id>
<property name="destinationPageTitle"><![CDATA[Thom\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113887</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179372</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-07 10:11:52.387</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457431</id>
<property name="destinationPageTitle"><![CDATA[Brent\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457443</id>
<property name="destinationPageTitle"><![CDATA[P3 - plan for December or 1Q2010, since build process changes are disruptive\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457442</id>
<property name="destinationPageTitle"><![CDATA[P3, time should be allocated in the schedule to allow refactoring, test plan is to use .valid files to verify model correctness.&nbsp;&nbsp; Goal would be to test at sea October 2009&nbsp;or later\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113897</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179382</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-07 15:05:47.120</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457441</id>
<property name="destinationPageTitle"><![CDATA[P1, Brent, Frederic to meet with Brent on Wednesday, needed by mid-August in order to be used by Sept. sea date\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457440</id>
<property name="destinationPageTitle"><![CDATA[P2, Frederic 2009&nbsp;\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113895</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179380</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-07 14:56:23.243</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457439</id>
<property name="destinationPageTitle"><![CDATA[P2, Frederic, goal mid-Sept 2009\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457438</id>
<property name="destinationPageTitle"><![CDATA[P2 - 2010\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113893</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179378</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-07 14:46:49.217</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457437</id>
<property name="destinationPageTitle"><![CDATA[P2\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">10457436</id>
<property name="destinationPageTitle"><![CDATA[Frederic, Angel, in progress Jul 20, goal is to complete Jul 25\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-07-22 15:05:30.067</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-22 15:05:30.067</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20971528</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004296</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-04-09 13:20:29.733</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113891</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179376</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-07 14:41:11.707</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5374753</id>
<property name="title"><![CDATA[Driver Porting Details]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5407483</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-21 07:41:49.843</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-21 08:00:41.813</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20971536</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004304</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-04-09 13:42:13.540</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">17498188</id>
<property name="body"><![CDATA[{gliffy:name=Autonomy Critical Events 2011|space=AUV|page=Autonomy Critical events 2011|pageid=17465421|align=left|size=L}
Critical events for 2011. This is a living document and is also part of the Autonomy-Plans.

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17465421</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5374738</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5407468</id>
</element>
</collection>
<property name="version">84</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-05-02 15:16:30.330</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637358</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670117</id>
</element>
</collection>
<property name="version">74</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-18 11:57:52.993</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637356</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670115</id>
</element>
</collection>
<property name="version">73</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-18 10:59:35.407</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604545</id>
<property name="viewCount">6</property>
<property name="url"><![CDATA[http://oceana:8081/pages/editpage.action?pageId=3637442]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-21 07:55:15.030</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-28 08:06:15.027</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604544</id>
<property name="viewCount">4</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/AUV+Linux+-+Driver+Port+and+Validation]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-21 07:51:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-28 08:05:15.103</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5374740</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5407470</id>
</element>
</collection>
<property name="version">85</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-09 16:19:34.417</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604543</id>
<property name="viewCount">5</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/Driver+Porting+Details]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-21 07:42:15.043</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-21 08:30:15.020</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637360</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670119</id>
</element>
</collection>
<property name="version">75</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-18 12:55:23.187</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604542</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/createpage.action?spaceKey=AUV&title=Driver+Porting+Details&linkCreation=true&fromPageId=3113885]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-21 07:42:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-21 07:42:15.017</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5374779</id>
<property name="title"><![CDATA[Driver Porting Details]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5407509</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-21 07:41:49.843</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-11 14:45:34.167</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20971569</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004337</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-04-12 15:25:01.560</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5374781</id>
<property name="title"><![CDATA[Driver Porting Details]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5407511</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-21 07:41:49.843</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-11 15:00:55.797</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20971567</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004335</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-04-09 13:49:28.737</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113938</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179423</id>
</element>
</collection>
<property name="version">19</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-12 08:56:16.257</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113936</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179421</id>
</element>
</collection>
<property name="version">18</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-11 11:19:42.357</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113942</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179427</id>
</element>
</collection>
<property name="version">21</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-12 12:59:04.253</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113940</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179425</id>
</element>
</collection>
<property name="version">20</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-12 09:40:16.360</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20971574</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004342</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-04-12 16:25:50.300</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20971573</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004341</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-04-12 15:41:08.430</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20971571</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004339</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-04-12 15:28:25.857</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113944</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179429</id>
</element>
</collection>
<property name="version">22</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-12 13:04:34.737</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">917513</id>
<property name="title"><![CDATA[Source Code]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">950281</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-13 08:40:08.137</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-05-02 15:58:17.300</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">875</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">11763714</id>
<property name="fileName"><![CDATA[Timeline-2010.jpg]]></property>
<property name="contentType"><![CDATA[image/jpeg]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11239490</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-01-20 10:08:06.060</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-01-20 10:14:33.620</property>
<property name="fileSize">876119</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">2</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">11403267</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">917512</id>
<property name="title"><![CDATA[Source Code]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">950280</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-13 08:40:08.137</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-13 08:40:39.597</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">875</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113953</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179438</id>
</element>
</collection>
<property name="version">24</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-13 08:49:11.123</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637461</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670216</id>
</element>
</collection>
<property name="version">80</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-21 07:55:52.207</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113952</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179437</id>
</element>
</collection>
<property name="version">23</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-12 13:07:04.447</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604580</id>
<property name="viewCount">3</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/Termios+Dev+Info]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-22 16:22:15.040</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-22 16:23:15.040</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113958</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179443</id>
</element>
</collection>
<property name="version">27</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-13 15:43:47.280</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113956</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179441</id>
</element>
</collection>
<property name="version">26</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-13 11:18:14.453</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113955</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179440</id>
</element>
</collection>
<property name="version">25</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-13 09:01:03.437</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5374773</id>
<property name="title"><![CDATA[Driver Porting Details]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5407503</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-21 07:41:49.843</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-10 17:44:54.910</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113962</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179447</id>
</element>
</collection>
<property name="version">29</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-17 11:50:04.773</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637452</id>
<property name="title"><![CDATA[Driver Porting Details]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670207</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-21 07:41:49.843</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-21 07:55:29.257</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5374775</id>
<property name="title"><![CDATA[Driver Porting Details]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5407505</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-21 07:41:49.843</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-11 14:00:17.243</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113960</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179445</id>
</element>
</collection>
<property name="version">28</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-17 11:45:23.250</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637453</id>
<property name="title"><![CDATA[Driver Porting Details]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670208</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-21 07:41:49.843</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-21 07:57:06.313</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5374777</id>
<property name="title"><![CDATA[Driver Porting Details]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5407507</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-21 07:41:49.843</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-11 14:17:34.940</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637450</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670205</id>
</element>
</collection>
<property name="version">79</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-21 07:51:01.050</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113899</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179384</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-10 08:34:50.797</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">5734413</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://www.google.com/cse?cx=009377919030860066144%3Alz7n0zkwrus&cof=FORID%3A11&q=AUV&ad=w9&num=10&rurl=http%3A%2F%2Fwww.mbari.org%2Fsearchresults.htm%3Fcx%3D009377919030860066144%253Alz7n0zkwrus%26cof%3DFORID%253A11%26q%3DAUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-06-25 11:42:15.090</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-25 11:42:15.090</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637449</id>
<property name="title"><![CDATA[Driver Porting Details]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670204</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-21 07:41:49.843</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-21 07:54:21.580</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">5734412</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://www.google.cn/search?complete=1&hl=zh-CN&q=vehicles+matlab+code+download&start=50&sa=N]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-06-25 09:09:15.033</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-25 09:09:15.033</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113901</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179386</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-10 08:48:15.787</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">5734411</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://www.google.cn/search?complete=1&hl=zh-CN&q=vehicles+matlab+code+download&start=10&sa=N]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-06-25 08:53:15.077</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-25 08:54:15.027</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637447</id>
<property name="title"><![CDATA[Driver Porting Details]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670202</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-21 07:41:49.843</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-21 07:41:49.843</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113903</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179388</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-10 09:09:36.833</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604628</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/login.action?os_destination=%2Fdisplay%2FAUV%2FDriver%2BPorting%2BDetails]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-28 08:05:15.067</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-28 08:05:15.067</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637445</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670200</id>
</element>
</collection>
<property name="version">78</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-21 07:50:07.620</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637444</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670199</id>
</element>
</collection>
<property name="version">77</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-21 07:40:52.897</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113905</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179390</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-10 09:16:10.717</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113907</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179392</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-10 09:33:04.493</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637440</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670196</id>
</element>
</collection>
<property name="version">76</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-18 12:58:41.080</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113911</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179396</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-10 11:08:49.290</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113913</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179398</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-10 13:17:16.597</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113915</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179400</id>
</element>
</collection>
<property name="version">14</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-10 14:55:45.703</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113917</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179402</id>
</element>
</collection>
<property name="version">15</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-10 15:36:18.743</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113919</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179404</id>
</element>
</collection>
<property name="version">16</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-10 15:56:08.487</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">5734401</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://www.google.fr/search?hl=fr&q=qnx+auv+control&start=10&sa=N]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">589871</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-06-12 22:50:15.083</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-12 22:50:15.083</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113921</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179406</id>
</element>
</collection>
<property name="version">17</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm@mbari.org]]></property>
<property name="lastModificationDate">2008-03-11 08:21:23.003</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">5734404</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://www.google.fr/search?hl=fr&client=firefox-a&channel=s&rls=org.mozilla:fr:official&q=auv+qnx+control&start=40&sa=N]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-06-17 09:02:15.073</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-17 09:02:15.073</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">5734403</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://www.google.fr/search?hl=fr&client=firefox-a&channel=s&rls=org.mozilla:fr:official&hs=j6c&q=auv+qnx+control&start=10&sa=N]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">589871</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-06-17 08:32:15.083</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-17 08:32:15.083</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">5734409</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://www.google.it/search?hl=it&rlz=1T4GGIC_itIT229IT229&q=ctd+tool+matlab&meta=]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-06-23 03:28:15.040</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-23 03:28:15.040</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">5734406</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla:en-US:official&hs=UX3&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=lippert+coolrunner+linux&spell=1]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-06-19 10:41:15.090</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-19 10:41:15.090</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">5734407</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://www.google.com.tr/search?q=qnx.cfg&hl=tr&client=firefox-a&channel=s&rls=org.mozilla:tr:official&hs=U6Q&filter=0]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-06-19 13:59:15.047</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-19 13:59:15.047</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113990</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179475</id>
</element>
</collection>
<property name="version">32</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-17 13:50:19.227</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797831</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830599</id>
</element>
</collection>
<property name="version">18</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-28 13:18:38.820</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113993</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179478</id>
</element>
</collection>
<property name="version">34</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-18 08:34:45.340</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113992</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179477</id>
</element>
</collection>
<property name="version">33</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-17 15:44:10.033</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797826</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830594</id>
</element>
</collection>
<property name="version">17</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-27 10:54:17.657</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113979</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179464</id>
</element>
</collection>
<property name="version">31</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-17 13:44:50.320</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797819</id>
<property name="title"><![CDATA[Iridum modem testing]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830587</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-04-17 15:16:21.417</property>
<property name="lastModifierName"><![CDATA[oreilly]]></property>
<property name="lastModificationDate">2009-04-27 09:16:07.240</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797756</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797820</id>
<property name="title"><![CDATA[Iridum modem testing]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830588</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-04-17 15:16:21.417</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-27 22:03:53.103</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797756</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797813</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830581</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-27 15:43:57.227</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113977</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179462</id>
</element>
</collection>
<property name="version">30</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-17 11:53:20.817</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797812</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830580</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-27 15:43:13.133</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797811</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830579</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-27 15:41:38.440</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797809</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830577</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-27 14:23:30.007</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797806</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830574</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-27 14:20:18.097</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797805</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830573</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-27 14:19:56.873</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797804</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830572</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-27 14:19:26.117</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">15663111</id>
<property name="body"><![CDATA[{info:title=Autonomous Underwater Vehicles Bookmarks }
This page is a container for all the bookmarks in this space. Do not delete or move it or you will lose all your bookmarks.
[Bookmarks in Autonomous Underwater Vehicles|https://oceana.mbari.org/confluence/spaces/space-bookmarks.action?spaceKey=AUV] | [Links for  Autonomous Underwater Vehicles|https://oceana.mbari.org/confluence/spaces/space-bookmarks.action?mode=bookmarksfor&spaceKey=AUV]
{info}
{bookmarks:max=15}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">15630343</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797803</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830571</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 11:49:08.337</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797864</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830632</id>
</element>
</collection>
<property name="version">19</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-28 16:13:05.587</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Labelling" package="com.atlassian.confluence.labels">
<id name="id">30</id>
<property name="label" class="Label" package="com.atlassian.confluence.labels"><id name="id">21</id>
</property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">919</id>
</property>
<property name="spaceKey"><![CDATA[AUV]]></property>
<property name="user"><![CDATA[kanna]]></property>
<property name="creationDate">2007-02-20 13:11:29.503</property>
<property name="lastModificationDate">2007-02-20 13:11:29.503</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114005</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179490</id>
</element>
</collection>
<property name="version">35</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-18 08:34:56.470</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913396</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8946137</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-01-22 15:06:32.507</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5865558</id>
<property name="body"><![CDATA[\\

h5. Simulation
\\ &nbsp;
* The SimulatedTailCone can be launched in its own process, called "simtail".
* The _tailcone_ application&nbsp;takes the option "-sim", which tells the tailcone to forward commands to the simulator after actuating the tailcone device.

* Recall that a "processes" configuration file is now specified to _supervisor_ at startup; _supervisor_&nbsp;will first launch the _vehicleCore_ process, then any processes specified in the process configuration file. To run a simulation using the simulated tailcone, your processes file should look like this:
* &nbsp;\# Run simulator application&nbsp; simulator&nbsp;&nbsp; # Launch simulated tailcone service&nbsp; simtail
* &nbsp;To run simulation with the real tailcone in the loop, your process file should look like this:
* &nbsp;

&nbsp; # Run simulator application&nbsp; simulator&nbsp;&nbsp; # Run the real tailcone service; be sure to specify '-sim' since we are also&nbsp; # running the simulator&nbsp; tailcone \-sim \-dev /dev/ttySX1
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5832794</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114057</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179541</id>
</element>
</collection>
<property name="version">38</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-20 14:39:52.580</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114055</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179538</id>
</element>
</collection>
<property name="version">37</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-19 16:19:00.293</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">17661957</id>
<property name="fileName"><![CDATA[Autonomy Critical Events 2011]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17465421</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-06-07 16:18:58.090</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-06-07 16:18:58.090</property>
<property name="fileSize">133</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">17661961</id>
<property name="fileName"><![CDATA[Timeline-2011.jpg]]></property>
<property name="contentType"><![CDATA[image/jpeg]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-06-07 16:26:53.657</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-06-07 16:26:53.657</property>
<property name="fileSize">500362</property>
<property name="comment"><![CDATA[Autonomy Critical Events 2011]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114034</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179517</id>
</element>
</collection>
<property name="version">36</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-18 15:39:41.990</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797742</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830511</id>
</element>
</collection>
<property name="version">15</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-15 17:06:14.803</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797740</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830509</id>
</element>
</collection>
<property name="version">14</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-15 16:30:23.943</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797796</id>
<property name="title"><![CDATA[Iridum modem testing]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830565</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-04-17 15:16:21.417</property>
<property name="lastModifierName"><![CDATA[oreilly]]></property>
<property name="lastModificationDate">2009-04-23 12:27:11.927</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797756</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797797</id>
<property name="title"><![CDATA[Iridum modem testing]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830566</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-04-17 15:16:21.417</property>
<property name="lastModifierName"><![CDATA[oreilly]]></property>
<property name="lastModificationDate">2009-04-27 09:14:46.047</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797756</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114090</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179572</id>
</element>
</collection>
<property name="version">46</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-21 16:44:58.267</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797798</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830567</id>
</element>
</collection>
<property name="version">16</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-16 10:20:10.263</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114084</id>
<property name="title"><![CDATA[AUV Debian4 Linux Install]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179566</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-21 16:42:11.733</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114086</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179568</id>
</element>
</collection>
<property name="version">45</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-21 16:37:34.903</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114079</id>
<property name="title"><![CDATA[AUV Debian4 Linux Install]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179561</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-21 16:37:08.947</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114080</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179562</id>
</element>
</collection>
<property name="version">44</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 16:32:56.627</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797788</id>
<property name="title"><![CDATA[Iridum modem testing]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830557</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-04-17 15:16:21.417</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-04-17 15:16:21.417</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797756</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797790</id>
<property name="title"><![CDATA[Iridum modem testing]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830559</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-04-17 15:16:21.417</property>
<property name="lastModifierName"><![CDATA[oreilly]]></property>
<property name="lastModificationDate">2009-04-23 09:44:01.267</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797756</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114082</id>
<property name="title"><![CDATA[AUV Debian4 Linux Install]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179564</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-21 16:37:34.883</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114076</id>
<property name="title"><![CDATA[AUV Debian4 Linux Install]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179558</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 16:35:05.490</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114078</id>
<property name="title"><![CDATA[AUV Debian4 Linux Install]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179560</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-21 16:36:04.797</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114072</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179554</id>
</element>
</collection>
<property name="version">43</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 16:16:58.227</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114068</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179550</id>
</element>
</collection>
<property name="version">41</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-21 10:51:29.273</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114069</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179551</id>
</element>
</collection>
<property name="version">42</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 16:14:52.660</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114059</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179543</id>
</element>
</collection>
<property name="version">39</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-21 10:47:55.497</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114061</id>
<property name="title"><![CDATA[AUV Linux - Debian Setup, Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179545</id>
</element>
</collection>
<property name="version">40</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-21 10:49:16.973</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114108</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179590</id>
</element>
</collection>
<property name="version">16</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 09:24:40.977</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797705</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830474</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 10:42:35.510</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797703</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830472</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 10:28:15.407</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797701</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830470</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 10:23:13.850</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114095</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179577</id>
</element>
</collection>
<property name="version">47</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-21 16:48:05.400</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355138</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10387875</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-02-25 11:54:19.860</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114099</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179581</id>
</element>
</collection>
<property name="version">48</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-21 16:49:49.290</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797724</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830493</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 11:47:07.807</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797726</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830495</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 12:48:47.570</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797738</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830507</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 12:49:43.420</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797711</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830480</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 11:11:47.527</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797713</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830482</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 11:14:54.877</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797707</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830476</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 10:59:38.290</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797709</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830478</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 11:04:34.107</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797719</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830488</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 11:44:40.333</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797721</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830490</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-03-06 14:29:51.903</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797715</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830484</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 11:26:44.140</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797717</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830486</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 11:37:19.287</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">28</id>
<property name="fileName"><![CDATA[AMC Overview.png]]></property>
<property name="contentType"><![CDATA[image/png]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:42:37.187</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 11:42:37.187</property>
<property name="fileSize">17332</property>
<property name="comment"><![CDATA[AMC Overview]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1179846</id>
<property name="title"><![CDATA[MATLAB Tools]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1212612</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 09:26:04.537</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 15:40:05.177</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1179845</id>
<property name="title"><![CDATA[MATLAB Tools]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1212611</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 09:26:04.537</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 15:39:49.997</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1179844</id>
<property name="title"><![CDATA[MATLAB Tools]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1212610</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 09:26:04.537</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 15:39:10.767</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1179843</id>
<property name="title"><![CDATA[MATLAB Tools]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1212609</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 09:26:04.537</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 15:38:04.117</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797666</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830434</id>
</element>
</collection>
<property name="version">91</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:30:50.383</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">33</id>
<property name="fileName"><![CDATA[Slide1.jpg]]></property>
<property name="contentType"><![CDATA[image/jpeg]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">857</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-02-12 13:47:49.480</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-02-12 13:48:10.300</property>
<property name="fileSize">176374</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">15728705</id>
<property name="fileName"><![CDATA[Autonomy-plans11.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-01-10 12:26:21.030</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-01-10 12:26:21.030</property>
<property name="fileSize">961467</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">32</id>
<property name="fileName"><![CDATA[overview.tiff]]></property>
<property name="contentType"><![CDATA[image/tiff]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-12 08:50:10.660</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-12 08:50:10.660</property>
<property name="fileSize">17036</property>
<property name="comment"><![CDATA[AMV Overview]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1179847</id>
<property name="title"><![CDATA[MATLAB Tools]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1212613</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 09:26:04.537</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 15:40:21.550</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1179837</id>
<property name="title"><![CDATA[MATLAB Tools]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1212603</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 09:26:04.537</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 09:28:41.473</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1179836</id>
<property name="title"><![CDATA[MATLAB Tools]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1212602</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 09:26:04.537</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 09:26:04.537</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797669</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830438</id>
</element>
</collection>
<property name="version">19</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-01-20 08:27:25.680</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1179842</id>
<property name="title"><![CDATA[MATLAB Tools]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1212608</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 09:26:04.537</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 15:37:34.907</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1179841</id>
<property name="title"><![CDATA[MATLAB Tools]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1212607</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 09:26:04.537</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 09:29:37.533</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1179833</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1212600</id>
</element>
</collection>
<property name="version">15</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-03-28 14:17:41.667</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">764</id>
<property name="title"><![CDATA[Linux Port]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">761</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:40:04.233</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:40:04.233</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">766</id>
<property name="title"><![CDATA[Linux Port]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">763</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:40:04.233</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:40:47.480</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">765</id>
<property name="title"><![CDATA[Linux Port]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">762</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:40:04.233</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:40:19.730</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">13664264</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">13697029</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[brent]]></property>
<property name="lastModificationDate">2010-01-20 22:41:18.867</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">11403265</id>
<property name="fileName"><![CDATA[Timeline-2010.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-01-20 10:00:02.047</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-01-20 10:00:02.047</property>
<property name="fileSize">69983</property>
<property name="comment"><![CDATA[Autonomy project timeline and critical events]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">11403267</id>
<property name="fileName"><![CDATA[Timeline-2010.jpg]]></property>
<property name="contentType"><![CDATA[image/jpeg]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11239490</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-01-20 10:08:06.060</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-03-30 08:56:50.327</property>
<property name="fileSize">535224</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">3</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">752</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">749</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 11:17:34.830</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">11403266</id>
<property name="fileName"><![CDATA[Timeline-2010.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11239490</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-01-20 10:04:52.167</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-01-20 10:10:37.230</property>
<property name="fileSize">69983</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">11403269</id>
<property name="fileName"><![CDATA[plasma-gcc4.3.patch]]></property>
<property name="contentType"><![CDATA[text/x-patch]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="creatorName"><![CDATA[brent]]></property>
<property name="creationDate">2010-01-20 22:33:14.770</property>
<property name="lastModifierName"><![CDATA[brent]]></property>
<property name="lastModificationDate">2010-01-20 22:33:14.770</property>
<property name="fileSize">1699</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">11403268</id>
<property name="fileName"><![CDATA[Timeline-2010.jpg]]></property>
<property name="contentType"><![CDATA[image/jpeg]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11239490</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-01-20 10:08:06.060</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-01-20 10:10:37.223</property>
<property name="fileSize">2410707</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">11403267</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">754</id>
<property name="title"><![CDATA[2007-02-02 Minutes]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">751</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:25:44.040</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 11:25:44.040</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">755</id>
<property name="title"><![CDATA[2007-02-02 Minutes]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">752</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:25:44.040</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 11:30:11.190</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">21431166</id>
<property name="destinationPageTitle"><![CDATA[from, to]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-06-05 13:05:46.333</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-06-05 13:05:46.333</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">756</id>
<property name="title"><![CDATA[2007-02-02 Minutes]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">753</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:25:44.040</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 11:41:26.460</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">21431167</id>
<property name="destinationPageTitle"><![CDATA[from, to]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-06-05 13:05:46.333</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-06-05 13:05:46.333</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">757</id>
<property name="title"><![CDATA[2007-02-02 Minutes]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">754</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:25:44.040</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 11:43:19.683</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">21431164</id>
<property name="destinationPageTitle"><![CDATA[H*\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-06-05 13:05:46.333</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-06-05 13:05:46.333</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">758</id>
<property name="title"><![CDATA[2007-02-02 Minutes]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">755</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:25:44.040</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 11:43:30.400</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">21431165</id>
<property name="destinationPageTitle"><![CDATA[.SUBSECOND\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-06-05 13:05:46.333</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-06-05 13:05:46.333</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">759</id>
<property name="title"><![CDATA[2007-02-02 Minutes]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">756</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:25:44.040</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 11:47:40.427</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">760</id>
<property name="title"><![CDATA[2007-02-02 Minutes]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">757</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:25:44.040</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 11:50:29.780</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">761</id>
<property name="title"><![CDATA[2007-02-02 Minutes]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">758</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:25:44.040</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 11:50:45.593</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">21431168</id>
<property name="destinationPageTitle"><![CDATA[_from_, _to_\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-06-05 13:05:46.333</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-06-05 13:05:46.333</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">762</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">759</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 11:24:43.847</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798105</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830861</id>
</element>
</collection>
<property name="version">28</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-01 13:46:01.470</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798103</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830859</id>
</element>
</collection>
<property name="version">27</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-01 13:40:58.063</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798101</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830857</id>
</element>
</collection>
<property name="version">26</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-29 17:51:24.660</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">983103</id>
<property name="destinationPageTitle"><![CDATA[//svnbook.red-bean.com/]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">875</id>
</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-05-02 16:00:52.887</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-05-02 16:00:52.887</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">983102</id>
<property name="destinationPageTitle"><![CDATA[//subversion.tigris.org/]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">875</id>
</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-05-02 16:00:52.887</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-05-02 16:00:52.887</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">983101</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">875</id>
</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-05-02 16:00:52.887</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-05-02 16:00:52.887</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9371957</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9404706</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-09 14:22:32.030</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9371959</id>
<property name="title"><![CDATA[AUV Debian4 Linux and auv-pkgs Install, build]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9404708</id>
</element>
</collection>
<property name="version">17</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[brent]]></property>
<property name="lastModificationDate">2008-12-14 12:39:57.257</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">13664268</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">13697033</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2010-06-14 16:04:20.407</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798114</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830869</id>
</element>
</collection>
<property name="version">30</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-02 14:22:50.260</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10354778</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10387545</id>
</element>
</collection>
<property name="version">33</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-05-06 10:05:27.557</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798112</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830867</id>
</element>
</collection>
<property name="version">29</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-01 14:00:25.733</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">557059</id>
<property name="fileName"><![CDATA[AMC-VCS-handshake.jpg]]></property>
<property name="contentType"><![CDATA[image/jpeg]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">589839</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-03-19 12:53:46.160</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-03-19 12:54:03.477</property>
<property name="fileSize">264871</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="SpaceDescription" package="com.atlassian.confluence.spaces">
<id name="id">750</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="title"/><collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">747</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.827</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 11:17:34.827</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="labellings"><element class="Labelling" package="com.atlassian.confluence.labels"><id name="id">9011204</id>
</element>
<element class="Labelling" package="com.atlassian.confluence.labels"><id name="id">11206657</id>
</element>
<element class="Labelling" package="com.atlassian.confluence.labels"><id name="id">13828101</id>
</element>
<element class="Labelling" package="com.atlassian.confluence.labels"><id name="id">30867461</id>
</element>
</collection>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440023</id>
<property name="destinationPageTitle"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:01.280</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:42:01.280</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440022</id>
<property name="destinationPageTitle"><![CDATA[<nstep>\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:27:42.173</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:27:42.173</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440021</id>
<property name="destinationPageTitle"><![CDATA[-fast\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:27:42.173</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:27:42.173</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">842</id>
<property name="title"><![CDATA[Linux Port]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">839</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:40:04.233</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-08 10:47:34.307</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440020</id>
<property name="destinationPageTitle"><![CDATA[<nstep>\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:27:42.173</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:27:42.173</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">557064</id>
<property name="fileName"><![CDATA[Gulper-behavior.jpg]]></property>
<property name="contentType"><![CDATA[image/jpeg]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">589901</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-04-02 21:50:52.637</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-04-02 21:51:14.680</property>
<property name="fileSize">286365</property>
<property name="comment"><![CDATA[Draft Gulper behavior block diagram from Rob]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">836</id>
<property name="title"><![CDATA[Linux Port]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">833</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:40:04.233</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:41:01.083</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440026</id>
<property name="destinationPageTitle"><![CDATA[//www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:01.280</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:42:01.280</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440025</id>
<property name="destinationPageTitle"><![CDATA[//www.debianhelp.org/]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:01.280</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:42:01.280</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">838</id>
<property name="title"><![CDATA[Missing Headers]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">835</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-08 10:48:23.677</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-08 10:48:23.677</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">837</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440024</id>
<property name="destinationPageTitle"><![CDATA[AUV Software Install on Debian 4.0]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:01.280</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:42:01.280</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8060983</id>
<property name="title"><![CDATA[AUV Debian4 Linux and auv-pkgs Install, build]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8093749</id>
</element>
</collection>
<property name="version">14</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-25 14:48:55.057</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">874</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">871</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-13 08:38:34.580</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">873</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">870</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-13 08:38:20.630</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8060985</id>
<property name="title"><![CDATA[AUV Debian4 Linux and auv-pkgs Install, build]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8093751</id>
</element>
</collection>
<property name="version">15</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[brent]]></property>
<property name="lastModificationDate">2008-12-14 12:33:56.640</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">872</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">869</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-13 08:38:08.507</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114320</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179795</id>
</element>
</collection>
<property name="version">49</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-21 16:51:19.293</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">871</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">868</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-13 08:37:52.980</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">870</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">867</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-13 08:35:08.323</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9371891</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9404640</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-02-11 10:45:31.493</property>
<property name="versionComment"><![CDATA[Corrected sim flags and added a note about that]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">868</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">865</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:38:01.790</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9371893</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9404642</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-02-25 09:44:58.327</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440012</id>
<property name="destinationPageTitle"><![CDATA[AUV Debian4 Linux and auv-pkgs Install, build]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:27:42.173</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:27:42.173</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9371903</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9404652</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-02-25 11:43:31.893</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440013</id>
<property name="destinationPageTitle"><![CDATA[//sbc.winsystems.com/products/EPX-GX500.cfm]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:27:42.173</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:27:42.173</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440014</id>
<property name="destinationPageTitle"><![CDATA[options\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:27:42.173</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:27:42.173</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9371905</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9404654</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-02-25 11:49:29.557</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440015</id>
<property name="destinationPageTitle"><![CDATA[options\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:27:42.173</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:27:42.173</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440016</id>
<property name="destinationPageTitle"><![CDATA[-v\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:27:42.173</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:27:42.173</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8060987</id>
<property name="title"><![CDATA[AUV Debian4 Linux and auv-pkgs Install, build]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8093752</id>
</element>
</collection>
<property name="version">16</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[brent]]></property>
<property name="lastModificationDate">2008-12-14 12:35:37.727</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440017</id>
<property name="destinationPageTitle"><![CDATA[-sim\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:27:42.173</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:27:42.173</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440018</id>
<property name="destinationPageTitle"><![CDATA[-fastsim\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:27:42.173</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:27:42.173</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">843</id>
<property name="title"><![CDATA[Linux Port]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">840</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:40:04.233</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-08 13:57:48.617</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9371901</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9404650</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-02-25 09:45:49.753</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9440019</id>
<property name="destinationPageTitle"><![CDATA[-sim\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:27:42.173</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:27:42.173</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">858</id>
<property name="title"><![CDATA[Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">855</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-02-12 13:41:13.823</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-02-12 13:41:13.823</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">857</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">856</id>
<property name="title"><![CDATA[2007-02-02 Minutes]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">853</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:25:44.040</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 11:51:25.787</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372118</id>
<property name="title"><![CDATA[AUV Debian4 Linux and auv-pkgs Install, build]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9404863</id>
</element>
</collection>
<property name="version">19</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-04 09:01:11.503</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8388867</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup

\\

h4. Debian Version

\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come

Note: Debian 5.0 (lenny) was released on Feb. 14{^}th^.&nbsp; &nbsp;&nbsp;It contains GNU Compiler Collection 4.3.2, Linux kernel version 2.6.26.&nbsp;&nbsp; This version will NOT initially be used until Debian 4.0 is proven.

Debian 4.0 and AUV-Linux install instructions [AUV Debian4 Linux and auv-pkgs Install, build]
\\

h4. Build Server Setup

Note: There was no easy access to a DVD burner for full Debian installer&nbsp;so the process used the&nbsp;net install DVD used in previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop+Standard configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.&nbsp;&nbsp;&nbsp; Machine name is betta.shore.mbari.org.
\\

h5. Required Packages

* apt-get install jam
* apt-get install swig&nbsp; (libSystem fails to build)
* apt-get install libboost-regex-dev

h5. \\

Java Installation

Create a java installation specific to the auv-linux and auv-autonomy development and decouple from the debian system java:

Install in a named directory in opt, example: /opt/jdk_1.6u12

In the dorado1 user profile, set the environment variable to /opt/jdk_1.6u12 - explicit references is better for config management.&nbsp;&nbsp;

Download jdk to /home/dorado1/tools/java
# At the terminal: Type:
*su*
# Enter the root password.
# Change to the directory in which you want to install and copy the java installer bin to this directory. Type:
*cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
# Change the permission of the bin&nbsp;file to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
# Verify that you have permission to execute the file. Type:
*ls \-l*
# Start the installation process.Type:

*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*

Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.
\\
\\

\\
&nbsp;

h5. Autonomy Software checkout:

cd /home/dorado1/prj&nbsp;

svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk TREX&nbsp;

copy Europa from threadfish (Yikes\! NASA version is moving ahead of TREX)
\\

Build failed (jam in TREX) due to missing boost regex loadable module.&nbsp;&nbsp;&nbsp; To resolve this, a debian package was installed (developer version) which is a bit of a sledge hammer.&nbsp;&nbsp; Need to determine of this is a standard component of the OS or a developer package specific to TREX (judged it to be an OS component)

apt-get install _libboost-regex-dev_

Build failed due to libSystem.so missing

Fix:&nbsp; add $PLASMA_HOME/lib to LD_LIBRARY_PATH

\\
&nbsp;

h4. Test Server

\\
\\
For T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)

Intel 82551 ethernet (e100) device, not autoprobed by debian installer

Installed using net-install&nbsp;debian 4.0r3 and mirror with standard (not desktop like build server).

Note: there were several DVD read failures on the DVD media during the install which thru re-run (retry) in the installer were worked around.
\\

Generating Java proxy classes from .idl
idlj \-td /idlj InsIF.idl
com.sun.tools.corba.se.idl.InvalidArgument: Invalid argument:&nbsp; \-td.

Compiler Usage:

&nbsp;&nbsp;&nbsp; java com.sun.tools.corba.se.idl.toJavaPortable.Compile \[options\] <idl file>

where <idl file> is the name of a file containing IDL definitions, and
\[options\] is any combination of the options listed below.&nbsp; The options
are optional and may appear in any order; <idl file> is required and
must appear last.
&nbsp;

h4. T-Rex CheatSheet


h5. Directory structure :

For compiling/executing correctly TREX expects the following directory structure
<path>
auv-shared
auv-linux&nbsp;&nbsp;&nbsp;
auv (note: this is the auv-qnx directory and may be deprecated in the near future)
Europa
Europa/PLASMA
TREX
We will assume on the rest of the document that this structure is respected.
\\
\\
svn+ssh://

Initializing TREX environment variables:

The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
The compilation of TREX core libraries is done similarly
&nbsp;% cd $TREX_HOME
% jam
after that you can compile the binaries amc and sim
% cd ctd2007
% jam amc
% jam sim
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

Using TREX
TREX configuration files :
On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
amc.play.cfg: used to replay a mission for debugging purpose.
amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
&nbsp;vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :

<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
&nbsp;&nbsp;<Timeline name="vehicleState"&nbsp; command="0" />
&nbsp;<Timeline name="setpoint" class="Setpoint" command="1" />
&nbsp;<Timeline name="descend"&nbsp; class="Descend" command="1" />
&nbsp;<Timeline name="ascend"&nbsp;&nbsp; class="Ascend" command="1" />
&nbsp;<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
&nbsp;<Timeline name="getgps" class="GPS" command="1" />
&nbsp;<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>

remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
\*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
\*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

Note on AUV configuration files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that latitude and longitude&nbsp; on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
&nbsp;Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes depthn with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher
Starting AUV code for TREX
This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
On QNX
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer \[-v\] \[-sim\]
note:
\-v fro being verbose
\-sim when in simulation (ie not HW in the loop)&nbsp;

On Linux
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer \-proc <proc>.cfg \[-fastsim\]
note:
\-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
\-fastsim indicates to vcsServer that it will run into linux fast simulation&nbsp;
You can change how verbose auv-linux will be by editing log4cxx.cfg
Starting TREX in batch mode
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg \[-fast\|-sim\] \[<nstep>\]
note:
the argument order is fixed
\-fast indicates that the clock used would connect to auv-linux fast simulation clock
\-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
<nstep> indicates how much step TREX is allowed to do for deliberation&nbsp; at least on each tick&nbsp; when on \-fast or \-sim mode.
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
% cd $TREX_LOG_DIR
% tail \-F latest/TREX.log

Starting TREX in interactive mode
% cd $TREX_HOME
% sim_o_rt <mission> \[-sim\|-fast\] \[<nstep>\]
Options:
&nbsp;Q :\- Quit
&nbsp;N :\- Next
&nbsp;G :\- Goto <tick> e.g. g100
&nbsp;R :\- Reload Debug.cfg
&nbsp;\+ :\- enable pattern e.g. '+Agent'
&nbsp;\- :\- disable pattern e.g. '-Agent'
&nbsp;\! :\- disable all debug messages
>

You can see here that the command is quite similar to amc except&nbsp; that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick (n) , etc commands R/+/-/\! are used to manipulate how much data you want&nbsp; on the Debug.log starting from now.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797934</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830701</id>
</element>
</collection>
<property name="version">20</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-29 10:12:03.737</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">15695890</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/confluence/spaces/space-bookmarks.action?mode=bookmarksfor&spaceKey=AUV]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">15630343</id>
</property>
<property name="creatorName"/><property name="creationDate">2010-11-18 20:06:03.190</property>
<property name="lastModifierName"/><property name="lastModificationDate">2010-11-18 20:06:03.190</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">15695889</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/confluence/spaces/space-bookmarks.action?spaceKey=AUV]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">15630343</id>
</property>
<property name="creatorName"/><property name="creationDate">2010-11-18 20:06:03.190</property>
<property name="lastModifierName"/><property name="lastModificationDate">2010-11-18 20:06:03.190</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797952</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830719</id>
</element>
</collection>
<property name="version">22</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-29 15:55:26.637</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797954</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830721</id>
</element>
</collection>
<property name="version">23</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-29 17:37:34.737</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797950</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830717</id>
</element>
</collection>
<property name="version">21</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-29 14:35:22.047</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">876</id>
<property name="title"><![CDATA[Source Code]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">873</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-13 08:40:08.137</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-13 08:40:08.137</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">875</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Labelling" package="com.atlassian.confluence.labels">
<id name="id">21102595</id>
<property name="label" class="Label" package="com.atlassian.confluence.labels"><id name="id">21135362</id>
</property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="spaceKey"><![CDATA[AUV]]></property>
<property name="user"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:22:09.600</property>
<property name="lastModificationDate">2013-04-09 13:22:09.600</property>
</object>
<object class="Labelling" package="com.atlassian.confluence.labels">
<id name="id">21102594</id>
<property name="label" class="Label" package="com.atlassian.confluence.labels"><id name="id">21135361</id>
</property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="spaceKey"><![CDATA[AUV]]></property>
<property name="user"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:22:04.217</property>
<property name="lastModificationDate">2013-04-09 13:22:04.217</property>
</object>
<object class="Labelling" package="com.atlassian.confluence.labels">
<id name="id">21102593</id>
<property name="label" class="Label" package="com.atlassian.confluence.labels"><id name="id">21</id>
</property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="spaceKey"><![CDATA[AUV]]></property>
<property name="user"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:21:55.577</property>
<property name="lastModificationDate">2013-04-09 13:21:55.577</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797956</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830723</id>
</element>
</collection>
<property name="version">24</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-29 17:42:28.820</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797958</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830725</id>
</element>
</collection>
<property name="version">25</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-04-29 17:47:33.997</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114378</id>
<property name="title"><![CDATA[AUV Debian4 Linux Install]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179851</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-21 16:44:10.023</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114382</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179855</id>
</element>
</collection>
<property name="version">51</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-25 14:00:08.343</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114380</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179853</id>
</element>
</collection>
<property name="version">50</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-24 09:43:06.180</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114386</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179859</id>
</element>
</collection>
<property name="version">53</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-25 16:12:52.967</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114384</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179857</id>
</element>
</collection>
<property name="version">52</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-25 15:30:02.870</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">923</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">920</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-20 14:19:01.517</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114387</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179860</id>
</element>
</collection>
<property name="version">54</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-25 16:22:34.050</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">922</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">919</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-20 14:18:48.267</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">921</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">918</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-13 08:39:24.500</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">920</id>
<property name="title"><![CDATA[Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">917</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-02-20 13:10:43.733</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-02-20 13:10:43.733</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">919</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372094</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9404840</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-01-21 14:18:31.970</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">17465423</id>
<property name="title"><![CDATA[Autonomy Critical events 2011]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">17498190</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-06-07 16:15:43.807</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-06-07 16:15:43.807</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">17465421</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11829491</id>
<property name="body"><![CDATA[\\

Open two terminal shells:
\\

&nbsp;In Terminal 1
# telnet mvc-dmo1-rf (dorado1 user and pass)
# cd auv-qnx
# (. configSrc) - no configSrc in auv-qnx
# echo $AUV (verify /home/dorado1/auv-qnx/auv/altex/onboard)
# qtalk \-m /dev/ser13
## \!a<enter>&nbsp;&nbsp; (to turn on TREX2 cpu, you'll see GulperSolenoidFB = 1)
## ctrl-a x&nbsp;&nbsp; (to exit)
# cd $AUV/bin
# < pause> and follow procedure in Terminal 2 below
# nohup ./vcsServer \-v &
# ps \-a&nbsp;
# Go to terminal 2 and launch amc_o_rt
# ps-a (after amc_o_rt starts, you should see the processes of auv-qnx spawned.
# to terminate by force:&nbsp;&nbsp; slay supervisor&nbsp;&nbsp; slay vcsServer
\\

In Terminal 2
# slogin dorado1@trex2
# cd amc
# . config.amc
# cd mission
# cat init.cfg (check depth envelop, check mission time in seconds)
# <Pause and Go to Terminal 1 and launch vcsServer>
# nohup ../exec/amc_o_rt science4.cfg &
# cd \~/amc/log/latest
# tail \-f TREX.log&nbsp;&nbsp; ( it takes about 30 seconds or so to start and then lots of activity, should be no error or 'relax' in the stream of log messages)
# go to terminal 1
# to terminate by force:&nbsp;&nbsp; killall amc_o_rt

when the vehicle has surfaced, to&nbsp;check for gulpers (not required, but if you are bored and want to see)
# slogin dorado1@trex2
# cd amc
# . config.amc&nbsp;
# ./bin/signal_process.hsh&nbsp; (returns how many gulpers have fired, how far it is in transect, if signal is below 0.045 then it will be low res transect of 1Km, if above 0.12 it is high res 500m separation, if in between 750m)
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11796734</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797873</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830641</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-27 15:44:26.990</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">15630872</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">15663626</id>
</element>
</collection>
<property name="version">37</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2010-04-13 14:24:52.947</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797874</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830642</id>
</element>
</collection>
<property name="version">14</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-29 10:34:34.340</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114423</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179895</id>
</element>
</collection>
<property name="version">55</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-26 12:48:17.843</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797875</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830643</id>
</element>
</collection>
<property name="version">15</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-29 10:35:25.567</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">15630861</id>
<property name="title"><![CDATA[Decision Support System]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">15663615</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-07-12 22:29:00.377</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2010-12-01 17:00:13.417</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797876</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830644</id>
</element>
</collection>
<property name="version">16</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-29 10:37:43.150</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797877</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830645</id>
</element>
</collection>
<property name="version">17</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-29 10:38:10.787</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797878</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830646</id>
</element>
</collection>
<property name="version">18</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-29 10:38:45.577</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797880</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830648</id>
</element>
</collection>
<property name="version">19</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-29 10:39:17.717</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">17465430</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">17498197</id>
</element>
</collection>
<property name="version">42</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-06-07 16:28:33.590</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">17465429</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">17498196</id>
</element>
</collection>
<property name="version">41</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:47:35.437</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797884</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830652</id>
</element>
</collection>
<property name="version">20</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-29 10:40:01.090</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797886</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830654</id>
</element>
</collection>
<property name="version">21</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-29 10:41:03.777</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797888</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830656</id>
</element>
</collection>
<property name="version">22</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-29 10:41:47.263</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">1048577</id>
<property name="fileName"><![CDATA[AUV Software Procedures Document.doc]]></property>
<property name="contentType"><![CDATA[application/msword]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">875</id>
</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-05-02 15:56:15.393</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-05-02 15:56:15.393</property>
<property name="fileSize">38912</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797889</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830657</id>
</element>
</collection>
<property name="version">23</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-29 10:49:24.873</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114458</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179930</id>
</element>
</collection>
<property name="version">58</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-01 11:43:14.373</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114456</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179928</id>
</element>
</collection>
<property name="version">57</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-01 10:45:30.257</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114454</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179926</id>
</element>
</collection>
<property name="version">56</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-27 15:33:57.390</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">987</id>
<property name="title"><![CDATA[Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">984</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-02-12 13:41:13.823</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-02-12 13:48:10.270</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">857</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114466</id>
<property name="title"><![CDATA[Termios Dev Info]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179938</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-01 11:50:27.647</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-01 14:17:46.963</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114465</id>
<property name="title"><![CDATA[Termios Dev Info]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179937</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-01 11:50:27.647</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-01 11:51:25.860</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372039</id>
<property name="title"><![CDATA[AUV Debian4 Linux and auv-pkgs Install, build]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9404785</id>
</element>
</collection>
<property name="version">18</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-02 14:17:32.757</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114462</id>
<property name="title"><![CDATA[Termios Dev Info]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179934</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-01 11:50:27.647</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-01 11:50:27.647</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114473</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179945</id>
</element>
</collection>
<property name="version">59</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-01 11:44:14.547</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">21364771</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21397539</id>
</element>
</collection>
<property name="version">23</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[carueda]]></property>
<property name="lastModificationDate">2013-05-21 14:07:31.077</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">21364774</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21397541</id>
</element>
</collection>
<property name="version">24</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-05-23 13:15:02.713</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">21364776</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21397543</id>
</element>
</collection>
<property name="version">25</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-05-23 13:16:39.320</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114593</id>
<property name="title"><![CDATA[AUV Debian4 Linux Install]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3180061</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-25 13:51:36.887</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">21364778</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21397545</id>
</element>
</collection>
<property name="version">26</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-05-23 13:30:41.057</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">8981112</id>
<property name="destinationPageTitle"><![CDATA[~brent]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-02-07 18:51:42.947</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-07 18:51:42.947</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">8981113</id>
<property name="destinationPageTitle"><![CDATA[~oreilly]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-02-07 18:51:42.947</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-07 18:51:42.947</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114597</id>
<property name="title"><![CDATA[AUV Debian4 Linux Install]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3180064</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-08 15:14:03.297</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">8981114</id>
<property name="destinationPageTitle"><![CDATA[//www.freedesktop.org/wiki/Software/dbus]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-02-07 18:51:42.950</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-07 18:51:42.950</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">8981108</id>
<property name="destinationPageTitle"><![CDATA[~oreilly]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-02-07 18:51:42.947</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-07 18:51:42.947</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">8981109</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-02-07 18:51:42.947</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-07 18:51:42.947</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">8981110</id>
<property name="destinationPageTitle"><![CDATA[Missing Headers]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-02-07 18:51:42.947</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-07 18:51:42.947</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114601</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3180068</id>
</element>
</collection>
<property name="version">62</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-04 10:53:45.147</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">8981111</id>
<property name="destinationPageTitle"><![CDATA[~brent]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-02-07 18:51:42.947</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-07 18:51:42.947</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114602</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3180069</id>
</element>
</collection>
<property name="version">63</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-10 08:05:27.753</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">16220230</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">16252996</id>
</element>
</collection>
<property name="version">21</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-07-12 22:27:20.683</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">21364756</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21397524</id>
</element>
</collection>
<property name="version">21</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-05-21 10:20:45.907</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">21364755</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21397523</id>
</element>
</collection>
<property name="version">20</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-05-21 10:14:48.220</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">21364758</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21397526</id>
</element>
</collection>
<property name="version">22</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-05-21 10:21:40.077</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">16220233</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">16252999</id>
</element>
</collection>
<property name="version">40</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.923</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">16220231</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">16252997</id>
</element>
</collection>
<property name="version">39</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-02-18 09:27:28.437</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">21364752</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21397520</id>
</element>
</collection>
<property name="version">18</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-05-16 09:28:09.683</property>
<property name="versionComment"><![CDATA[added ilustration of the current API and content for goal posting]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">21364753</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21397521</id>
</element>
</collection>
<property name="version">19</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-05-21 10:12:31.880</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">9928720</id>
<property name="fileName"><![CDATA[Front-Following-transect-3-09.doc]]></property>
<property name="contentType"><![CDATA[application/msword]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-29 10:47:38.280</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-29 10:47:38.280</property>
<property name="fileSize">103936</property>
<property name="comment"><![CDATA[Front Following mission transects]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">9928712</id>
<property name="fileName"><![CDATA[Autonomy-Machines.jpg]]></property>
<property name="contentType"><![CDATA[image/jpeg]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 08:53:16.990</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 10:23:14.057</property>
<property name="fileSize">243252</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">9928711</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">9928711</id>
<property name="fileName"><![CDATA[Autonomy-Machines.jpg]]></property>
<property name="contentType"><![CDATA[image/jpeg]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 08:53:16.990</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-15 12:48:35.593</property>
<property name="fileSize">243252</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">2</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913008</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8945771</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-01-20 08:20:32.983</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9405092</id>
<property name="body"><![CDATA[h4. Debian 4.0 (Etch) Install

\\
* Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
* Debian install time: \~45 min depending on harddisk format time and machine speed
\\
*# Burn DVD with&nbsp;Debian 4.0 r7 net install and&nbsp;boot internet connected&nbsp;PC from DVD
*## Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
*## Domain: shore.mbari.org
*## Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
*## users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
*## Use network mirror for complete package list (if internet connected)
*## Software install: For embedded Linux machine Standard (only), For desktop development Standard+Desktop
*## Install Grub to the master boot record
*# Remove DVD and allow boot from harddisk
*# Standard installs require additional debian packages,&nbsp;these are&nbsp;installed by&nbsp;running the&nbsp;script included in auv-pkgs/debian-pkg directory.&nbsp;&nbsp; Login as root and type:&nbsp;*source /home/dorado1/prj/auv-pkgs/debian-pkg/deb-packages*
*# Java Installation
*## Create a java installation specific to the auv-linux and auv-autonomy development and decouple from the debian system java:
*### Install in a named directory in opt, example: /opt/jdk_1.6u12.&nbsp;&nbsp;
*### Download jdk to /home/dorado1/tools/java
*### login *as root*&nbsp;and enter root password.
*### Change directory to /opt. Type: *cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
*### Change the permission of the bin&nbsp;file to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
*### Verify that you have permission to execute the file. Type:
*ls \-l*
*### Start the installation process.Type:&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*
*### Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.
*### exit from root back to user dorado1
*### In the dorado1 user profile, set the java&nbsp;environment variable to /opt/jdk_1.6u12
\\

h4. AUV-Linux Install and Setup

# Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
#* as user 'auv' or 'dorado1' create the 'prj' directory. mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
#* export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
#* cvs login
#* cvs checkout auv-pkgs
#* cvs checkout auv-shared
#* cvs checkout auv-linux
#* cd /home/auv/prj/auv-pkgs
#* edit 'set-auv-env' and make appropriate edits to match the install directory (ex. /home/dorado1/prj)
#* source set-auv-env (or ". set-auv-env")
#* edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
#* setup, build and install auv-pkgs
#** su root
#** cd $AUV_PKGS
#** . 1_omniORB.bat
#** . 2_omniNotify.bat
#** . 3_gctpc.bat
#** . 4_apr.bat
#** . 5_apr-util.bat
#** . 6_log4cxx.bat
#** . 7_netcdb.bat
#** . 8_newmat.bat
#** . 9_cppunit.bat
#** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
#* As root, add auv startup script to /etc/init.d:&nbsp;&nbsp; /etc/init.d/auv-startup.sh
#** \#\!/bin/sh
\# auv startup script
#** &nbsp;
#** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
#** chmod 777 /dev/mqueue
#* chmod a+x auv-startup.sh&nbsp;
#* Then (as root) update the startup sequence:&nbsp;update-rc.d \-f auv-startup.sh start 80 2 3 4 5 .
#** *\#*\*\* Note to remove: update-rc.d S80auv-startup.sh remove
#** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
#* exit back to user 'auv'
#* build auv-shared
#** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
#** apt-get install xutils-dev to get gccmakedep
#* build auv-linux
#** edit taskIF Makefile - comment out idlj and javac lines
#* Run supervisor (this creates logs/latest link)
#** from auv-linux/onboard, run
#*** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
\\
\\

\\
&nbsp;

h5. Autonomy Software checkout:

cd /home/dorado1/prj&nbsp;

svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk TREX&nbsp;

copy Europa from threadfish (Yikes\! NASA version is moving ahead of TREX)
\\

Build failed (jam in TREX) due to missing boost regex loadable module.&nbsp;&nbsp;&nbsp; To resolve this, a debian package was installed (developer version) which is a bit of a sledge hammer.&nbsp;&nbsp; Need to determine of this is a standard component of the OS or a developer package specific to TREX (judged it to be an OS component)

apt-get install _libboost-regex-dev_

Build failed due to libSystem.so missing

Fix:&nbsp; add $PLASMA_HOME/lib to LD_LIBRARY_PATH
\\
\\
# Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
#* Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
#* logged in as root
#* cp&nbsp;serial.conf /etc&nbsp;
#* cd /usr/src
#* tar jxf linux-source-2.6.18.tar.bz2
#* cd linux-source-2.6.18
#* make clean && make mrproper
#* uname \-r to get /boot/config-'uname \-r' name
#* cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
#* make menuconfig
#** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
#** Device Drivers&nbsp; \--> Character devices
#** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
#** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
#** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
#** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
#** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
#** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
#* make-kpkg clean
#* fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
#** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
#* dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
#* _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
#* serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
#* To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
#** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
#** &nbsp;
#** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
#*** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
#*** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
#* To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
#** create a file called 'startCorba.sh'
#*** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notification service.
#*** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
#*** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
#*** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
#** make sure startCorba has execute permissions (chmod a+x startCorba.sh)&nbsp;
#** Create a symbolic link using update-rc.d (Debian command)&nbsp;
#*** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
#* TODO:
#** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
# Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
#* Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
#** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
#** ifup eth0 will also show the error
\\
#* Network Settings (/etc/network/interfaces)
#** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
#*** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
#*** edit */etc/dhcp3/dhclient.conf* to add the following line:
#**** send host-name "foce2.shore.mbari.org"
#*** 127.0.0.1 localhost.localdomain localhost
#*** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
#*** hostname mvc-debian.shore.mbari.org
#*** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
#**** address 134.89.32.16
#**** netmask 255.255.254.0
#**** gateway 134.89.32.1
#**** broadcast 134.89.32.255
#*** to check the hostname is set properly
#**** uname \-n
#**** hostname \-a
#**** hostname \-s
#**** hostname \-d
#**** hostname \-f
#**** hostname
#** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\

* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
** Debian Packages required to build auv-linux and TREX:
**# apt-get install ant
**# apt-get install ant-optional
**# apt-get install autoconf
**# apt-get install autogen
**# apt-get install automake
**# apt-get install binutils
**# apt-get install bison
**# apt-get install cvs
**# apt-get install doxygen
**# apt-get install flex
**# apt-get install g+\+
**# apt-get install libtool
**# apt-get install make
**# apt-get install subversion
**# apt-get install libtool
**# apt-get install gdb
**# apt-get install openssl
**# apt-get install ssh
**# apt-get install minicom
**# apt-get install python-all
**# apt-get install python-all-dev
**# apt-get install lirc setserial
**# apt-get install linux-source-2.6.18
**# apt-get install kernel-package libncurses5-dev fakeroot wget build-essential
**# apt-get install xutils-dev
**# apt-get install linux-doc-2.6.18
**# apt-get install linux-manual-2.6.18
**# apt-get install manpages-dev
**# apt-get install xutils-dev
**# apt-get install jam
**# apt-get install swig
**# apt-get install libboost-regex-dev&nbsp;
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372360</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372361</id>
<property name="title"><![CDATA[AUV Software Install on Debian 4.0]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9405093</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:24.673</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:42:24.673</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372360</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372358</id>
<property name="title"><![CDATA[AUV Debian4 Linux and auv-pkgs Install, build]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9405091</id>
</element>
</collection>
<property name="version">20</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-09 11:26:36.763</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372356</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9405089</id>
</element>
</collection>
<property name="version">15</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:27:19.640</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372355</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9405088</id>
</element>
</collection>
<property name="version">14</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-02 11:14:10.163</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114497</id>
<property name="title"><![CDATA[Termios Dev Info]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179967</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-01 11:50:27.647</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-03 09:04:04.677</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899879</id>
<property name="destinationPageTitle"><![CDATA[9 July 2008\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899878</id>
<property name="destinationPageTitle"><![CDATA[AttributeParser\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114495</id>
<property name="title"><![CDATA[Termios Dev Info]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179965</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-01 11:50:27.647</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-01 14:19:31.657</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899877</id>
<property name="destinationPageTitle"><![CDATA[VTIME\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899876</id>
<property name="destinationPageTitle"><![CDATA[Termios Dev Info]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">9306172</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://publish.iwork.com/document/en/?a=p266967451&d=TREX_short.key]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"/><property name="creationDate">2009-04-07 23:27:15.027</property>
<property name="lastModifierName"/><property name="lastModificationDate">2009-04-07 23:27:15.027</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899883</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372363</id>
<property name="title"><![CDATA[AUV Software Install on Debian 4.0]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9405095</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:24.673</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 10:43:25.517</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372360</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899882</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899881</id>
<property name="destinationPageTitle"><![CDATA[Bug - blocking\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899880</id>
<property name="destinationPageTitle"><![CDATA[Bug - build\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899887</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899886</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899885</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899884</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899891</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899890</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899889</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114499</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179969</id>
</element>
</collection>
<property name="version">61</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-02 11:24:25.190</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899888</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114481</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179953</id>
</element>
</collection>
<property name="version">60</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-02 08:59:34.457</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">21364787</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21397554</id>
</element>
</collection>
<property name="version">27</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-05-23 13:40:21.383</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">753669</id>
<property name="viewCount">29</property>
<property name="url"><![CDATA[http://www.mbari.org/staff/brian/]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-03-23 16:34:15.057</property>
<property name="lastModifierName"/><property name="lastModificationDate">2009-10-08 08:20:15.067</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372393</id>
<property name="title"><![CDATA[AUV Software Install on Debian 4.0]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9405125</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:24.673</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-25 11:05:54.177</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372360</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899874</id>
<property name="destinationPageTitle"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899875</id>
<property name="destinationPageTitle"><![CDATA[AUV Debian4 Linux and auv-pkgs Install, build]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">753670</id>
<property name="viewCount">47</property>
<property name="url"><![CDATA[http://www.weblinkvalidator.com/]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-03-26 10:00:15.127</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-18 10:14:15.067</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899920</id>
<property name="destinationPageTitle"><![CDATA[Bug - minor\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899921</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899922</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899923</id>
<property name="destinationPageTitle"><![CDATA[11 July 2008\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899916</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899917</id>
<property name="destinationPageTitle"><![CDATA[Bug - minor\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">748</id>
<property name="body"><![CDATA[h1. AUV Wiki


h2. Development

[Linux Port]
[Source Code]
[AUV Linux - Driver Port and Validation]
[AUV Build and Test Server Setup]\\
[Autonomy]
[Decision Support System]

h2. Meeting Minutes

[2009-04-13 Autonomy project|https://oceana.mbari.org/confluence/display/AUV/2009-04-13+Autonomy+project]

[2007-03-26 Autonomy project|Minutes from 2007-03-26--Status meeting on AUV Deliberative Autonomy project]
[2007-03-19 Autonomy project|Minutes from 2007-03-19--Status meeting on AUV Deliberative Autonomy project]
[2007-03-05 Autonomy project|Minutes from 2007-03-05--Status meeting on AUV Deliberative Autonomy project]
[2007-02-20 Autonomy project|Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]

h2. Miscellaneous

[MATLAB Tools]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899918</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899919</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">750</id>
<property name="body"><![CDATA[h1. Minutes from 2007-02-02: Introducing Autonomy Behaviors in the AUV's

h2. Notes
!AMC Overview.png! !overview.tiff!
* We need to know the state of behavior completion
** timed-out
** running
** failed
** success

* Some behaviors will not be modifiable by the AMC (such as depth envelope)

* LayeredControl.cpp reads mission file. New LayeredControl will have socket interface so behaviors can be serialized to AMC.
** LayeredControl methods to be added:
*** create behavior
*** destroy behavior
*** behavior done
*** query behavior (by id)
** Behavior needs a flag to indicate if it's running.

* Behvior stack is currently built with mission.cfg. A behavior is turned into an object. Each behavior object has an execute method. The execute method can not block. These behaviors are stored into a linked list which is walked every 200ms.
{code}behavior1 {
  name = value
  ... <-- Last token has highest priority
}
behavior2 {
 name = value
 ...
}{code}



h2. TODO
# Behavior stack control (and an abort stack)
#* start
#* stop
#* status
#* termination mode
# More parameters exposed
# Initialization
#* timer
#* depth envelope
# Need to specify a dummy behavior (i.e. idle; it just turns off the prop). So that the AUV can float if the AMC is thinking and no behavior is currently running.
# We need a hang out behavior so tha the AUV can hover underwater waiting for pickup.

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899912</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899913</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355490</id>
<property name="title"><![CDATA[Task List July 2009]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388221</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:52:32.680</property>
<property name="lastModifierName"><![CDATA[oreilly]]></property>
<property name="lastModificationDate">2009-07-20 16:00:52.430</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899914</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355487</id>
<property name="title"><![CDATA[Task List July 2009]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388219</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:52:32.680</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-20 15:34:18.877</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899915</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899908</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355485</id>
<property name="title"><![CDATA[Task List July 2009]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388217</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:52:32.680</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-20 15:09:34.477</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899909</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899910</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355483</id>
<property name="title"><![CDATA[Task List July 2009]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388215</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:52:32.680</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-20 14:12:47.187</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899911</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899905</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406556</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[REMOVEMAIL]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:03:49.065</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:03:49.065</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899904</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406555</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[SETPAGEPERMISSIONS]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:03:49.065</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:03:49.065</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355481</id>
<property name="title"><![CDATA[Task List July 2009]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388213</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:52:32.680</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-20 14:02:08.933</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899907</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406554</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[REMOVECOMMENT]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:03:49.065</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:03:49.065</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899906</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406553</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[EXPORTPAGE]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:03:49.064</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:03:49.064</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355479</id>
<property name="title"><![CDATA[Task List July 2009]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388211</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:52:32.680</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-20 12:20:18.640</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899901</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406552</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[COMMENT]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:03:49.064</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:03:49.064</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899900</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406551</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[CREATEATTACHMENT]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:03:49.064</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:03:49.064</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355477</id>
<property name="title"><![CDATA[Task List July 2009]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388209</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:52:32.680</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-20 12:01:52.433</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899903</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406550</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[SETSPACEPERMISSIONS]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:03:49.064</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:03:49.064</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">19300460</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[VIEWSPACE]]></property>
<property name="group"><![CDATA[U_Employees]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-05-23 14:06:23.853</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-05-23 14:06:23.853</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899902</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406549</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[EDITBLOG]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:03:49.064</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:03:49.064</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899897</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">760</id>
<property name="body"><![CDATA[h2. Overview

In 2007, the AUV operations group&nbsp;set forward&nbsp;to port the AUV control software from QNX to Linux.&nbsp;&nbsp;There were 2 ARM boards&nbsp;available&nbsp;that run Debian linux for development.&nbsp;&nbsp; The transition to ARM was delayed.

The AUV-Linux port was completed with a sea trial by the end of 2008 running Debian 4.0 on the Geode x86 platform.&nbsp;&nbsp;&nbsp;

To help the transition to Support Engineering, [~oreilly] has created&nbsp; [^AUV-Linux tutorial.ppt]&nbsp;in addition to the porting guide and programming guide in the CVS repository.

h2. &nbsp;


h2. Notes

Here's a list of [Missing Headers]

[~brent] has suggested that we use the same ARM-9 hardware as ESP for the AUV port. He has a Linux port that's designed to run headless, auto-connects to the network, boots fast, runs in 4 MB. (i.e. Talk to [~brent])

h2. IPC

[~oreilly]&nbsp;has implemented the&nbsp;IPC using CORBA (OmniORB). Other fall-back options&nbsp;considered were&nbsp;shared memory and [D-Bus|http://www.freedesktop.org/wiki/Software/dbus]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355474</id>
<property name="title"><![CDATA[Task List July 2009]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388206</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:52:32.680</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-20 11:36:12.397</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899896</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899899</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355472</id>
<property name="title"><![CDATA[Task List July 2009]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388204</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:52:32.680</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-20 11:27:17.477</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899898</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899893</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355470</id>
<property name="title"><![CDATA[Task List July 2009]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388202</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:52:32.680</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-07-18 08:03:22.417</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899892</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114704</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3180169</id>
</element>
</collection>
<property name="version">70</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-10 13:52:41.907</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899895</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899894</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">21364890</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21397657</id>
</element>
</collection>
<property name="version">30</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-06-04 08:49:32.867</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899954</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">21364862</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21397629</id>
</element>
</collection>
<property name="version">29</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[carueda]]></property>
<property name="lastModificationDate">2013-06-04 08:43:09.450</property>
<property name="versionComment"><![CDATA[adjusted various parts with actual responses in particular regarding the new ISO8601 format for the dates]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899955</id>
<property name="destinationPageTitle"><![CDATA[StreamSerialDriver\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899952</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899953</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Labelling" package="com.atlassian.confluence.labels">
<id name="id">19234832</id>
<property name="label" class="Label" package="com.atlassian.confluence.labels"><id name="id">20</id>
</property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="spaceKey"><![CDATA[AUV]]></property>
<property name="user"><![CDATA[dcline]]></property>
<property name="creationDate">2012-09-26 13:03:16.637</property>
<property name="lastModificationDate">2012-09-26 13:03:16.637</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">21364859</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21397626</id>
</element>
</collection>
<property name="version">28</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[carueda]]></property>
<property name="lastModificationDate">2013-05-28 20:33:52.417</property>
<property name="versionComment"><![CDATA[add toc and h4. heading for each operation]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899950</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899951</id>
<property name="destinationPageTitle"><![CDATA[StreamSerialDriver\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899948</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">1540107</id>
<property name="fileName"><![CDATA[SeaTrial.06202007.Summary.xls]]></property>
<property name="contentType"><![CDATA[application/vnd.ms-excel]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179753</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-06-22 16:22:34.497</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-06-22 16:22:34.497</property>
<property name="fileSize">42496</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899949</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899946</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406545</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[REMOVEATTACHMENT]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:03:49.063</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:03:49.063</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798266</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9831019</id>
</element>
</collection>
<property name="version">25</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-05-06 09:55:17.757</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899947</id>
<property name="destinationPageTitle"><![CDATA[StreamSerialDriver\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406546</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[REMOVEPAGE]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:03:49.063</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:03:49.063</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798265</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9831018</id>
</element>
</collection>
<property name="version">24</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-29 10:51:23.347</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899944</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406547</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[EDITSPACE]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:03:49.063</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:03:49.063</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899945</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406548</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[REMOVEBLOG]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:03:49.064</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:03:49.064</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899942</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355451</id>
<property name="title"><![CDATA[Task List July 2009]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388183</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:52:32.680</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-07-18 08:01:28.943</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899943</id>
<property name="destinationPageTitle"><![CDATA[StreamSerialDriver\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899940</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406543</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[VIEWSPACE]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:02:59.501</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:02:59.501</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899941</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406544</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[EXPORTSPACE]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:03:49.063</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:03:49.063</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">1540120</id>
<property name="fileName"><![CDATA[reviewGUI.zip]]></property>
<property name="contentType"><![CDATA[application/zip]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 15:39:29.683</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 15:39:29.683</property>
<property name="fileSize">21043</property>
<property name="comment"><![CDATA[Software]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899939</id>
<property name="destinationPageTitle"><![CDATA[StreamSerialDriver\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899938</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355447</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388179</id>
</element>
</collection>
<property name="version">27</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-07-18 07:55:12.600</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899937</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">1540119</id>
<property name="fileName"><![CDATA[AUV-CTD-GUI.doc]]></property>
<property name="contentType"><![CDATA[application/msword]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 09:27:40.590</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 09:27:40.590</property>
<property name="fileSize">46592</property>
<property name="comment"><![CDATA[Installation and usage documentation]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899936</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355449</id>
<property name="title"><![CDATA[Task List July 2009]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388181</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:52:32.680</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-07-18 07:52:32.680</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899935</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798269</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9831022</id>
</element>
</collection>
<property name="version">32</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-05-06 10:04:26.987</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899934</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899933</id>
<property name="destinationPageTitle"><![CDATA[StreamSerialDriver\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798267</id>
<property name="title"><![CDATA[T-REX Autonomy testing process]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9831020</id>
</element>
</collection>
<property name="version">31</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-04-15 10:23:13.850</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-02 14:59:58.043</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355446</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388178</id>
</element>
</collection>
<property name="version">26</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-05-06 09:56:10.060</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899932</id>
<property name="destinationPageTitle"><![CDATA[StreamSerialDriver\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899931</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899930</id>
<property name="destinationPageTitle"><![CDATA[AuvService\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899929</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899928</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899927</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899926</id>
<property name="destinationPageTitle"><![CDATA[AuvApplication\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899925</id>
<property name="destinationPageTitle"><![CDATA[ParosciApp\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899924</id>
<property name="destinationPageTitle"><![CDATA[Bug - Blocking with workaround\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899980</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899981</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867820</id>
<property name="body"><![CDATA[On Friday Sept 14th 2007, a scheduled cruise on the Zephyr with the CTD vehicle was aborted. This note walks down the highlights of the event and the resultant Lessons Learned generated on Monday 17th at the regular status meeting.

&nbsp;*{+}Event{+}*:&nbsp;

On Friday 14th,&nbsp; while at the dock on the Zephyr setting up for the cruise we encountered network problems in connecting to the AUV which was connected by cable to local network. We spent some time trying to diagnose the problem thinking that it had to do with an incorrect setting of our laptop ('dovekie') with respect to the ships network. This turned out to be a wiring problem with a recently installed router but one which nevertheless set us back by a good half hour. In the anxiety to get going, and while installing new binaries from 'dovekie' to trex2 (the onboard autonomy Linux box) on the AUV, the /bin directory of the Linux filesystem got deleted. This was doable since we had been till that time, been logging in as 'root' with unlimited privileges. The immediate thought was to replace the disk drive of trex2 on the vehicle by its duplicate on shore 'trex1' which is used for testing. However it turned out that the identical event had occurred the evening before and trex1 was also non-functional.

The immediate impact of this event was that we had to move the vehicle to the DMO AUV lab, remove the bubble and remove the hard drive of trex2. After substantial effort with a lot of help from Brent Roman and Kent Hedley (and Frederic on trex2), the /bin director was recovered and the two EPIC boards were brought on-line. However the delays this caused required a scrub of the cruise. On Monday 17th, we gathered for a Lessons Learned to see what general steps needed to be taken to ensure such serious errors are not repeated. The results are as below:

*1, Disallow use of 'root' for deployment/development:* The key and obvious finding was the process we had been using&nbsp; to deploy (and developed) was unnecessary reliant on using the 'root' account on the two EPIC board computers. There is neither a need not a requirement for such use. Therefore this modus-operandi has been discontinued. *Action*: Use the general user 'dorado1' account similar to what the DMO AUV team uses.

*2. Use of 'bin' as a T-REX directory name caused an unncessary mapping to a system level directory*: Again there is no specific need to have directory names which overlap. *Action*: Rename /bin to /exec

*3. Need to have the autonomy deployment laptop 'dovekie' be configured to ship and freewave ops*: A major stress point was the need to ensure that 'dovekie' is able to talk to the AUV while on board the ship as well as when the vehicle is freely floating in the water. Dovekie is a Linux based computer identical to the autonomy EPIC boards een if substantially faster; further they have an identical copy of the sources should those need to be modified at sea. The network configurations have worked once in the past; however there was general lack of confidence that our original configurations were valid (which was incorrect) and coupled with the network outage mentioned in the preamble, seemed to reinforce that this issue was bigger than it really was. *Action*: Have automated Network Configuration which can deal with configuring the laptop from
* shore&nbsp; to ship
* ship to Ops
* Ops to shore

*4. The importance of regression tests is not be under-estimated*: Just prior to the cruise it was known that all the standard regression tests were either not run or when run, some had failed in ways that were not clearly understood. For instance, a long mission was showing a segmentation fault well into 1000secs into its run on the EPIC boards. *Action*: Ensure there are nightly builds on a fast Linux box (e.g Threadfish) which will run
* EUROPA regression tests
* T-REX regression tests

*5. The importance of running on the EPIC testbed is not be under-estimated*: trex1 tests coupled with 'foobar' the QNX box with the AUV sim, can and does very reasonably simulate the conditions of T-REX when in the water. Running on trex1 is therefore very valuable especially in terms of understanding timing and performance of the system overall. *Action*: Therefore it is critical that prior to a cruise (and well before it) we
* run tests from the head of SVN checking out T-REX sources

* run nightly build on trex1 following the above. Even if slow it is a very good harbinger of any issues to come at sea.

*6. Prior to deployment, and given the sparsity of our sea going days, dry runs are important:* The deployment process should be fully walked thru in detail to make everyone feel comfortable on the day of the deployment and to ensure there are no last minute issues. The deployment itself requires some some minor additional steps. *Action*:
* Do a dry run/walk thru of the entire deployment process the day before and sans vehicle network test the full process to deploy. If the Zephyr is available at the dock the previous day, then Dovekie should be taken on board to test the network.
* Have a simple and small cheat-sheet to mark off what needs to be done; something akin to a check-list
* Have a large capacity USB Flash drive handy
* If possible install binaries on the AUV and practice deployment n the vehicle the previous day. Given the demand on the vehicle and the Zephyr this might not be as easy to do; but an attempt should be made if not the day immediately before, then sufficiently prior to the cruise day.

*7{*}*. Need for a run-out sequence on the AMC*: When T-REX fails or more likely spending substantial time churning while replanning especially with multiple reactors, we should consider executing a run-out sequence. Such a sequence for instance could keep the control within T-REX while turning the prop slowly or perhaps circling at an assigned depth similar to the standby mode of spacecraft. Such an eventuality should be executed only in the worst case of plan failure. *Action*: To do this, we could
* extend NAV failure timeout
* have a canned "smart" run out sequence on AMC side or
* return a version of the originally developed '_Idle_' behavior

*8. Bound the box of the navigational envelope of the vehicle*: To ensure that the vehicle terminates should it inadvertently go outside a test area, a check in the model can ensure that when the vehicle comes up to the surface, it is guaranteed to be within the boundaries specified. *Action*: Requires model change and is associated with a run-out sequence mentioned above.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899982</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899983</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899984</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899985</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899986</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899987</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899972</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899973</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899974</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899975</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899976</id>
<property name="destinationPageTitle"><![CDATA[AuvApplication\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899977</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899978</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899979</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899965</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10355542</id>
<property name="title"><![CDATA[Task List July 2009]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10388270</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:52:32.680</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-07-21 08:57:36.230</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899964</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899967</id>
<property name="destinationPageTitle"><![CDATA[StreamSerialDriver\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8912905</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8945673</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-01-20 07:54:29.753</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899966</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8912906</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8945674</id>
</element>
</collection>
<property name="version">18</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-01-13 09:36:59.530</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899969</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899968</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899971</id>
<property name="destinationPageTitle"><![CDATA[StreamSerialDriver\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899970</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899957</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899956</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899959</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899958</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899961</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899960</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899963</id>
<property name="destinationPageTitle"><![CDATA[StreamSerialDriver\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899962</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.437</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.437</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900014</id>
<property name="destinationPageTitle"><![CDATA[O\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900015</id>
<property name="destinationPageTitle"><![CDATA[P\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900012</id>
<property name="destinationPageTitle"><![CDATA[2 = 2 Hz\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8912920</id>
<property name="title"><![CDATA[Example of A TREX reactor]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8945687</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-21 11:24:32.257</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-01-21 11:25:29.793</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912916</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900013</id>
<property name="destinationPageTitle"><![CDATA[1 = 1 Hz\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900018</id>
<property name="destinationPageTitle"><![CDATA[K\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900019</id>
<property name="destinationPageTitle"><![CDATA[L\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8912917</id>
<property name="title"><![CDATA[Example of A TREX reactor]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8945684</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-21 11:24:32.257</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-01-21 11:24:32.257</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912916</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900016</id>
<property name="destinationPageTitle"><![CDATA[U\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900017</id>
<property name="destinationPageTitle"><![CDATA[B\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900006</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900007</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900004</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900005</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900010</id>
<property name="destinationPageTitle"><![CDATA[T = 10 Hz\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900011</id>
<property name="destinationPageTitle"><![CDATA[5 = 5 Hz\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900008</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900009</id>
<property name="destinationPageTitle"><![CDATA[W = 20 Hz\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899999</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899998</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899997</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899996</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900003</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114613</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3180080</id>
</element>
</collection>
<property name="version">69</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-10 09:43:01.483</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900002</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900001</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900000</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114612</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3180079</id>
</element>
</collection>
<property name="version">68</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-10 09:22:16.030</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899991</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899990</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114610</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3180077</id>
</element>
</collection>
<property name="version">67</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-10 08:53:25.720</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899989</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8912927</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8945694</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-01-20 08:24:35.850</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899988</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114608</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3180075</id>
</element>
</collection>
<property name="version">66</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-10 08:47:31.830</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899995</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899994</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114606</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3180073</id>
</element>
</collection>
<property name="version">65</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-10 08:27:53.873</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899993</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5899992</id>
<property name="destinationPageTitle"><![CDATA[Hydroscat\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8912924</id>
<property name="title"><![CDATA[Example of A TREX reactor]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8945691</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-21 11:24:32.257</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2009-01-21 13:13:50.267</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912916</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114604</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3180071</id>
</element>
</collection>
<property name="version">64</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-10 08:07:11.250</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900026</id>
<property name="destinationPageTitle"><![CDATA[R\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900027</id>
<property name="destinationPageTitle"><![CDATA[A\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900024</id>
<property name="destinationPageTitle"><![CDATA[X\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913340</id>
<property name="title"><![CDATA[Linux Port]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8946088</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:40:04.233</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-07 18:50:02.367</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900025</id>
<property name="destinationPageTitle"><![CDATA[D\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900022</id>
<property name="destinationPageTitle"><![CDATA[N\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900023</id>
<property name="destinationPageTitle"><![CDATA[Y\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900020</id>
<property name="destinationPageTitle"><![CDATA[E\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900021</id>
<property name="destinationPageTitle"><![CDATA[C\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900034</id>
<property name="destinationPageTitle"><![CDATA[StreamSerialDriver\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900035</id>
<property name="destinationPageTitle"><![CDATA[BluefinBattApp\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900032</id>
<property name="destinationPageTitle"><![CDATA[GpsUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900033</id>
<property name="destinationPageTitle"><![CDATA[SerialDriver\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900030</id>
<property name="destinationPageTitle"><![CDATA[AuvApplication\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913353</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8946099</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-06 09:48:14.753</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900031</id>
<property name="destinationPageTitle"><![CDATA[GpsUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900028</id>
<property name="destinationPageTitle"><![CDATA[V\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900029</id>
<property name="destinationPageTitle"><![CDATA[CRLF\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900043</id>
<property name="destinationPageTitle"><![CDATA[AuvApplication\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900042</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">872</id>
<property name="body"><![CDATA[h2. CVS

The main AUV system code is stored in CVS. Details about using and accessing the AUV CVS repository can be found [here|^AUV Software Procedures Document.doc]

h2. Subversion

h3. About Subversion

SVN (Subversion) is a tool used by many software developers to manage changes within their source code tree. SVN provides the means to store not only the current version of a piece of source code, but a record of all changes (and who made those changes) that have occurred to that source code. Use of SVN is particularly common on projects with multiple developers, since SVN ensures changes made by one developer are not accidentally removed when another developer posts their changes to the source tree.

In order to access a Subversion repository, you must install a special piece of software called a Subversion client. Subversion clients are available for most any operating system. Information about the official subversion client can be found at [http://subversion.tigris.org/]. Excellent documentation on using Subversion can be found at [http://svnbook.red-bean.com/]

h3. Subversion Access

The AUV Autonomy project's Subversion repository can be checked out through SVN with the following instruction set:

{{svn co ssh+svn://kahuna.shore.mbari.org/svn/repos/TREX TREX}}

{warning:title=Warning}This is a generic Subversion checkout command which will pull all modules, tags and/or branches of the project. In most cases, you will want to add '/trunk' to the SVN URL above to check out only trunk (main development line).{warning}
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">875</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900041</id>
<property name="destinationPageTitle"><![CDATA[AttributeParser\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900040</id>
<property name="destinationPageTitle"><![CDATA[BluefinBatt\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8356167</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8388920</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-01-13 14:32:00.143</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900039</id>
<property name="destinationPageTitle"><![CDATA[BluefinBatt\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900038</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900037</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900036</id>
<property name="destinationPageTitle"><![CDATA[BluefinBatt\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900051</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913334</id>
<property name="title"><![CDATA[Linux Port]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8946083</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:40:04.233</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2008-02-02 15:08:30.830</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900050</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8356157</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8388910</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-01-13 10:41:01.530</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900049</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8356158</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8388911</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-01-13 14:27:49.560</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900048</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900047</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913338</id>
<property name="title"><![CDATA[Linux Port]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8946086</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:40:04.233</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-07 18:43:06.960</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900046</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900045</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913336</id>
<property name="title"><![CDATA[Linux Port]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8946084</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:40:04.233</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-07 18:42:04.647</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900044</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900056</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8945671</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#svn] Give a view of the TREX development branches and the external dependencies
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. SVN version and dependencies

{anchor:svn}
The following picture illustrates the current svn tree with active and dead branches. 
!TREX-svn.png|align=centre!

There are 3 active branches in TREX :
* the trunk which is the version we are now using on the AUV (since June 2010)
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk
{code}
* the multisim branch where the Monte-Carlo simulation is now connected to the auv-linux simulator
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/branches/multisim
{code}
* the Europa_independent branch which is a full redesign of TREX in order to make it independent of Europa (allowing 3rd parties to integrate their own planner) and is also closer to the formal definition of the architecture (see [AAMAS paper|http://www.mbari.org/autonomy/Publications/aamas10.pdf])
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/branches/multisim
{code}


The two first branches rely on the same 3rd parties components and are fairly similar in the way they are compiled. The external tools needed are :
* *jam* ([http://www.perforce.com/jam/jam.html]) This is a make replacement utility used to compile TREX. The version used during development was jam 2.5
* *boost* ([http://www.boost.org/]) A set of libraries for advanced C++ programming. The version required is 1.36 and above.
* *Europa 2.1.1* ([http://babelfish.arc.nasa.gov/trac/europa]) This is an old version of a planner development at NASA-Ames. The easiest way to have this version is to copy the full Europa directory from dorado1 account on threadfish :
{code:none}
% scp -r dorado1@threadfish:coding/Europa .
{code} 
Europa have few extra dependencies that are given on [this  page|http://babelfish.arc.nasa.gov/trac/europa/wiki/EuropaInstallation]

The Europa independent branch do not depend on Europa and will future the latest version of it in the future. It still depends on boost (1.40.0 or above) and jam


h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
** PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

{warning:title=Important requirement}
All TREX build system and execution assumes that important variables are defined. There's a file 
{{devConfig}} that defines them for *bash*. More details about this are given on the section [#env]
{warning}

h1. Mac specific : installing development tools

\\

You need to have administration rights on this computer&nbsp;

on the Finder : select menu Go > Connect to Server ...

on the invite type : cifs://tornado.shore.mbari.org and <OK>

enter your login and password &nbsp;

select AppsAND <OK>

under the directory Macs/DevelopperTools/XcodeTools select the version of xcode for the OS version of your computer (10.6 = Snow Leopard) and get the xcode*.dmg file

you can then eject tornado disk

double click on the xcode*.dmg to mount the file

and then on Xcode.mpkg to start the installation&nbsp;

h2. Building our old version of Europa/Plasma

&nbsp;To apply the patch and build Europa/Plasma with GCC 4.3:
{code:none}
% cd $PLASMA_HOME
% patch -p1 < plasma-gcc4.3.patch  #i.e. the attached patch file
% jam && jam
{code}
\\

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
To compile TREX libraries, first download the Boost C+\+ library ([http://www.boost.org/]) and install it following the instructions outlined in the site.  Then compile TREX in a similar manner as Europa:
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

Finally, if you use the Monte-Carlo controller you need to compile {{batcher}} and {{samp}}
{code:none}
% cd ctd2007
% jam batcher samp
{code}
The {{trunk}} branch now assumes that {{batcher}} depends on {{samp}} so the compilation of {{samp}} is now done automatically. Still older versions (or other branches) did not enforce this dependency so it may be better to explicitly compile {{samp}}



h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated via a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher.

&nbsp;Note that threadfish.shore has a *ready to go binary* for AUV-Linux. Log in as 'dorado1' and cd down to 'coding/auv-linux'.

h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% omniNames&
% notifd -c $OMNINOTIFY_HOME/channel.cfg&

% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] <nstep>
Use <nstep> = 50
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900057</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900058</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900059</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900052</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900053</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900054</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8945669</id>
<property name="body"><![CDATA[This page will refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09
* [TREX Volume Survey Operations] procedure for operations group to start the TREX volume survey
* [Autonomy Deployment Log]
* [Autonomy ODSS Integration]

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [Monte-Carlo Testing guide|https://oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist-V13.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect
* [Autonomy Plans for 2010 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans10.pdf]
* [Autonomy Plans for 2011 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans11.pdf]
* [Autonomy Critical Events for 2011|https://oceana.mbari.org/confluence/download/attachments/8912901/Timeline-2011.jpg ]
* [Decision Support for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/CANON.pdf]
* [TREX and DSS Communication Protocol for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Comm-strategy.pdf]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">854</id>
<property name="body"><![CDATA[* Tom strongly urged we use Corba as a mechanism to communicate between AMC and VCS (i.e current Layerd Control software).&nbsp; General agreement on its use, and its dependancy on a Linux port of the Layerd Control system was noted.
** There will likely be an ORB which will be on the MVC and AMC/autonomy will connect to it.
** Some complexity will increase with use of CORBA; however debugging is less of an issue since will have a similar issue with sockets.
** Determined that sockets or CORBA implementation is less of a mainline design issue for the autonomy work. We'll leverage off of whatever is appropriate. We have a possible April simple deployment test for the autonomy for which end of Feb. for testing the communication protocol between the AMC and MVC is important.

* Question:When does the VCS know to expect next behavior from the AMC?
** First VCS sends AMC a completion message (akin to SUCCESS, FAILURE)
** VCS will trigger an IDLE state for a *{+}fixed time-period{+}* (which is parameterized?). An IDLE is a quiescent behavior which will likely shut off the prop and ensure vehicle is not making any changes.
** AMC will recieve VCS status and send off *next* commmand to VCS.
** Meanwhile, also, AMC will expect results of behavior execution to be sent by VCS via a state update.
** Frederic suggested that one can send two following behaviors so AUV knows what is coming up. Problem with that is that these following behaviors might need to retracted. Even if AMC send's earliest end time that doesn't tell VCS what to do next.
* Rich and Rob are working on how to publish state to the AMC; currently designed the core representation which Conor will be able to use to compile into an agent on the AMC side.
** They are still working on the task to stick a behavior on the command stack.
** Setpoint (tells vehicle to run with a command heading angle or depth) is the first behavior to be implemented by Rob & Rich.
* Hans has H/w is bolted up in lab.
** Will build up Red Hat today.
** Then will put on the Net to be able to see if additional packages needed by a test compilation.
** Conor will drop EUROPA inside the stack for such a test compile.
* Clarified that the entire mission script is being run from AMC
** Instead of reading from a Mission Script, VCS will get the tokens corresponding to the script contents from the AMC
* What do we need when AMC initializes?&nbsp;
** look at begining of exisiting mission scripts; Frederic should have copies
** Primarily, depth envelope and mission timer info needs to be sent over to VCS.
* AMC autonomy code (now called '*{_}T-REX{_}*' for "_Teleo-reactive EXecutive_") will migrate to +Subversion+ on Brian's initiative. We'll us same repository as Brian; will need clients for Mac's and Linux.

From the 2/2 meeting notes, the overal scope of what actually needs to be done, corrsponds to the following:

*{+}To be done{+}*:
* Behavior stack control

## start
## stop
## active status
## termination mode&nbsp;

* More parameters to be exposed from the MVC to the AMC

* For initialization, the AMC needs to send over following information over to the VCS:

## Timer
## depth envelope

* Need to implement an IDLE behavior to ensure that VCS doesn't summarily trigger an abort. One other possible behavior is a "Hang out" behavior when coming early to a waypoint
* Initiate hard abort

&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">857</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900055</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900064</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900065</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900066</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">866</id>
<property name="body"><![CDATA[h2. Meeting minutes

[2007-02-02 Autonomy Meeting | 2007-02-02 Minutes]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">869</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900067</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900060</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900061</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900062</id>
<property name="destinationPageTitle"><![CDATA[Seabird37App\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900063</id>
<property name="destinationPageTitle"><![CDATA[AuvApplication\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">14286903</id>
<property name="destinationPageTitle"><![CDATA[//www.mbari.org/autonomy/Publications/aamas10.pdf]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2010-08-09 13:14:37.203</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:14:37.203</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900073</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">14286902</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2010-08-09 13:14:37.203</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:14:37.203</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900072</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">14286901</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2010-08-09 13:14:37.203</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:14:37.203</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900075</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">14286900</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2010-08-09 13:14:37.203</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:14:37.203</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900074</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">14286907</id>
<property name="destinationPageTitle"><![CDATA[//babelfish.arc.nasa.gov/trac/europa/wiki/EuropaInstallation]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2010-08-09 13:14:37.203</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:14:37.203</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8945683</id>
<property name="body"><![CDATA[This page show a typical implementation of a reactor that connects TREX to an external system. To illustrate this I have taken the VCSAdapter  class that provide a connection to AUV Linux system using socket connection. The code  here can be found under TREX/ctd2007

h2. Reactor expected interface

{code:title=VCSAdapter.hh}
#ifndef H_VCSAdapter
#define H_VCSAdapter

# include "Adapter.hh"

namespace TREX {

  /** @brief Linux Interface to VCS and StatePublisher
   *
   * This class implenments a TREX reactor that provides a connection
   * to VcsServer and StatePublisher.
   *
   * @author Frederic Py <fpy@mbari.org>
   */
  class VCSAdapter: public Adapter {
  public:
    /** @brief Constructor
     *
     * This consdtructor is usually called by the factory that manages
     * configuration parsing
     *
     * @param agentName Name of the agent that will execute this reactor.
     * @param confgData CXonfiguration data for this reactor
     */
    VCSAdapter(LabelStr const &agentName, TiXmlElement const &configData);
    /** @brief Destructor
     */
    ~VCSAdapter();

    /** @brief handle agent initialization signal.
     *
     * This callback is called to indicate to reactors that the agent wait for
     * them to initialize.
     * In this case this is where TREX is initailizing the connections to
     * VCS and wait for feedback from the VCS to be ready to start the misssion.
     *
     * @param initialTick value of the initial tick (usually 0)
     * @param serversByTimeline mapping from timeline name to the connection to its owner
     * @param observer reference to the place where observation of thi reactor should be sent to 
     */
    void handleInit(TICK initialTick, std::map<double, ServerId> const &serversByTimeline, 
		    ObserverId const &observer);
    /** @brief Obsservation production 
     *
     * For uch a reactor this method is called while the agent ex-pect the reactort to produce its new
     * observations. In this case this is whaen the reactor collect all the informations sent from VCS and convert it in
     * @c Observations
     *
     * @retval true if no specific problem
     * @retval false in case of a critical issue
     */
    bool synchronize();
    /** @brief Signal sent  by the agent  to indicate that a new tick has been started
     */
    void handleTickStart();
    /** @brief Notification of a new observation coming from an external agent
     *
     * @note This hould never happen with this reactor as it does not obsserve anything in the agent	
     */
    void notify(Observation const &obs);    
    /** @brief Notification of a goal request
     *
     * This method indicate a new objective received fromn anopther reactor. In the case of this reactor
     * this goal is generally reflecting the execution of a new behavior.
     *
     * @param goal The objective as requested by the reactor
     */
    void handleRequest(GoalId const &goal);
    /** @brief Notification of a goal recall
     *
     * This method indicate to the reactor that a previously requested objective
     * is not part of the plan anymore and should -- if possible -- canceled. 
     *
     * @param goal The objective as requested by the reactor
     */
    void handleRecall(GoalId const &goal);
    
  private:
    /* Internal things specific to this reactor 
     */
    
  }; // TREX::VCSAdapter

} // TREX

#endif // H_VCSAdapter
{code}

h2. Declare a new reactor type to the factory

At the beginning of VCSAdapter.cc one can see

{code}
namespace TREX {
  namespace {
    DeclareReactor<VCSAdapter> decl("VCSAdapter");
  }
}
{code}

This static variable generate a new factory producer that will call the VCSAdapter constructor when it will identify a "VCSAdapter" configuration in the XZML file. For example the following xml file will trigger this :

{code:xml|name=amc.vcs.new.xml}
<Config>
	<!-- Use this component when running onboard -->
	<TeleoReactor name="vcs" component="VCSAdapter"/>

 	<TeleoReactor name="exec" component="DeliberativeReactor" 
		lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>

	<!-- Skipper has 10 Hour lookahead. -->
 	<TeleoReactor name="skipper" component="DeliberativeReactor" 
		lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg" />
</Config>
{code}
What is passed as argument to the constructor is the name of the agent (not showed here) and a C++ representation of the XML field that triggered the creation. In this case:
{code:xml}
	<TeleoReactor name="vcs" component="VCSAdapter"/>
{code}

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912916</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900069</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">14286906</id>
<property name="destinationPageTitle"><![CDATA[//babelfish.arc.nasa.gov/trac/europa]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2010-08-09 13:14:37.203</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:14:37.203</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900068</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">14286905</id>
<property name="destinationPageTitle"><![CDATA[//www.boost.org/]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2010-08-09 13:14:37.203</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:14:37.203</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900071</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">14286904</id>
<property name="destinationPageTitle"><![CDATA[//www.perforce.com/jam/jam.html]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2010-08-09 13:14:37.203</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:14:37.203</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900070</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900081</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900080</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">14286909</id>
<property name="destinationPageTitle"><![CDATA[//www.boost.org/]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2010-08-09 13:14:37.203</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:14:37.203</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900083</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">14286908</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2010-08-09 13:14:37.203</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:14:37.203</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900082</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900077</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900076</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900079</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900078</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900086</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">15990834</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">16023601</id>
</element>
</collection>
<property name="version">38</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-01-10 12:27:44.003</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900087</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900084</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900085</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.440</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.440</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900090</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913277</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8946030</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-05 15:53:51.313</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900091</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900088</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900089</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900094</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900095</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">14286898</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2010-08-09 13:14:37.200</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:14:37.200</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900092</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">14286899</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2010-08-09 13:14:37.203</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2010-08-09 13:14:37.203</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900093</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900098</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">834</id>
<property name="body"><![CDATA[h2. Missing Headers 

This page lists headers found in the sourcecode that are not found on Linux
{panel:title=Missing Headers}
conio.h
i86.h
process.h
sys/name.h
sys.kernel.h
sys/proxy.h
sys/psinfo.h
unix.h
/usr/include/syslog.h
sys/seginfo.h
sys/sched.h
{panel}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">837</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900099</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900096</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900097</id>
<property name="destinationPageTitle"><![CDATA[Seabird37\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900103</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">15630379</id>
<property name="title"><![CDATA[Decision Support System]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">15663144</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-07-12 22:29:00.377</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2010-08-24 10:40:28.823</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900102</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900101</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900100</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900107</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900106</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900105</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900104</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900111</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8356096</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8388852</id>
</element>
</collection>
<property name="version">17</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-03-21 17:00:54.157</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900110</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645131</id>
<property name="body"><![CDATA[h1. Overview
This page documents the engineering development for integration of Autonomy project research into ODSS.  See _Engineering/technology development_ section in the [2012 Autonomy project proposal|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf] for background on this effort. 

h3. [Requirements] 
h3. HABs Algorithm Flow (click on thumbnail to enlarge)
Describe the inputs/output and major components using HAB use case.
!human-in-loop workflow.png|thumbnail!
!prediction workflow.png|thumbnail! 
!detection workflow.png|thumbnail! 
 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900109</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900108</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900115</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900114</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645135</id>
<property name="body"><![CDATA[h1. Requirements
h3. Last updated:  1.24.12

The following outlines requirements to support event-response research for the Distributed Autonomy project and integration of its components into the ODSS.  These requirements are also intended to support research on folksonomy classification based on tagging, and machine learning to identifying key features that best describe data and significant events from past and future CANON field experiments.      

This is very much a work-in-progress and intended as starting point for discussion.

h3. Visualization
* Tool to assist human in the loop labeling/tagging of events
Display trends to inform users  on prediction. What kind of trends ? What kinds of predictions ? How to best visualize these ? 
* User login capability in ODSS
* STOQS spatial temporal query for past experiments to mine data for model development and to ground truth data
 
h3. Data Format and Query

* Spatial temporal query of satellite images (SST, MODIS, etc.)  to mine data for model development and to ground truth data
* Data shall be stored in a format compatible with algorithm development (Matlab ?), as necessary for building models.
* Data shall be time-stamped and spatially referenced in a standard format as necessary for e.g. interpolation, subsampling, etc. 


h3. Data Storage

Database capable of storing:

*Annotator (user)*
* properties (name, title, etc.)
* probability (e.g. probability provided correct label)

*Class attributes*
* tags
* labels (binary, multivalued, or continuous)  
* confidence (e.g. definitely, guessing, probably, percent)

*Images*

*Model parameters*
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579617</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900113</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900112</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900116</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900117</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900118</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8356119</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8388876</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-01-13 10:03:06.753</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900119</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900120</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900121</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900122</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900123</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900124</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900125</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900126</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900127</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900128</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900129</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900130</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900131</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900133</id>
<property name="destinationPageTitle"><![CDATA[SerialDriver\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900132</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900135</id>
<property name="destinationPageTitle"><![CDATA[EventProvider\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900134</id>
<property name="destinationPageTitle"><![CDATA[EventProvider\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900137</id>
<property name="destinationPageTitle"><![CDATA[EventProvider\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900136</id>
<property name="destinationPageTitle"><![CDATA[EventProvider\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900139</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900138</id>
<property name="destinationPageTitle"><![CDATA[AuvService\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900141</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900140</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900143</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900142</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900145</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900144</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900147</id>
<property name="destinationPageTitle"><![CDATA[Parosci\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900146</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900163</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900162</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900161</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900160</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900159</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900158</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900157</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900156</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372411</id>
<property name="title"><![CDATA[AUV Software Install on Debian 4.0]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9405143</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:24.673</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-30 17:08:13.123</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372360</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900155</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900154</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900153</id>
<property name="destinationPageTitle"><![CDATA[BREAK Wakeup A\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900152</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900151</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900150</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900149</id>
<property name="destinationPageTitle"><![CDATA[AuvApplication\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900148</id>
<property name="destinationPageTitle"><![CDATA[AuvService\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372404</id>
<property name="title"><![CDATA[AUV Software Install on Debian 4.0]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9405136</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:24.673</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-30 17:02:16.963</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372360</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900178</id>
<property name="destinationPageTitle"><![CDATA[parseComplex\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900179</id>
<property name="destinationPageTitle"><![CDATA[parseComplex\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900176</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372405</id>
<property name="title"><![CDATA[AUV Software Install on Debian 4.0]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9405137</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:24.673</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-30 17:07:13.687</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372360</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900177</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900174</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900175</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900172</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900173</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900170</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372395</id>
<property name="title"><![CDATA[AUV Software Install on Debian 4.0]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9405127</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:24.673</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-30 09:47:15.357</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372360</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900171</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900168</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372397</id>
<property name="title"><![CDATA[AUV Software Install on Debian 4.0]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9405129</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:24.673</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-30 11:14:13.467</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372360</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900169</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900166</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372399</id>
<property name="title"><![CDATA[AUV Software Install on Debian 4.0]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9405131</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:24.673</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-30 13:43:07.090</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372360</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900167</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900164</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372401</id>
<property name="title"><![CDATA[AUV Software Install on Debian 4.0]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9405133</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-25 10:42:24.673</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-30 13:46:17.983</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372360</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900165</id>
<property name="destinationPageTitle"><![CDATA[TeledyneDvl\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.443</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.443</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900193</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913252</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8946005</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-05 14:37:23.860</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900192</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900195</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913254</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8946007</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-05 14:58:31.670</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900194</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11272257</id>
<property name="body"><![CDATA[The following are _some_ of the critical events for 2010 for the autonomy project. It includes CANON related events which are likely to have an impact on us and/or require our collective participation. Travel events relate to where some of us will likely be out; target paper deadlines are for journal articles that I expect we will be writing up. Additional papers for other conferences (including MTS/Oceans) are not included. Two seminars (Tambe: Distributed Control and Baliga: Systems Biology) are of likely interest and potential importance to us all.

&nbsp;Note this is a living document and likely to change.
\\  !Timeline-2010.jpg|width=980,height=669!
&nbsp;

&nbsp;
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11239490</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900189</id>
<property name="destinationPageTitle"><![CDATA[Attributes\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900188</id>
<property name="destinationPageTitle"><![CDATA[Attributes\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913257</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8946010</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-05 15:42:20.547</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900191</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900190</id>
<property name="destinationPageTitle"><![CDATA[CrossbowApp\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900185</id>
<property name="destinationPageTitle"><![CDATA[Attributes\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900184</id>
<property name="destinationPageTitle"><![CDATA[Attributes\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900187</id>
<property name="destinationPageTitle"><![CDATA[Attributes\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900186</id>
<property name="destinationPageTitle"><![CDATA[Attributes\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900181</id>
<property name="destinationPageTitle"><![CDATA[parseComplex\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900180</id>
<property name="destinationPageTitle"><![CDATA[parseComplex\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900183</id>
<property name="destinationPageTitle"><![CDATA[Attributes\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913250</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8946003</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-05 06:03:55.767</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900182</id>
<property name="destinationPageTitle"><![CDATA[Attributes\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913236</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8945989</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-01-15 13:15:30.223</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900208</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900209</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900210</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900211</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900204</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900205</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900206</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900207</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900200</id>
<property name="destinationPageTitle"><![CDATA[CrossbowApp\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5505103</id>
<property name="destinationPageTitle"><![CDATA[VTIME]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-06-13 20:44:56.830</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-06-13 20:44:56.830</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900201</id>
<property name="destinationPageTitle"><![CDATA[AuvApplication\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5505102</id>
<property name="destinationPageTitle"><![CDATA[VMIN]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-06-13 20:44:56.830</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-06-13 20:44:56.830</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900202</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900203</id>
<property name="destinationPageTitle"><![CDATA[SerialDevice\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900196</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900197</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900198</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900199</id>
<property name="destinationPageTitle"><![CDATA[CorbaUtils\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5505104</id>
<property name="destinationPageTitle"><![CDATA[//www.gnu.org/software/libc/manual/html_mono/libc.html\\]]></property>
<property name="destinationSpaceKey"><![CDATA[;http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-06-13 20:44:56.830</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-06-13 20:44:56.830</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900223</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900222</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900221</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900220</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913157</id>
<property name="title"><![CDATA[Minutes from 2009-02-02--Status meeting on AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8945915</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-02-02 11:40:17.867</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-02-02 11:42:20.247</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913153</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900227</id>
<property name="destinationPageTitle"><![CDATA[auv\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900226</id>
<property name="destinationPageTitle"><![CDATA[root\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8913155</id>
<property name="title"><![CDATA[Minutes from 2009-02-02--Status meeting on AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8945913</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-02-02 11:40:17.867</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-02-02 11:40:17.867</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913153</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900225</id>
<property name="destinationPageTitle"><![CDATA[root\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900224</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900215</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900214</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179370</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux and auv-pkgs Install, build]*
* *[Termios Dev Info]*
* *[Driver Porting Details]*
* *[Running and Testing AUV Linux]*

\\
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;

\\

h6. Skill Requirements for Tasks:&nbsp;

C++, Linux, Termios, Familiarity with Navigation and Science Sensors and Debian Linux
\\

h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux and auv-pkgs Install, build]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
**** crossbow AHRS compass - Hans requested focus on this driver first (July 2008), however it will likely not be on a deployed vehicle since 3dmgx1 is preferred.
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.&nbsp;&nbsp;
\\
\\
\\
&nbsp;

h4. \\


h3.

Thom's Notes:

Time on AUV was 1999.&nbsp;&nbsp;&nbsp;

Fresh checkout from cvs, build failed.
gcc \-o uplinkQserver uplinkQueuerServer.o&nbsp; /home/auv/prj/auv-linux/onboard//utils/auvUtils.a /home/auv/prj/auv-shared/lib/libAuvShared.a \-L/opt/omniOrb/omniORB-4.1.0/build/lib/ \-L/usr/local/apr/lib \-lgctpc \-lpthread \-llog4cxx \-lnetcdf \-lnewmat&nbsp; \-lapr-1 \-laprutil-1 \-lrt
uplinkQueuerServer.o: In function `main':
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:9: undefined reference to `mbari::Logger::configure(char const*)'
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:17: undefined reference to `MsgQueuerServer::MsgQueuerServer(char const*, long, long, unsigned char, int)'
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:26: undefined reference to `MsgQueuerServer::run()'
collect2: ld returned 1 exit status
make\[1\]: \**\* \[uplinkQserver\] Error 1
make\[1\]: Leaving directory `/home/auv/prj/auv-linux/onboard/tools'
make failed
make: \**\* \[all\] Error 2
\\

The build got far enough to enable teledyne and crossbow builds.&nbsp;&nbsp;&nbsp; Teledyne would not run without creating 'latest' directory in onboard/logs though I seem to remember there was a link involved (talk to Tom O.).
\\

&nbsp;For Leak detection:

[http://www.cprogramming.com/debugging/valgrind.html]

http://www.tldp.org/HOWTO/Valgrind-HOWTO/\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900213</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900212</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900219</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900218</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900217</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900216</id>
<property name="destinationPageTitle"><![CDATA[Crossbow\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">5900228</id>
<property name="destinationPageTitle"><![CDATA[auv\]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-29 10:44:43.447</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-29 10:44:43.447</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">8356230</id>
<property name="title"><![CDATA[AUV Build and Test Server Setup]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">8388976</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-01-13 10:03:06.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-01-14 10:04:40.390</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8945911</id>
<property name="body"><![CDATA[*Brent*:
Wait for tutorial on AUV Linux (this Wed 4th @ 2pm)
March 26 is for integrating VCSServer w/ Linux. Brent is aware that we would like to have an "integrated" VCSServer with the T-REX port which is adequately tested.

*Thom*:

Coverity for static analysis of T-REX+EUROPA code base needed. However, Coverity is single project license. Need $2500 for additional project license. Should be institute wide not just project wide.

Will build T-REX under Debian this week and report back.

*Frederic*:

Testing modem for the Front following effort shows a bug on the T-REX side. Note that one can receive a msg. from modem within T-REX without sending it via Iridium. Effective way to test.
KDD paper is another focus of attention this week.

*Hans:*

Initialization problem on AL3A modem could be because of&nbsp; handshaking. Needs to investigate.
Q: What needs to be done to get a 20\+ hr mission using T-REX? Essentially T-REX is 'ready'. But to ensure that schedules mesh and we get maximum time in the water + data, important to start thinking of longer duration (and overnight) runs. Also need a way to abort T-REX over the Iridium if/when something goes wrong and vehicle is being tracked from shore. And need to figure out how to re-target the vehicle over the modem to go to a new waypoint so that one can send a waypoint from shore which is used to abort the T-REX plan and generate a waypoint to pick up the vehicle.&nbsp;The fundamental issue is how T-REX terminates.
* Some progress towards this has been implemented by Frederic for Front following.

* Do not have a clean way to wrap up a Volume Survey however. This would be something to target.
\\

Front Following algorithm: Work with John R to make sure we're on the same 'page'.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913153</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670197</id>
<property name="body"><![CDATA[*Auv Driver Portnig Links*
* *[AUV Linux - Driver Port and Validation]*
* *[AUV Debian4 Linux and auv-pkgs Install, build]*
* *[Termios Dev Info]*
\\
\\

h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:

h5. ashtec(gps)

* devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
* 9600 8N1
* Status (+) &nbsp;
** ./ashtechapp \-dev /dev/ttyS6
** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp;
** 'Soak Test' shows what looks like a memory leak.&nbsp;&nbsp;&nbsp; Experimented (a day)&nbsp;with Duma and Valgrind in an effort to track down the leak.&nbsp;&nbsp;&nbsp; Need more time to develop expertise with the tool.
\\

h5. bluefinBatt

* devices.cfg change: /dev/ser10 \-> /dev/ttyS9
* Status (-) &nbsp;
** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\

h5. 3dmgx1 Microstrain AHRS Compass

** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
*** July 9:&nbsp; Hans has made the docking vehicle available to finish the porting / validation.&nbsp;&nbsp; The 3dmgx1 is not on the vehicle, but rather the Crossbow DMU
**** The DMU baud rate can be changed per the following procedure:
**** 1. Start with the DMU connected to the serial interface, with your software set to the default baud rate of 38400.
**** 2. Send the ASCII character "b" (0x62 hex) to the DMU. In a terminal program&nbsp;like minicom simply type the letter "b". The DMU is case sensitive. The DMU will respond "B" (0x42 hex).
**** 3. Now change the baud rate of your terminal software.&nbsp;
**** 4. Send the ASCII character "a" (61 hex). The DMU will detect the character and automatically match the baud rate your software is using. Upon successful operation, the DMU will return the character "A" (0x41 hex) at the new baud rate.
**** 5. You can now use the DMU at the new baud rate. The new baud rate setting is not permanent; therefore, this process must be repeated after any power reset.
**** Sanity check the Crossbow\* *Command* *Query DMU Version,* *Character(s) Sent* v, *Response* ASCII string\* &nbsp;*Command* Query DMU Serial Number, *Character(s) Sent S*, *Response* Binary serial number data packet that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.
** Fixed a bug in checkChecksum.&nbsp;&nbsp; The struct overlay on the record was reading testPacket->Checksum as zero.&nbsp;&nbsp; There were too many castings, so rewrote the routine to operate directly on the char record - BUG FIXED.
\\

h5. parosci \-&nbsp; Paroscientific pressure sensor

** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
* wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
* Actions:
** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
** Have obtained manual - parosci is unresponsive to serial commands via minicom
** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent.
** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
*** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
*** No response to \*9900VR
*** No response to \*0100SN
** Write a simple serial program to make sure the correct byte string is sent to parosci.
*** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
** \*0100P3<0x0d><0x0a> responds with \*000116.02
** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>, (ctrl-m, ctrl-j is 0x0d, 0x0a in minicom)
* Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom Marion made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
* With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
** Found a problem
** &nbsp;Protocol Notes:
*** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |

* Status (+)
** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
** Fixed bug in baud set
** Fixed bug in read serial number (sscanf and retries)
** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
*** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;&nbsp; Fixed struct overlay bug which was causing data error.

h5. sonardyne usbl

* No test executable available

h5. \\


h5. tailcone

* changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
* ./tailcone \-dev /dev/ttyS2
* Cautions:
** Recommend running tailcone tests while observing the tailcone
** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
* Status (/)
** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\

h5. Teledyne dvl - Doppler Velocity Log

* changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
* Actions
** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
*** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
*** In progress Reading up on termio and analyzing termio setup...
*** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
*** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
* Status (/)
** Done&nbsp;&nbsp;
** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
** PD0 operation is passing basic functional test, but there is a bug blocking long term runs suspecting UART fifo depth.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Hans&nbsp;confirmed and fixed the&nbsp;UART setup using&nbsp;something like auto configure for the serial drivers at startup (Debian install issue).&nbsp;\\ \\ \\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}
\\
\\
\\
*Status details:*
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* \[9 July 2008\] Crossbow
Table 4. CrossBow AHRS300CA Data Packet Format
| Byte | VG Mode | Scaled Sensor Mode | Voltage Mode |
| 0 | Header (255) | Header (255) | Header (255) |
| 1 | Roll Angle (MSB) | Roll Angular Rate (MSB) | Roll Gyro Voltage (MSB) |
| 2 | Roll Angle (LSB) | Roll Angular Rate (LSB) | Roll Gyro Voltage (LSB) |
| 3 | Pitch Angle (MSB) | Pitch Angular Rate (MSB) | Pitch Gyro Voltage (MSB) |
| 4 | Pitch Angle (LSB) | Pitch Angular Rate (LSB) | Pitch Gyro Voltage (LSB) |
| 5 | Heading Angle (MSB) | Yaw Angular Rate (MSB) | Yaw Gyro Voltage (MSB) |
| 6 | Heading Angle (LSB) | Yaw Angular Rate (LSB) | Yaw Gyro Voltage (LSB) |
| 7 | Roll Angular Rate (MSB) | X-Axis Acceleration (MSB) | X-Axis Accel Voltage (MSB) |
| 8 | Roll Angular Rate (LSB) | X-Axis Acceleration (LSB) | X-Axis Accel Voltage (LSB) |
| 9 | Pitch Angular Rate (MSB) | Y-Axis Acceleration (MSB) | Y-Axis Accel Voltage (MSB) |
| 10 | Pitch Angular Rate (LSB) | Y-Axis Acceleration (LSB) | Y-Axis Accel Voltage (LSB) |
| 11 | Yaw Angular Rate (MSB) | Z-Axis Acceleration (MSB) | Z-Axis Accel Voltage (MSB) |
| 12 | Yaw Angular Rate (LSB) | Z-Axis Acceleration (LSB) | Z-Axis Accel Voltage (LSB) |
| 13 | X-Axis Acceleration (MSB) | X-Axis Magnetic Field (MSB) | X-Axis Mag Voltage (MSB) |
| 14 | X-Axis Acceleration (LSB) | X-Axis Magnetic Field (LSB) | X-Axis Mag Voltage (LSB) |
| 15 | Y-Axis Acceleration (MSB) | Y-Axis Magnetic Field (MSB) | Y-Axis Mag Voltage (MSB) |
| 16 | Y-Axis Acceleration (LSB) | Y-Axis Magnetic Field (LSB) | Y-Axis Mag Voltage (LSB) |
| 17 | Z-Axis Acceleration (MSB) | Z-Axis Magnetic Field (MSB) | Z-Axis Mag Voltage (MSB) |
| 18 | Z-Axis Acceleration (LSB) | Z-Axis Magnetic Field (LSB) | Z-Axis Mag Voltage (LSB) |
| 19 | X-Axis Magnetic Field (MSB) | Temp Sensor Voltage (MSB) | Temp Sensor Voltage (MSB) |
| 20 | X-Axis Magnetic Field (LSB) | Temp Sensor Voltage (LSB) | Temp Sensor Voltage (LSB) |
| 21 | Y-Axis Magnetic Field (MSB) | Time (MSB) | Time (MSB) |
| 22 | Y-Axis Magnetic Field (LSB) | Time (LSB) | Time (LSB) |
| 23 | Z-Axis Magnetic Field (MSB) | Checksum | Checksum |
| 24 | Z-Axis Magnetic Field (LSB) | | |
| 25 | Temp Sensor Voltage (MSB) | | |
| 26 | Temp Sensor Voltage (LSB) | | |
| 27 | Time (MSB) | | |
| 28 | Time (LSB) | | |
| 29 | Checksum | | |
*** \[Bug - build\] Top level build fails, though enough is built to enable&nbsp;driver development
*** \[Bug - blocking\] Fixed bug in 'checkChecksum that was blocking processRecord.&nbsp;&nbsp;&nbsp;Due to&nbsp;unpacked data (code is not compiled to pack on byte boundary, pragma pack(1))&nbsp;struct overly on serial byte stream (testPacket->checksum was zero, yet the proper checksum is in the 'record' byte buf).&nbsp;&nbsp; Changed checkChecksum to operate on byte stream with fixed offset for checksum location.
*** Output looks wrong after fixing checksum problem.&nbsp;&nbsp;&nbsp; Confirmed to be the&nbsp;'pack' problem.&nbsp;&nbsp; Bug fixed by building the data structure from the bytes, rather than overlaying and byte swapping.
*** Here's the output&nbsp;showing raw data stability but bad data (before bug fix).
**** 13:40:00.467 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=047a, HdgA=1d89
13:40:00.469 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 171.58 : P = \-167.32 : Y =&nbsp;&nbsp;&nbsp; 7.19
13:40:01.471 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0472, HdgA=1d86
13:40:01.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 160.33 : P = \-171.54 : Y =&nbsp;&nbsp;&nbsp; 1.57
13:40:02.471 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0475, HdgA=1d94
13:40:02.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp; \-84.22
13:40:03.476 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0475, HdgA=1d94
13:40:03.477 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp;&nbsp;&nbsp; 5.78
13:40:04.479 INFO \[Crossbow\] Hdr=ff, RolA=035d, PitA=0475, HdgA=1d89
13:40:04.481 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-167.32 : Y =&nbsp;&nbsp; \-5.47
13:40:05.483 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0475, HdgA=1d87
13:40:05.485 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-170.13 : Y =&nbsp;&nbsp; 17.03
13:40:06.488 INFO \[Crossbow\] Hdr=ff, RolA=035b, PitA=0476, HdgA=1d86
13:40:06.489 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 165.95 : P = \-171.54 : Y =&nbsp;&nbsp; \-5.47
13:40:07.492 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0477, HdgA=1d93
**** Here's the data after the bug fix.
14:16:37.203 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=0478, HdgA=1d97
14:16:37.204 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
14:16:38.206 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0479, HdgA=1d96
14:16:38.207 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.29 : Y =&nbsp;&nbsp; 41.61
14:16:39.210 INFO \[Crossbow\] Hdr=ff, RolA=0356, PitA=0476, HdgA=1d93
14:16:39.211 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 41.59
14:16:40.214 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0478, HdgA=1d94
14:16:40.215 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.59
14:16:41.218 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=047a, HdgA=1d94
14:16:41.219 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.30 : Y =&nbsp;&nbsp; 41.59
14:16:42.223 INFO \[Crossbow\] Hdr=ff, RolA=0356, PitA=0477, HdgA=1d96
14:16:42.223 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
14:16:43.227 INFO \[Crossbow\] Hdr=ff, RolA=035f, PitA=0474, HdgA=1d96
14:16:43.227 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.74 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 41.61
14:16:44.231 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0473, HdgA=1d96
14:16:44.232 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 41.61
14:16:45.235 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0476, HdgA=1d96
14:16:45.235 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 41.61
14:16:46.239 INFO \[Crossbow\] Hdr=ff, RolA=0360, PitA=0478, HdgA=1d96
14:16:46.240 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.75 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
\\
** \[Bug - minor\] Serial number is read incorrectly.&nbsp;&nbsp; NOT FIXED as it does not block tank test on July 17&nbsp;
*** 12:54:51.390 INFO \[Crossbow\] Serial Number: ff000043
*** 12:54:51.393 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 4278190147 (ff000043)&nbsp; <<-\- 4278190147 looks incorrect.
*** According to the Manual: &nbsp;\* The DMU will respond with a serial number datapacket that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.&nbsp; The serial number bytes should be interpreted as a 32-bit unsigned integer. For example, the serial number 9911750 would be sent as the four bytes 00 97 3D C6.
** \[Bug - minor\] termios set baud failure.&nbsp;&nbsp; Port is operational at 38400, but attempts to set it fail.&nbsp;&nbsp; This will be pushed off until after tank test.
*** 14:56:03.785 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
14:56:03.785 ERROR \[SerialDevice\] cfsetospeed() failed
*** &nbsp;
* \[11 July 2008\] Parosci on docking AUV
** \[Bug - Blocking with workaround\] Bad read of serial number is preventing the driver test from executing.&nbsp;&nbsp;&nbsp; Looks like the Serial number is requested, but the Parosci is busy streaming pressure readings (*000130.13829)
*** 15:05:42.226 DEBUG \[ParosciApp\] Leaving ParosciApp.initialize()
15:05:42.227 INFO \[AuvApplication\] run() - just sleeps by default
15:05:42.341 DEBUG \[Parosci\] writeCommand \*0100SN
*** 15:05:42.358 DEBUG \[Parosci\] Serial Number response: \*000130.13829
15:05:42.358 ERROR \[Parosci\] sscanf ret 0, incorrect serial number format
15:05:42.360 ERROR \[AuvService\] Read incorrect serial number format
*** Went into minicom and got the parosci to stop streaming (actually, just opening minicom showed a series of pressure readings with the last output being the serial number).&nbsp;&nbsp; Maybe a flush in the right place is needed.
** Ran the test again, starting with a 'non-streaming' parosci.
*** 15:15:58.779 INFO \[Parosci\] Paroscientific configured.
15:15:58.850 DEBUG \[StreamSerialDriver\] run() - start main loop
15:15:58.851 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:15:58.985 DEBUG \[Parosci\] reply with value is 30.13823^M
15:15:58.986 INFO \[Parosci\] depth is: 1146999941
*** Changed format character for depth from int to float
*** 15:50:02.429 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.430 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.431 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.434 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:02.610 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.611 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.611 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.614 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:02.790 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.790 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.791 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.794 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:02.969 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.970 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.971 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.974 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:03.153 DEBUG \[Parosci\] reply with value is 30.13807
15:50:03.155 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:03.155 DEBUG \[Parosci\] 1 bytes buffered now
15:50:03.158 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:03.244 DEBUG \[Parosci\] getting temp period
15:50:03.356 DEBUG \[Parosci\] writeCommand \*0100Q1
*** 15:50:03.484 DEBUG \[Parosci\] writeCommand \*0100Q1
*** 15:50:03.593 DEBUG \[Parosci\] reply with value is 5.840225
15:50:03.704 DEBUG \[Parosci\] writeCommand \*0100P2
*** 15:50:03.719 INFO \[Parosci\] tempPeriod is: \-247390116
15:50:03.720 DEBUG \[Parosci\] 0 bytes buffered now
15:50:03.723 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:03.925 DEBUG \[Parosci\] reply with value is 30.13809
15:50:03.926 INFO \[Parosci\] depth is:&nbsp; \-0.1744
15:50:03.927 DEBUG \[Parosci\] 1 bytes buffered now
15:50:03.930 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:04.105 DEBUG \[Parosci\] reply with value is 30.13807
15:50:04.107 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:04.107 DEBUG \[Parosci\] 1 bytes buffered now
15:50:04.110 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:04.285 DEBUG \[Parosci\] reply with value is 30.13809
15:50:04.286 INFO \[Parosci\] depth is:&nbsp; \-0.1744
15:50:04.287 DEBUG \[Parosci\] 1 bytes buffered now
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D* \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00

E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080

007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF468

19F04C10088000000000000000000000000010A0031004400008000800080008000800080008000800

08000800080008000800080008000800080008000800080008000800080008000800080008000800080

00800080008000800080008000800080008000800080008000800080008000800080008000800080008

00080008000800080008000800080008000800080008000800080008000800080008000800080008000

80008000800080008000800080008000800080008000800080008000800080008000800080008000800

080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C06

0E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090

306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F45393

5362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B

2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B

2625272B2625272B2625282B2625282B00046400000000006400000064000000640000006400000064

00000064000000640000006400000064000000640000006400000064000000640000006400000064000

00064000000640000006400000064000000640000006400000064000000640000006400000601000000

DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A

0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

CrossBow Output

auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
14:56:03.622 DEBUG \[CorbaUtils\] get ORB:
14:56:03.642 DEBUG \[CorbaUtils\] get POA:
14:56:03.664 DEBUG \[CorbaUtils\] Looking for event channel "EventChannel" in name service:

14:56:03.669 DEBUG \[CorbaUtils\] Found event channel "EventChannel"

14:56:03.675 DEBUG \[CorbaUtils\] Create provider servant

14:56:03.693 DEBUG \[CorbaUtils\] Create consumer servant

14:56:03.701 DEBUG \[parseComplex\] isIdentifier \-\- I've been asked to test the word crossbowPeriod
14:56:03.701 DEBUG \[parseComplex\] isIdentifier \-\- I've been asked to test the word 100
14:56:03.702 DEBUG \[parseComplex\] Parsing attribute crossbowPeriod = 100
14:56:03.703 DEBUG \[parseComplex\] No current item .. using the provided attributes CrossbowConstants
14:56:03.704 DEBUG \[Attributes\] Attributes::parse() - size=3

14:56:03.705 DEBUG \[Attributes\] Attributes::parse() - compare attribute name crossbowPeriod to input name crossbowPeriod

14:56:03.706 DEBUG \[Attributes\] Attributes::parse() \-\- Found value for crossbowPeriod
14:56:03.706 DEBUG \[Attributes\] Attributes::parse() \-\- crossbowPeriod is set
14:56:03.708 DEBUG \[Attributes\] Attribute crossbowPeriod is hasDefault = true, isSet = true
14:56:03.708 DEBUG \[Attributes\] Attribute debug is hasDefault = true, isSet = false
14:56:03.709 DEBUG \[Attributes\] Attribute dumpHex is hasDefault = true, isSet = false
14:56:03.710 DEBUG \[Attributes\] Attributes::verify() \-\- Attribute set CrossbowConstants is done
14:56:03.730 DEBUG \[CrossbowApp\] Launch instrument driver thread
IOR:010000001300000049444c3a6175762f4168727349463a312e300000010000000000000064000000010102000d0000003133342e38392e33322e31360000750e0e000000fef3d6774800001553000000000200000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
14:56:03.734 DEBUG \[CorbaUtils\] Ahrs already active...
14:56:03.737 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for Ahrs
14:56:03.746 DEBUG \[CorbaUtils\] context already bound
14:56:03.749 DEBUG \[CorbaUtils\] call bind() for Ahrs
14:56:03.759 DEBUG \[CorbaUtils\] call rebind() for Ahrs
14:56:03.763 DEBUG \[CorbaUtils\] invoke prepareToRun()

14:56:03.764 DEBUG \[CorbaUtils\] Activate POA manager
14:56:03.765 DEBUG \[CorbaUtils\] Run the ORB in a new thread
14:56:03.766 DEBUG \[CorbaUtils\] return from registerService()

14:56:03.767 DEBUG \[CrossbowApp\] Leaving CrossbowApp.initialize()
14:56:03.781 INFO \[AuvApplication\] run() - just sleeps by default
14:56:03.768 DEBUG \[Crossbow\] Crossbow::initialize : Initializing Crossbow driver
14:56:03.785 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
14:56:03.785 ERROR \[SerialDevice\] cfsetospeed() failed
14:56:03.786 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.789 DEBUG \[Crossbow\] Crossbow::initialize :&nbsp;&nbsp;&nbsp;&nbsp; ...done\!
14:56:03.789 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.790 DEBUG \[Crossbow\] Crossbow.cc: In getSerialNumber()
AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec14:56:03.816 INFO \[Crossbow\] Crossbow.cc: device->read succeeded
14:56:03.818 INFO \[Crossbow\] Crossbow.cc: The serial number is 4278190147 (ff000043)
14:56:03.821 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.860 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.16
14:56:04.852 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.13
14:56:05.856 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.12
14:56:06.860 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.11
14:56:07.864 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.73 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.12
14:56:08.868 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.25 : Y =&nbsp;&nbsp; 43.21
14:56:09.872 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.19
14:56:10.876 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.13
14:56:11.880 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.29 : Y =&nbsp;&nbsp; 43.11
14:56:12.884 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.11
14:56:13.888 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.10
14:56:14.893 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.23
14:56:15.896 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.17
&nbsp;

\\
&nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">916</id>
<property name="body"><![CDATA[Present: *Rich, Rob, Hans, Conor and Kanna*
* &nbsp;Rich has an agent class created in the vehicle tree which listens for socket connections for commands&nbsp; and can send the vehicle state even if there is no listener on client side

** Send in a string as unencoded text
** Per Conor, Frederic has implemented a socket on client side; in theory then one can test out the client/server mode of operation of the agents
** Rich has the code checked into CVS (not SVN); we need to agree on data structure for sending state information (Rob has some test code that needs to be checked into CVS)
** Rich also has a simple client stub just for testing
** Has added simple functionality to add some a behavior token in the middle of the stack data structure; note the stack is not a linked list but a dynamic array
* Conor articulated the naming of the entire system by calling it the Teleo-Reactive EXecutive (T-REX)
** there is now a new Subversion (SVN) project by that name; all new code for the agent will be in SVN
** Conor has implemented a mechanism to do planer path planning given a set of nodes and links; links are associated with science goal formulations while nodes predomininantly are akin to waypoints used for changing bearing of the vehicle. Such a network restricts spatially what the vehicle can do for a mission.
** To encapsulate how the behaviors work, we will need to model the interactions of the various behaviors inside the planner domain model. Instead of having a hierarchy of behaviors in a library, we're going to allow all behaviors to be accessible to the VCS as long as they're are in the domain model.
** One issue is what is needed for cleaning up when a behavior is killed on the stack; e.g if the waypoint behavior is killed while it is executing, then the vehicle will continue to go in the direction the bearing was set. However this same behavior is used to determine when a waypoint is reached; killing it will imply we need a mechanism to deal with such goal achievement, without which vehicle will keep going and not terminate at the waypoint (for instance).
** Another issue identified was that to manage latency, we will need to have Gulper arming and firing&nbsp; to be coordinated so that latency is minimized. Need to guarantee that something is on the stack always. The IDLE behavior will mitigate and will possibly need to have some cleanup code.
* Rob indicated that state vector generation was implemented and tested on the Simulator. This is in StatePackage.h
* Hans has the hardware stack in the AUV lab; will have it available and loaded with RH Linux tomorrow (Wed 21st) on the network.
** Also needs to drill into the glass ball and to be able to stick the stack inside
** In addition needs to encapsulate a switch to turn the AMC on/off]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">919</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798646</id>
<property name="title"><![CDATA[Iridum modem testing]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9831386</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-04-17 15:16:21.417</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-04-27 22:04:51.020</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797756</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798648</id>
<property name="title"><![CDATA[Iridum modem testing]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9831388</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-04-17 15:16:21.417</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-05-21 15:02:17.373</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797756</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">14516232</id>
<property name="title"><![CDATA[Decision Support System]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">14549000</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-07-12 22:29:00.377</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2010-08-18 08:28:54.800</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579625</id>
<property name="title"><![CDATA[Autonomy ODSS Integration]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645143</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 00:40:17.360</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:10:56.643</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579624</id>
<property name="title"><![CDATA[Autonomy ODSS Integration]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645142</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 00:40:17.360</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:10:16.000</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579623</id>
<property name="title"><![CDATA[Autonomy ODSS Integration]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645141</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 00:40:17.360</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:09:31.317</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579622</id>
<property name="title"><![CDATA[Autonomy ODSS Integration]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645140</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 00:40:17.360</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 00:55:18.327</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579621</id>
<property name="title"><![CDATA[Autonomy ODSS Requirements]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645139</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:06:33.030</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:08:05.540</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579617</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579620</id>
<property name="title"><![CDATA[Autonomy ODSS Requirements]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645138</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:06:33.030</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:07:22.370</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579617</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579618</id>
<property name="title"><![CDATA[Autonomy ODSS Integration Requirements]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645136</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:06:33.030</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:06:33.030</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579617</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5374032</id>
<property name="title"><![CDATA[Termios Dev Info]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5406791</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-04-01 11:50:27.647</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-03 09:05:33.890</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">5374034</id>
<property name="title"><![CDATA[AUV Debian4 Linux Install]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">5406793</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:05.490</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-04-09 12:26:43.703</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579615</id>
<property name="title"><![CDATA[Autonomy ODSS Integration]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645133</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 00:40:17.360</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 00:40:17.360</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">11042900</id>
<property name="fileName"><![CDATA[CANON.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-01-05 11:37:24.600</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-01-05 11:37:24.600</property>
<property name="fileSize">1224418</property>
<property name="comment"><![CDATA[Decision Support for CANON]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Comment" package="com.atlassian.confluence.pages">
<id name="id">11239519</id>
<property name="page" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356111</id>
</property>
<property name="title"/><collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11272286</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[brent]]></property>
<property name="creationDate">2010-01-21 23:06:31.653</property>
<property name="lastModifierName"><![CDATA[brent]]></property>
<property name="lastModificationDate">2010-01-21 23:06:31.653</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">11042892</id>
<property name="fileName"><![CDATA[Autonomy-plans10.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-01-04 12:29:42.573</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-01-04 12:29:42.573</property>
<property name="fileSize">1009310</property>
<property name="comment"><![CDATA[Autonomy Plans 2010 for CANON]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">15706753</id>
<property name="destinationPageTitle"><![CDATA[Lessons Learned Drifter Following Expt June'10]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-01-07 17:42:00.637</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-01-07 17:42:00.637</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">15706754</id>
<property name="destinationPageTitle"><![CDATA[//javaposse.com/java_posse_320_roundup_10_rich_client_vs_web]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-01-07 17:42:00.637</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-01-07 17:42:00.637</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">15706755</id>
<property name="destinationPageTitle"><![CDATA[//www.java-tv.com/2010/08/11/gwt-html5-can-do-what/]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-01-07 17:42:00.637</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-01-07 17:42:00.637</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">11042866</id>
<property name="fileName"><![CDATA[Zeyn-MBARI-Report.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-11-02 15:54:35.163</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-11-02 15:54:35.163</property>
<property name="fileSize">75178</property>
<property name="comment"><![CDATA[Zeyn's report on Monte-Carlo testing for T-REX]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">11042865</id>
<property name="fileName"><![CDATA[T-REX-state.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-11-02 15:41:06.847</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-11-02 15:41:06.847</property>
<property name="fileSize">72634</property>
<property name="comment"><![CDATA[State of T-REX tasks as of Oct 2009]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">15706757</id>
<property name="destinationPageTitle"><![CDATA[//soa.dzone.com/articles/lightweight-alternative]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-01-07 17:42:00.637</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-01-07 17:42:00.637</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">15706756</id>
<property name="destinationPageTitle"><![CDATA[//www.smartclient.com]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-01-07 17:42:00.637</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-01-07 17:42:00.637</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">15706759</id>
<property name="destinationPageTitle"><![CDATA[//www.softdevtube.com/2010/08/09/gwt-testing-best-practices/]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-01-07 17:42:00.637</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-01-07 17:42:00.637</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">15706758</id>
<property name="destinationPageTitle"><![CDATA[//java.dzone.com/articles/securing-gwt-client-acris]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-01-07 17:42:00.637</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-01-07 17:42:00.637</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">15706760</id>
<property name="destinationPageTitle"><![CDATA[//weblogs.java.net/blog/johnsmart/archive/2010/08/09/selenium-2web-driver-land-where-page-objects-are-king]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926456</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-01-07 17:42:00.637</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-01-07 17:42:00.637</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579635</id>
<property name="title"><![CDATA[Autonomy ODSS Integration]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645153</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 00:40:17.360</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 09:02:18.360</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1060</id>
<property name="body"><![CDATA[Present: *Rich, Rob, Frederic, Conor and Kanna* with *Brian & Tom present for first hour*

Quite a bit of progress has been made since these pages were last updated. Last week's (2/26) minutes were not posted. As of today, Rob's QNX stack has been "talking" to Conor's Mac with commands sent and state updates returned.
* Rich has been working on making changes to the behavior stack
** _Inserting_ behavior is done. Deleting a behavior to be executed in the future is relatively simple
** It is believed that _deleting_ a running behavior (per Hans) ought not to be a big deal too.
*** issue of clean up. Destructor class already exists; however it appears execution of destructors are not not done immediately. This was ok when the mission scirpt was pre-allocated and the vehicle had to go thru the entire set of actions. This ought to be verified with Hans (and the code base).
*** run time of clean up also need to be paid attention to, if there is substantial effort needed for this activity.
**** to alleviate this, the agreement now is that the AMC will instantiate the "next _n"_ (perhaps n=1) behaviors to instantiate on the stack. This will ensure that the VCS can continue to execute thru without having to switch to an IDLE behavior in between.
**** an IDLE behavior will be sent over, prior to aborting a currently running behavior. This will ensure that the VCS has something to "chew" on while the cleanup and retasking is taking place both in the VCS and AMC respectively.
*** Precise details of deletion are still TBD; if it requires setting the duration of the behavior to current time or in the past, for termination, a +public method+ will need to be implemented.
*** We'll need a _separate log file_ to track when behaviors have started/ended. This will be in lieu of the current log file which is written to syslog.
* Conor has been working with Rich and Rob on passing messages between his Mac (AMC) and the QNX stack (VCS). This leverages code written by Rob to take advantage of the UDP protocol.
** need to update Frederic's socket code which does not use UDP, but is easier for longer-term integration.
** 3 timelines on the AMC side are maintained and loop closed with observations obtained from the state vector sent over from the "VCS"
** goal requests are sent out as strings to the "VCS" which are used by Rich to insert behaviors on the stack.
*** need to send an associated behavior timeout along with these strings
* *{+}To do{+}*:
*# convert Frederic's socket code to use UDP
*# deletion of running behavior on the VCS side
*# acknowledgement of behavior start/stop/abort; we will use a separate channel (?) instead of state update
*# *Firing up the AMC stack to get metrics on EUROPA builds and run-time performance and to connect with the QNX stack to mimic actual hardware setup*. This is now becoming critical for us to move forward. Hans in a subsequent conversation has promised getting the stack running by *Tue 6th.*
*# Hans subsequently suggested connecting the AMC to the stack on the vehicle itself (which is not due to go out till Wed 7th morning). This would be an interesting test to do also.
* Schedule: We had a long conversation going over the detailed project plan and schedule. This followed a lengthy conversation between Rob, Rich and Kanna on Fri 2nd.
** updated version of the schedule will be sent out within a day or so. This schedule prunes down the list of tasks, and focuses on the April sea-trial opportunity. Other tasks which are not on the critical path to this April event, will be revisited after the trial, allowing us all to focus on the essentials.
** Monday 12th, we will discuss specific mission scenarios that we will aim for, for the April trial.
** Current drivers are to demonstrate:
*** Waypoint changes (i.e change headings)
*** Surface Window Mgmt (ability to insert surfacing events into a plan when appropriate)
*** Shedding goals (in the light of timing/cost limitations)
*** Actuation of AMC
** The last issue brought forth the need that we do need a way to reliably shut off the AMC from software. This calls for a h/w switch which will shut down the AMC, so that during nominal CTD runs, the AMC is not up and consuming energy and/or interfering inadvertantly with VCS execution.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1063</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579627</id>
<property name="title"><![CDATA[Autonomy ODSS Integration]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645145</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 00:40:17.360</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:17:50.013</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579628</id>
<property name="title"><![CDATA[Autonomy ODSS Integration]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645146</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 00:40:17.360</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:24:21.277</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579629</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645147</id>
</element>
</collection>
<property name="version">43</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-06-07 16:29:07.603</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579631</id>
<property name="title"><![CDATA[Autonomy ODSS Integration]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645149</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 00:40:17.360</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:25:31.907</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579633</id>
<property name="title"><![CDATA[Autonomy ODSS Integration]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645151</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 00:40:17.360</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 08:46:04.097</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579634</id>
<property name="title"><![CDATA[Autonomy ODSS Integration]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645152</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 00:40:17.360</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 08:50:32.523</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10944946</id>
<property name="body"><![CDATA[The log of autonomy deployments
\\
|| Survey Date || Op || VCS Ident || TREX Ident || Ticks || Duration || Success || Remarks per run || Overall Remarks || ||
| 4 Nov 2009 | F. Py | 2009.308.04 | 2009.308.07 | 25197s | 6h 59m 57s | TRUE | | | |
| 5&nbsp;Nov 2009 | T. Maughan | 2009.309.00 | 2009.309.01 | 2043s | 0 34m 3s | FALSE | Model ascend longer than expected | over constrained model of the ascend in TREX.&nbsp; - a patch was applied on other branches but not in the volume survey deployed for this run.&nbsp; | |
| 5&nbsp;Nov 2009 | T. Maughan | 2009.309.01 | 2009.309.06 | 2064s | 0h 34m 24s | FALSE | Model ascend longer than expected | | |
| 5&nbsp;Nov 2009 | T. Maughan | 2009.309.02 | 2009.309.07 | 1016s | 0h 16m 56s | FALSE | Interface vcsServer socket closed | VcsServer:&nbsp;&nbsp; in analyzing the failure it was determined by Frederic and Hans that the implementation was overly complicated and could be simplified to improve maintainability and reliability. | |
| 5&nbsp;Nov 2009 | T. Maughan | 2009.309.03 | 2009.309.07 | 1012s | 0h 16m 52s | FALSE | Interface vcsServer socket closed | | |
| 9 Nov 2009 | F. Py | 2009.313.02 | 2009.313.04 | 19026s | 5h 17m 6s | FALSE | AUV MVC altitude stop: it was believed that sea conditions caused the dvl to malfunction as the ping temporal spacing caused it to hear echos and deliver a wrong altitude.&nbsp;&nbsp; No way for TREX to recover from navigation instrument failure. | Altitude: Hans changed the frequency of the signal beams to avoid the false altitude.&nbsp;&nbsp; He also patched another issue in the driver. | |
| 10 Nov 2009 | T. Maughan | X | 2009.314.01 | 0s | 0 | FALSE | Failed to execute Navigation (crash) | Navigation crash:&nbsp;&nbsp; All components of mvc needed to be compiled with a specific flag.&nbsp;&nbsp;&nbsp; After two tries, we drove the boat back and applied the rebuilt code. | |
| 10 Nov 2009 | T. Maughan | X | 2009.314.03 | 0s | 0 | FALSE | Failed to execute Navigation (crash) | | |
| 10 Nov 2009 | T. Maughan | X | 2009.314.05 | 7029s | 1h 57m 9s | FALSE | mvc-dmo1 crash | MVC-DMO1 crash:&nbsp;&nbsp; it was determined that a patch should be applied to QNX, Hans patched the QNX on the vehicle and the test machines. | |
| 18 Nov 2009 | T. Maughan | 2009.322.07 | 2009.322.09 | 577s | 0h 9m 37s | FALSE | parosci + ahrs issues | Post deployment analysis showed significant differences between the DMO mvc qnx code and the autonomy branch of the mvc qnx code. | |
| 18 Nov 2009 | T. Maughan | 2009.322.09 | 2009.322.10 | 10398s | 2h 53m 18s | TRUE | AUV issue:&nbsp;Tailcone locked resulting in the abort from TREX.&nbsp;&nbsp; Also, bad weather motivated the attempt at early termination. | Tailcone issue was found to be loose screws on one of the actuators.&nbsp;&nbsp;&nbsp; Also,&nbsp;the error recovery was analyzed on the TREX side and the tailcone failure&nbsp;revealed a dispatchability issue at TREX level which is now corrected by avoiding to dispatch a behavior before it can start (to be refined but OK) | |
| 19 Nov 2009 | F. Py | 2009.323.01 | 2009.323.02 | 4274s | 1h 11m 14s | FALSE | parosci error | This error was related to the code diffs in the autonomy branch of mvc code | |
| 19 Nov 2009 | F. Py | 2009.323.02 | 2009.323.06 | 2094s | 0h 34m 54s | FALSE | parosci error | " | |
| 8 Dec 2009 | F. Py | 2009.342.04 | 2009.342.05 | 9359s | 2h 35m 59s | TRUE | altitude stop: (see Nov. 9).&nbsp;&nbsp; Gulpers:&nbsp; it appears that the gulper commands were potentially too closely spaced for the driver. | This error was related to&nbsp; the fact that our branch was not up to date and specifically did not include latest updates related to AUV&nbsp;HW modifications | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10912189</id>
</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277005</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/login.action]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 10:45:15.100</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 10:45:15.100</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">16285912</id>
<property name="destinationPageTitle"><![CDATA[MATLAB Tools]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 08:44:21.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.917</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3276988</id>
<property name="viewCount">72</property>
<property name="url"><![CDATA[http://oceana:8081/pages/editpage.action?pageId=3113885]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-12 08:57:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 15:17:15.027</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3276987</id>
<property name="viewCount">28</property>
<property name="url"><![CDATA[http://oceana:8081/dashboard.action]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-12 08:49:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-17 08:23:15.070</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">16285908</id>
<property name="destinationPageTitle"><![CDATA[Minutes from 2007-03-05--Status meeting on AUV Deliberative Autonomy project]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 08:44:21.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.917</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">16285909</id>
<property name="destinationPageTitle"><![CDATA[Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 08:44:21.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.917</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">16285910</id>
<property name="destinationPageTitle"><![CDATA[Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 08:44:21.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.917</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3276990</id>
<property name="viewCount">4</property>
<property name="url"><![CDATA[http://oceana:8081/login.action?os_destination=%2Fdisplay%2FAUV%2FAUV%2BLinux%2B-%2BDebian%2BSetup%252C%2BDriver%2BPort%2Band%2BValidation]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-13 09:02:15.027</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-19 09:34:15.053</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">16285911</id>
<property name="destinationPageTitle"><![CDATA[2007-02-02 Minutes]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 08:44:21.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.917</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">16285907</id>
<property name="destinationPageTitle"><![CDATA[Minutes from 2007-03-19--Status meeting on AUV Deliberative Autonomy project]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 08:44:21.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.917</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3276978</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/users/viewuserhistory.action]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-04 11:24:15.027</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-04 11:24:15.027</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">16285906</id>
<property name="destinationPageTitle"><![CDATA[Minutes from 2007-03-26--Status meeting on AUV Deliberative Autonomy project]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 08:44:21.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.917</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">16285905</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/confluence/display/AUV/2009-04-13+Autonomy+project]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 08:44:21.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.917</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">16285904</id>
<property name="destinationPageTitle"><![CDATA[Decision Support System]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 08:44:21.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.917</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">16285903</id>
<property name="destinationPageTitle"><![CDATA[Autonomy]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 08:44:21.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.917</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">16285902</id>
<property name="destinationPageTitle"><![CDATA[AUV Build and Test Server Setup]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 08:44:21.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.917</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">16285901</id>
<property name="destinationPageTitle"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 08:44:21.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.917</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">16285900</id>
<property name="destinationPageTitle"><![CDATA[Source Code]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 08:44:21.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.917</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">16285899</id>
<property name="destinationPageTitle"><![CDATA[Linux Port]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-03-02 08:44:21.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-03-02 08:44:21.917</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3276976</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/dashboard.action?spacesSelectedTab=all]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-04 11:21:15.053</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-04 11:21:15.053</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3276977</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/viewinfo.action?pageId=763]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-04 11:22:15.040</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-04 11:22:15.040</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179556</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]
* [AUV Software Install on Debian 4.0]

\\
&nbsp;

h4. *To Do List*

* config out the audio support (kahlua)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
* 25 July 2008 - looks like there is a memory leak in the ashtec driver (based on the overnight test).
** download duma_2_5_14, untar and run 'make install'
** Modify linker command file to add \-lduma
** &nbsp;

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.
\\

Xtreme104 Serial Setup
\\

serial.conf looks like

mvc-debian4:/proc# cat /etc/serial.conf
/dev/ttyS1 uart 16450 port 0x2F8 irq 3

\#Xtreme card
\# Group A
/dev/ttyS2 uart 16850 port 0x380 irq 9&nbsp; baud_base 1500000
/dev/ttyS3 uart 16850 port 0x388 irq 9&nbsp; baud_base 1500000
/dev/ttyS4 uart 16850 port 0x390 irq 9&nbsp; baud_base 1500000
/dev/ttyS5 uart 16850 port 0x398 irq 9&nbsp; baud_base 1500000

\# Group B
/dev/ttyS6 uart 16850 port 0x300 irq 9&nbsp; baud_base 1500000
/dev/ttyS7 uart 16850 port 0x308 irq 9&nbsp; baud_base 1500000
/dev/ttyS8 uart 16850 port 0x310 irq 9&nbsp; baud_base 1500000
/dev/ttyS9 uart 16850 port 0x318 irq 9&nbsp; baud_base 1500000

\# Group C
/dev/ttyS10 uart 16850 port 0x150 irq 9 baud_base 1500000
/dev/ttyS11 uart 16850 port 0x158 irq 9 baud_base 1500000
/dev/ttyS12 uart 16850 port 0x160 irq 9 baud_base 1500000
/dev/ttyS13 uart 16850 port 0x168 irq 9 baud_base 1500000
&nbsp;
\\

mvc-debian4:/proc# cat /proc/interrupts
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU0
&nbsp; 0:&nbsp;&nbsp; 45634199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; timer
&nbsp; 1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; i8042
&nbsp; 2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; cascade
&nbsp; 6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; floppy
&nbsp; 7:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; parport0
&nbsp; 8:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; rtc
&nbsp; 9:&nbsp;&nbsp; 67591801&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; serial
&nbsp;11:&nbsp;&nbsp;&nbsp;&nbsp; 865812&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; eth0
&nbsp;14:&nbsp;&nbsp;&nbsp;&nbsp; 153327&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; ide0
NMI:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
LOC:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
ERR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
MIS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
mvc-debian4:/proc# setserial \-g /dev/ttyS5
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
mvc-debian4:/proc# setserial \-g /dev/ttyS\*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16450, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: 16850, Port: 0x0150, IRQ: 2
/dev/ttyS11, UART: 16850, Port: 0x0158, IRQ: 2
/dev/ttyS2, UART: 16850, Port: 0x0380, IRQ: 2
/dev/ttyS3, UART: 16850, Port: 0x0388, IRQ: 2
/dev/ttyS4, UART: 16850, Port: 0x0390, IRQ: 2
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
/dev/ttyS6, UART: 16850, Port: 0x0300, IRQ: 2
/dev/ttyS7, UART: 16850, Port: 0x0308, IRQ: 2
/dev/ttyS8, UART: 16850, Port: 0x0310, IRQ: 2
/dev/ttyS9, UART: 16850, Port: 0x0318, IRQ: 2
&nbsp;

&nbsp;mvc-debian4:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0150-0157 : serial
0158-015f : serial
01f0-01f7 : ide0
02f8-02ff : serial
0300-0307 : serial
0308-030f : serial
0310-0317 : serial
0318-031f : serial
0378-037a : parport0
037b-037f : parport0
0380-0387 : serial
0388-038f : serial
0390-0397 : serial
0398-039f : serial
03c0-03df : vga\+
03f2-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-03ff : serial
0cf8-0cff : PCI conf1
e000-e03f : 0000:00:11.0
&nbsp; e000-e03f : e100
f000-f00f : 0000:00:12.2
&nbsp; f000-f007 : ide0
&nbsp; f008-f00f : ide1
\\

h4. Useful Debian links

** www.google.com
** [http://www.debianhelp.org/]
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** As root, add auv startup script to /etc/init.d:&nbsp;&nbsp; /etc/init.d/auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** chmod a+x auv-startup.sh&nbsp;
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f auv-startup.sh start 80 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
**** create a file called 'startCorba.sh'
***** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notification service.
***** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
***** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
***** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
**** make sure startCorba has execute permissions (chmod a+x startCorba.sh)&nbsp;
**** Create a symbolic link using update-rc.d (Debian command)&nbsp;
***** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** edit */etc/dhcp3/dhclient.conf* to add the following line:
****** send host-name "foce2.shore.mbari.org"
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\
\\

Notes from ConnectTech Support site for Xtreme104 Isolated 12 port serial card
\\

&nbsp;Configuring the Kernel(2.6.x){color:black}The 2.6 kernel has support for the 8250/16650 UART in <src>/drivers/serial/8250.c. You should be able to run our ISA serial cards(Echo, DFlex, Xtreme/104) with this driver and the proper Kernel configuration.{color}{color:black}You'll need to edit your serial.h file in <src>/include/asm and add in the extra serial ports of the card.{color}{color:black}Here's what I added in red for a 4 port Xtreme/104 card at I/O 300 and IRQ 5. You can do the same with your card settings. If your card is using a higher clock than be sure to adjust your BAUD_BAUD value accordingly{color}

Base baud for CTI boards. Default Max Baud = 115200 bps

define CTI_BAUD (1843200 /16){color:black}define STD_SERIAL_PORT_DFNS{color}
{color:black}UARTCLKPORT{color}{color:black}IRQ FLAGS \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }
ttyS0
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }
ttyS1
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }
ttyS2
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM_FLAGS }
ttyS3
{ 0, CTI_BAUD, 0x300, 5, STD_COM_FLAGS }
ttyS4
{ 0, CTI_BAUD, 0x308, 5, STD_COM_FLAGS }
ttyS5
{ 0, CTI_BAUD, 0x310, 5, STD_COM_FLAGS }
ttyS6
{ 0, CTI_BAUD, 0x318, 5, STD_COM_FLAGS }
ttyS7
\\

If your board has a difference clock, be sure to change the CTI_BAUD value appropriately.
\\
\\
\\
\\
\\
\\
\\
\\
Re-Compiling the Kernel(Linux 2.6)
\\
\\
\*# cd
{Linux}*

At this point, you have a choice of two configuration utilities that you can use to configure your kernel. One utility, named config, is text based, and the other, named menuconfig, has a simple GUI (Graphical User Interface). The menuconfig utility is easier to use than config, so unless you have specific reasons use the menuconfig utility.

To use the menuconfig / config utility:

*\# make menuconfig*
Or
*\# make config* Once the configuration utility you choose is running, make sure that the following options are selected. Below shows the setting that must be enabled using the menuconfig and config utilities.

config: CONFIG_PCI
menuconfig: (Bus Options \-> PCI Support)\\

config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> 8250/16550 and compatible serial support)
 

config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Extended 8250/16550 serial driver options)

config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support more than 4 legacy serial ports)
 

config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support for sharing serial interrupts)

After all of the options have been checked and enabled, select exit. You will be prompted to save the new kernel configuration. Select yes. After you have finished configuring your kernel, issue the two following commands:

*\# make clean*
*\# make bzImage*
*\# make modules*
*\# make modules_install{*}Building/Installing the Kernel
NOTE: These instructions are for Red Hat standard installs. If you use a different distribution, or have set up your own system, these instructions will likely not help you. In that case please contact Connect Tech support at support@connecttech.com

Copy the kernel and system map to the boot partition:

The "make bzImage" step created the kernel in the subdirectory {Linux}
/arch//boot. If you don't know what CPU type you're using, you can find the new kernel by:
\\
# ls \-l
{Linux}/arch/*/boot/bzImage

The < cpu type > is the "*" part of the pathname of the newest kernel.
/arch//boot will be referenced by {arch}.

# cp {Linux}
/
{arch}
/bzImage /boot/vmlinuz-bh
# cp
{Linux}
/System.map /boot/System.map-bh

You may choose any postfix, \-df is a handy one. The postfix merely distinguishes between the kernel you've just built and other kernels already installed. It has no other purpose.
&nbsp;
Creating Nodes (Ports) For the Host Adapter
NOTE: Depending on your kernel distribution and configuration, nodes(ports) are often created automatically and you can skip this step. Check to see if they exist before proceeding.

Now that we have the new kernel in place capable of supporting the Blue Heat serial adapter we must create nodes, or ports, to allow the host adapter to communicate with other devices.

To begin, boot the new kernel. After the kernel has booted, open up the messages file using Vi, or your favorite text editor:
# vi
{log_path}/messages
Where {log_path}
is where the system logs are stored. Typically,
{log_path} = /var/log but this may be different in some distributions/systems.

Go to the bottom of the file and search backwards for references to "ttySxx" where xx is a number. You should see ttyS0 and ttyS1 for the standard serial ports, as well as a ttySxx entrie for each installed Echo/Dflex port. In order to use the new ports, these ttySxx entries must exist in the /dev directory. If they do not exist (they aren't created automatically, but do persist after reboots) you must make them with the following command:

# mknod -m [mode] /dev/ttySxx c 4 yy
[mode] is the file mode (permissions) you wish the device to have. 600 is often good.
xx is the number associated with the device which you have seen in the messages file.
yy is just xx + 64

You may also wish to make the corresponding cuaxx devices, but they are being phased out:

# mknod -m {mode} /dev/cuaxx c 5 yy
xx and yy should match the xx and yy from the previous mknod command

Here is an example of what you would do to add the nodes to your /dev directory:
First I opened the Vi editor and search for ttyS*. The results of the search show me that I have ttyS00 and ttyS01 (the standard serial ports) entries, as well as four other entries: ttyS05, ttyS06, ttyS07 and ttyS08. These four entries correspond to the four new ports for my CTI host adapter. (Right now, we are assuming a four-port card. You may have fewer or more ports, depending on the type of card you have). I've written down the four entries on a sheet of paper, seeing how my memory is a little short. Now I would like to make the nodes. From the command line, I type in the four following entries:

# mknod -m 600 /dev/ttyS05 c 4 69
# mknod -m 600 /dev/ttyS06 c 4 70
# mknod -m 600 /dev/ttyS06 c 4 71
# mknod -m 600 /dev/ttyS07 c 4 72

and optionally execute:

# mknod -m 600 /dev/cua12 c 5 69
# mknod -m 600 /dev/cua13 c 5 70
# mknod -m 600 /dev/cua14 c 5 71
# mknod -m 600 /dev/cua15 c 5 72

With the nodes in place, this finishes off our installation
 
Multiport Support
NOTE: Multiport support is not necessary for your boards to operate properly. This may safely be skipped. It is only a performance tweak available for users with older systems. Newer PCs do not gain much performance from this tweak.

Check {log_path}
/messages again. Each serial port will have a line; all the ports on each board will be listed in sequence. An eight port board might look like:

ttyS4 at port 0x300 (irq = 5) is a ST16654
ttyS5 at port 0x308 (irq = 5) is a ST16654
ttyS6 at port 0x310 (irq = 5) is a ST16654
ttyS7 at port 0x318 (irq = 5) is a ST16654
ttyS8 at port 0x320 (irq = 5) is a ST16654
ttyS9 at port 0x328 (irq = 5) is a ST16654
ttyS10 at port 0x330 (irq = 5) is a ST16654
ttyS11 at port 0x338 (irq = 5) is a ST16654

"port" in the above listing is really short for "port address". To avoid confusion, I will refer to the port address as the "address" instead.

Your board will have a table of the port addresses in the manual that came with it. You will need to look up the address that the board has been configured for; the line will also tell you what address the status port is at.
{mask} is determined by the following table:
Number of ports       {mask}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffsetserial is used to inform the driver about the status port, in the following manner:
\\
# setserial
{port} set_multiport portX {status port address} maskX {mask} matchX 0x0
where {port}
is any one port on a given board (using the first port is usually the best way),
{status port address}
is the address of the status port as determined above,
{mask}
is the appropriate mask value for the board from the table above, and X is a multiport setting number between 1 and 4.

The multiport setting number will usually be 1, but can be other values. There may be other multiport settings on the irq that your board is using, set by other boards in your system, including other Connect Tech boards.
# setserial
{port} get_setserial
where {port}
is a port on a board that you are going to use the status port on, will reveal if there are other multiport settings in effect already. If so, take care to choose X to be the lowest empty setting number.

This needs be done only once per board that you wish to have the status port used on.

Example:
You have two boards installed, an 8 port and a 2 port. The ports on each board are:
ttyS4 at port 0x300 (irq = 5) is a ST16654
.
.
ttyS11 at port 0x338 (irq = 5) is a ST16654
ttyS12 at port 0x200 (irq = 10) is a ST16654
ttyS13 at port 0x208 (irq = 10) is a ST16654

Check to see if any other multiport settings are already in use:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0One multiport setting is already in use by another board.

This works on a per irq basis, so each irq that is used by a board needs to be checked:
# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0No multiport settings are in use.

The commands to enable use of the status port on each board would be:
# setserial /dev/ttyS4 set_multiport port2 0x340 mask2 0xff match2 0x00
# setserial /dev/ttyS12 set_multiport port1 0x240 mask1 0x03 match1 0x00

Check that the settings are in place:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x340, mask=0xff, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x240, mask=0x3, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# man setserial

may be of help also.
&nbsp;
RS-485 Line Modes Support
The utility set485 can be used to set the line mode interactively or from a startup script. Settings stick until changed or the system is rebooted.

The Linux header file ioctls.h now contains definitions for TIOCSER485GET and TIOCSER485SET. These ioctls can be used on Connect Tech 485 capable boards to set the line mode. The mode (passed as an integer) can be one of TIOCSER485FULLDUPLEX, TIOCSER485HALFDUPLEX or TIOCSER485SLAVEMULTIPLEX for full or half duplex or slave multidrop mode, respectively.
&nbsp;
The Linux 2.6 standard serial driver does not have advanced RS485 mode support as of yet. If you require this functionality please contactsupport@connecttech.comfor the latest status of patches available.
\\
More stream of consciousness ramblings:

*OmniNotify v2.1 will not compile with the latest C+\+ offerings from GNU and Microsoft.*

Why?&nbsp; Because support for the header <iostream.h> has been removed.

It is replaced by <iostream> (without the .h) and requires use of namespaces to access.

A patch to v2.1 that fixes this is attached
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">9441008</id>
<property name="destinationPageTitle"><![CDATA[//www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372360</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-03-31 08:47:26.383</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-03-31 08:47:26.383</property>
</object>
<object class="Comment" package="com.atlassian.confluence.pages">
<id name="id">1179838</id>
<property name="page" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="title"/><collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1212604</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"/><property name="creationDate">2007-07-16 12:57:35.260</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-07-16 12:57:35.260</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835068</id>
<property name="title"><![CDATA[Minutes from 2007-08-17--Lessons Learned from AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867832</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-09-18 09:00:02.313</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-09-19 13:38:57.467</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835067</id>
<property name="title"><![CDATA[Minutes from 2007-08-17--Lessons Learned from AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867831</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-09-18 09:00:02.313</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-09-18 22:56:45.420</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835069</id>
<property name="title"><![CDATA[Minutes from 2007-08-17--Lessons Learned from AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867833</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-09-18 09:00:02.313</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-09-19 13:42:52.450</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835059</id>
<property name="title"><![CDATA[Minutes from 2007-08-17--Lessons Learned from AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867823</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-09-18 09:00:02.313</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-09-18 16:55:09.680</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835060</id>
<property name="title"><![CDATA[Minutes from 2007-08-17--Lessons Learned from AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867824</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-09-18 09:00:02.313</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-09-18 22:18:08.843</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835061</id>
<property name="title"><![CDATA[Minutes from 2007-08-17--Lessons Learned from AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867825</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-09-18 09:00:02.313</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-09-18 22:20:59.603</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835062</id>
<property name="title"><![CDATA[Minutes from 2007-08-17--Lessons Learned from AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867826</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-09-18 09:00:02.313</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-09-18 22:27:04.530</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835063</id>
<property name="title"><![CDATA[Minutes from 2007-08-17--Lessons Learned from AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867827</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-09-18 09:00:02.313</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-09-18 22:36:39.853</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835064</id>
<property name="title"><![CDATA[Minutes from 2007-08-17--Lessons Learned from AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867828</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-09-18 09:00:02.313</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-09-18 22:40:39.957</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835065</id>
<property name="title"><![CDATA[Minutes from 2007-08-17--Lessons Learned from AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867829</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-09-18 09:00:02.313</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-09-18 22:41:14.567</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835066</id>
<property name="title"><![CDATA[Minutes from 2007-08-17--Lessons Learned from AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867830</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-09-18 09:00:02.313</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-09-18 22:47:48.767</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277051</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/Home]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 17:03:15.190</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 17:03:15.190</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835057</id>
<property name="title"><![CDATA[Minutes from 2007-08-17--Lessons Learned from AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867821</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-09-18 09:00:02.313</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-09-18 09:00:02.313</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277050</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/Home?showChildren=true]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 17:03:15.177</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 17:03:15.177</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835058</id>
<property name="title"><![CDATA[Minutes from 2007-08-17--Lessons Learned from AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867822</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-09-18 09:00:02.313</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-09-18 16:10:13.350</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835056</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">824</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[EDITBLOG]]></property>
<property name="group"><![CDATA[AUVCTD]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277047</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/users/viewuserhistory.action]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 17:00:15.047</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 17:00:15.047</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">823</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[REMOVECOMMENT]]></property>
<property name="group"><![CDATA[AUVDevelopment]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277048</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/pages/editpage.action?pageId=751]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 17:01:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 17:02:15.017</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">822</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[VIEWSPACE]]></property>
<property name="group"><![CDATA[AUVDevelopment]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:32:58.357</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:32:58.357</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277049</id>
<property name="viewCount">16</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/Home]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 17:01:15.030</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-03 07:35:15.123</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">821</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[VIEWSPACE]]></property>
<property name="group"><![CDATA[AUVCTD]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:32:58.353</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:32:58.353</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1343495</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/Home]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">875</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-06-08 14:27:15.087</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-22 16:22:15.030</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277042</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/doeditpage.action?pageId=3113885]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:50:15.030</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 16:50:15.030</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">828</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[REMOVEPAGE]]></property>
<property name="group"><![CDATA[AUVDevelopment]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1343494</id>
<property name="viewCount">27</property>
<property name="url"><![CDATA[http://oceana:8081/dashboard.action]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-06-08 14:27:15.053</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-03 07:35:15.077</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">827</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[REMOVECOMMENT]]></property>
<property name="group"><![CDATA[AUVCTD]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">826</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[REMOVEATTACHMENT]]></property>
<property name="group"><![CDATA[AUVCTD]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">825</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[EDITSPACE]]></property>
<property name="group"><![CDATA[AUVCTD]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277038</id>
<property name="viewCount">17</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/AUV+Linux+-+Driver+Port+and+Validation]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:38:15.020</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-02 13:02:15.073</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">831</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[EDITBLOG]]></property>
<property name="group"><![CDATA[AUVDevelopment]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">830</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[COMMENT]]></property>
<property name="group"><![CDATA[AUVCTD]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">829</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[EXPORTPAGE]]></property>
<property name="group"><![CDATA[AUVDevelopment]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">836</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[EXPORTPAGE]]></property>
<property name="group"><![CDATA[AUVCTD]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277034</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/createpage.action?spaceKey=AUV&title=AUV+Debian4+Linux+Install&linkCreation=true&fromPageId=3113885]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:35:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 16:35:15.017</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">835</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[COMMENT]]></property>
<property name="group"><![CDATA[AUVDevelopment]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277035</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/login.action?os_destination=%2Fdisplay%2FAUV%2FAUV%2BDebian4%2BLinux%2BInstall]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:36:15.020</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-25 13:52:15.050</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">834</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[CREATEATTACHMENT]]></property>
<property name="group"><![CDATA[AUVDevelopment]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277036</id>
<property name="viewCount">8</property>
<property name="url"><![CDATA[http://oceana:8081/pages/editpage.action?pageId=3114074]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:36:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-10 15:56:15.070</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277037</id>
<property name="viewCount">10</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/AUV+Debian4+Linux+Install]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:37:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-10 15:57:15.027</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">833</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[REMOVEPAGE]]></property>
<property name="group"><![CDATA[AUVCTD]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">839</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[REMOVEATTACHMENT]]></property>
<property name="group"><![CDATA[AUVDevelopment]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">840</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[EDITSPACE]]></property>
<property name="group"><![CDATA[AUVDevelopment]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">838</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[CREATEATTACHMENT]]></property>
<property name="group"><![CDATA[AUVCTD]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:33:38.907</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-05 13:33:38.907</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277026</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/editpage.action?pageId=751]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:20:15.030</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 16:20:15.030</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277025</id>
<property name="viewCount">4</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/AUV+Linux+-+Debian+Setup%2C+Driver+Port+and+Validation]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:18:15.020</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 17:00:15.037</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277021</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/Meeting+Minutes]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:03:15.070</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 16:03:15.070</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277020</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/Home]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">869</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-21 16:03:15.067</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-03-21 16:04:15.040</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">4882484</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[CREATEATTACHMENT]]></property>
<property name="group"><![CDATA[Onsite Distribution List]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2008-06-03 12:45:31.183</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2008-06-03 12:45:31.183</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">4882483</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[VIEWSPACE]]></property>
<property name="group"><![CDATA[Onsite Distribution List]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2008-06-03 12:45:18.017</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2008-06-03 12:45:18.017</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">656041</id>
<property name="destinationPageTitle"><![CDATA[//oceana:8082/browse/AUT]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">589901</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-04-03 08:15:38.107</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-04-03 08:15:38.107</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277117</id>
<property name="viewCount">6</property>
<property name="url"><![CDATA[http://oceana:8081/login.action?os_destination=%2Fdisplay%2FAUV%2FAUV%2BLinux%2B-%2BDriver%2BPort%2Band%2BValidation]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-03-24 08:08:15.020</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-01 13:02:15.027</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10912267</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10945022</id>
</element>
</collection>
<property name="version">32</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-12-09 13:25:09.200</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">589903</id>
<property name="title"><![CDATA[Minutes from 2007-04-02--Status meeting on AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">622670</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-04-02 21:49:41.917</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-04-02 21:49:41.917</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">589901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179932</id>
<property name="body"><![CDATA[Notes from various man pages and internet searches:
\\

When VTIME is greater than 0 it enables the timer, but there are two different types of timers, depending on whether VMIN is 0 or not.

h5. If VTIME and VMIN are both greater than 0:

\\
* The timer is an 'inter-byte timer' activated when the _first byte is received_.
* It is then reset whenever a new&nbsp;byte is received, and will timeout (count in tenths of seconds with a max of 25.5 sec) if there is the specified time without another byte being received.
* A call to read() will block until at least 1 byte is received, unless a signal interrupts.
* If data is buffered when read() is called, and the number of bytes is equal or greater than VMIN, the read() call will return immediately with existing data.

h5. When VTIME is greater than 0 and VMIN is 0:

\\
* The timer is a \*read\* *_timer_\* \_activated\__as{_}{_}soon{_}{_}as{_}{_}the{_}{_}read_() \_function\_ \_is\_ \_called_.
* If no byte is received in the specified time, there will be a timeout and the read() call will return 0, with no data.
* Since VMIN is 0, the receipt of a single byte will satisfy the read() call, and cause a return. If there is data in the buffer when read() is called, read() will immediately return with existing data.

h5. If VTIME is 0, the timer is disabled. If VMIN is also 0:

\\
* A&nbsp;call to read() will \_return\_ \_immediately_.
* The minimum of either the number of bytes requested or the number of bytes currently available will be returned.
* If no characters are available, read() returns 0, with no data.

h5. If VTIME is 0 and VMIN is greater than 0:

\\
* The timer is disabled, but a call to read() will \_block__indefinitely\_ until either data is received or a signal interrupts.
* When VMIN bytes have been received, the read() function will return.
* If there is data in the buffer when read() is called, and the number of bytes is equal to or greater than VMIN, the read() call will return immediately with existing data.

\\
Okay, now given that you want to read one or more characters and have a timeout, the question is do you actually want an inter-byte timer, or a read timer?

If you set both VTIME and VMIN to 1, for example, you'll have an inter-byte timer... and calls to read() can \*block\* \*forever\* if no data at all is received.

If you want a read timer, set VMIN to 0 and VTIME to 1, and then the call to read() will always return, with or without data. If there is no data available, read() will return 0, if data is available it will return the number of data bytes retrieved.

All of the above assumes that the O_NONBLOCK attribute is not set. And for any of the above if the call to read() is interrupted by a signal, read() will return \-1, and the error code will be EINTR. (More discussion about this below.)

&nbsp;---------------------------------------------------\-

When the *ICANON* bit is turned off, a "raw mode" is selected which changes the interpretation of these values. These are used to guide the line-driver code in its decision on allowing the *read()* system call to return. We'll try to explain them in some detail. Function-key processingOn a regular keyboard, most keys send just one byte each, but almost all keyboards have special keys that send asequence of charactersat a time. Examples (from an ANSI keyboard)ESC \[ A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; up arrowESC \[ 5 \~&nbsp;&nbsp;&nbsp; page upESC \[ 18 \~&nbsp;&nbsp; F7and so on.From a strictly "string recognition" point of view, it's easy enough to translate "ESC \[ A" into "up arrow" inside a program, but how does it tell the difference between "user typed up-arrow" and "user typed the ESCAPE key"? The difference istiming. If the ESCAPE isimmediatelyfollowed by the rest of the expected sequence, then it's a function key: otherwise it's just a plain ESCAPE.Efficient highspeed inputWhen a communications program (such as fax software) is reading from a modem, the data stream is arriving at a relatively high rate. Doing single-character-at-a-time input would be extremely inefficient, given that eachread()involves a system call and an operating system context switch. We'd instead like to read in larger chunk if it's available for us, but still know how to recognize timeouts (which usually indicate error conditions).Capturing occasional, low-volume dataWhen writing software that monitored a temperature sensor via a serial line, we expected to receive a short (10-20 bytes) message every second. This message arrived as a single burst, and once the first character of the message was received, weknewthat the others were right behind it and would be completely received in about 100 milliseconds.The message format did not have strong delimiters, so if we used a naïve read of so many bytes, we'd run the risk of reading an entire message but blocking until a few more bytesof the next messagewere read to fill our request. This could lead to getting "out of sync" with the sensor.By settingVMIN/VTIMEproperly, we were able to insure that that we could efficiently capture all the data sent in one burst without risk of inter-message overlap.We'll note that some of these timeout issues can be partly addressed by the use of signals and alarms, but this is really a substandard solution: signals and I/O are hard to get right (especially in a portable manner), and we very strongly prefer using the features of the line-discipline code as they were intended. Signals suck.
\\

h5. When does +read()+ return?

The *termios* settings are actually handled in the kernel, and the ones we're interested in are in the _line discipline_ code. This sits above the "device driver", and this is consistent with our applying termios to both serial and network I/O (which obviously use different underlying hardware).

All of the *VMIN* and *VTIME* areas involve one question: _When does the line driver allow_ *{_}read()_* _to return?_
With a "regular file", the operating system returns from the *read()* system call when either the user buffer is full, or when the end of file has been reached - this decision is easy and automatic.

But when the driver is reading from a terminal line, the "Are we done?" question can be asked over and over for each character that arrives. This question is resolved by setting *VMIN*/*VTIME*.

Using our temperature-sensor example, we'll list the requirements that inform our design:
* We normally read up to 20 bytes as a "message"
* Individual messages have their bytes all sent together
* No background processing required; while waiting for input, we're happy to block indefinitely waiting for something to happen

The last requirement means that we have no _overall_ timeout, but we do have an _intercharacter_ timeout. This is the key functionality provided by the line driver. Let's be specific.

When waiting for input, the driver returns when: VTIMEtenths of a second elapsesbetweenbytesAn internal timer is started when a character arrives, and it counts up in tenths of a second units. It's reset whenever new data arrives, so rapidly-arriving data never gives the intercharacter timer a chance to count very high.It's only after thelastcharacter of a burst --- when the line is quiet --- that the timer really gets counting. When it reachesVTIMEtenths, the user's request has been satisfied and theread()returns.This provides exactly the behavior we want when dealing with bursty data: collect data while it's arriving rapidly, but when it calms down, give us what you got.VMINcharacters have been received, with no more data availableAt first this appears duplicative to thenbytesparameter to theread()system call, but it's not quite the same thing.The serial driver maintains an input queue of data received but not transferred to the user --- clearly data can arrive even when we're not asking for it --- and this is always first copied to the user's buffer on aread()without having to wait for anything.But if we do end up blocking for I/O (because the kernel's input queue is empty), thenVMINkicks in: When that many bytes have been received, theread()request returns that data. In this respect we can think of thenbytesparameter as being the amount of data wehopeto get, but we'll settle forVMIN.The user's requested number of bytes has been satisfiedThis rule trumps all the others: there is no circumstance where the system will providemoredata than was actually asked for by the user. If the user asks for (say) ten bytes in theread()system call, and that much data is already waiting in the kernel's input queue, then it's returned to the caller immediately and without havingVMINandVTIMEparticipate in any way.These are certainly confusing to one who is new to *termios*, but it's not really poorly defined Instead, they solve problems that are not obvious to the newcomer. It's only when one is actually dealing with terminal I/O and running into issues of either performance or timing that one really must dig in.

h5. &nbsp;&nbsp;


h5. VMIN and VTIME defined

*VMIN* is a character count ranging from 0 to 255 characters, and *VTIME* is time measured in 0.1 second intervals, (0 to 25.5 seconds). The value of "zero" is special to both of these parameters, and this suggests four combinations that we'll discuss below. In every case, the question is when a *read()* system call is satisfied, and this is our prototype call: int n = read(fd, buffer, nbytes);
Keep in mind that the tty driver maintains an input queue of bytes already read from the serial line and not passed to the user, so not every *read()* call waits for actual I/O - the read may very well be satisfied directly from the input queue. VMIN = 0 and VTIME = 0This is a completely non-blocking read - the call is satisfied immediately directly from the driver's input queue. If data are available, it's transferred to the caller's buffer up to nbytes and returned. Otherwise zero is immediately returned to indicate "no data". We'll note that this is "polling" of the serial port, and it's almost always a bad idea. If done repeatedly, it can consume enormous amounts of processor time and is highly inefficient. Don't use this mode unless you really, really know what you're doing.VMIN = 0 and VTIME > 0This is a pure timed read. If data are available in the input queue, it's transferred to the caller's buffer up to a maximum of nbytes, and returned immediately to the caller. Otherwise the driver blocks until data arrives, or when VTIME tenths expire from the start of the call. If the timer expires without data, zero is returned. A single byte is sufficient to satisfy this read call, but if more is available in the input queue, it's returned to the caller. Note that this is anoveralltimer, not anintercharacterone.VMIN > 0 and VTIME > 0Aread()is satisfied when either VMIN characters have been transferred to the caller's buffer, or when VTIME tenths expire between characters. Since this timer is not started until the first character arrives, this call can block indefinitely if the serial line is idle. This is the most common mode of operation, and we consider VTIME to be anintercharactertimeout, not anoverallone. This call should never return zero bytes read.VMIN > 0 and VTIME = 0This is a counted read that is satisfied only when at least VMIN characters have been transferred to the caller's buffer - there is no timing component involved. This read can be satisfied from the driver's input queue (where the call could return immediately), or by waiting for new data to arrive: in this respect the call could block indefinitely. We believe that it's undefined behavior if nbytes is less then VMIN.
\\
\\
\\
\\

\--------------------------------------\-

&nbsp;http://www.gnu.org/software/libc/manual/html_mono/libc.html\\

h4. 17.4.4 Input Modes

This section describes the terminal attribute flags that control fairly low-level aspects of input processing: handling of parity errors, break signals, flow control, and <RET> and <LFD> characters.

All of these flags are bits in the c_iflag member of the struct termios structure. The member is an integer, and you change flags using the operators &, \| and \^. Don't try to specify the entire value for c_iflag---instead, change only specific flags and leave the rest untouched (see Setting Modes). --- Macro: tcflag_t *INPCK*
If this bit is set, input parity checking is enabled. If it is not set, no checking at all is done for parity errors on input; the characters are simply passed through to the application.

Parity checking on input processing is independent of whether parity detection and generation on the underlying terminal hardware is enabled; see Control Modes. For example, you could clear the INPCK input mode flag and set the PARENB control mode flag to ignore parity errors on input, but still generate parity on output.

If this bit is set, what happens when a parity error is detected depends on whether the IGNPAR or PARMRK bits are set. If neither of these bits are set, a byte with a parity error is passed to the application as a '\0' character. --- Macro: tcflag_t *IGNPAR*
If this bit is set, any byte with a framing or parity error is ignored. This is only useful if INPCK is also set.
--- Macro: tcflag_t *PARMRK*
If this bit is set, input bytes with parity or framing errors are marked when passed to the program. This bit is meaningful only when INPCK is set and IGNPAR is not set.

The way erroneous bytes are marked is with two preceding bytes, 377 and 0. Thus, the program actually reads three bytes for one erroneous byte received from the terminal.

If a valid byte has the value 0377, and ISTRIP (see below) is not set, the program might confuse it with the prefix that marks a parity error. So a valid byte 0377 is passed to the program as two bytes, 0377 0377, in this case.
--- Macro: tcflag_t *ISTRIP*
If this bit is set, valid input bytes are stripped to seven bits; otherwise, all eight bits are available for programs to read.
--- Macro: tcflag_t *IGNBRK*
If this bit is set, break conditions are ignored.

A break condition is defined in the context of asynchronous serial data transmission as a series of zero-value bits longer than a single byte.
--- Macro: tcflag_t *BRKINT*
If this bit is set and IGNBRK is not set, a break condition clears the terminal input and output queues and raises a SIGINT signal for the foreground process group associated with the terminal.

If neither BRKINT nor IGNBRK are set, a break condition is passed to the application as a single '\0' character if PARMRK is not set, or otherwise as a three-character sequence '\377', '\0', '\0'.
--- Macro: tcflag_t *IGNCR*
If this bit is set, carriage return characters ('\r') are discarded on input. Discarding carriage return may be useful on terminals that send both carriage return and linefeed when you type the <RET> key.
--- Macro: tcflag_t *ICRNL*
If this bit is set and IGNCR is not set, carriage return characters ('\r') received as input are passed to the application as newline characters ('\n').
--- Macro: tcflag_t *INLCR*
If this bit is set, newline characters ('\n') received as input are passed to the application as carriage return characters ('\r').
--- Macro: tcflag_t *IXOFF*
If this bit is set, start/stop control on input is enabled. In other words, the computer sends STOP and START characters as necessary to prevent input from coming in faster than programs are reading it. The idea is that the actual terminal hardware that is generating the input data responds to a STOP character by suspending transmission, and to a START character by resuming transmission. See Start/Stop Characters.
--- Macro: tcflag_t *IXON*
If this bit is set, start/stop control on output is enabled. In other words, if the computer receives a STOP character, it suspends output until a START character is received. In this case, the STOP and START characters are never passed to the application program. If this bit is not set, then START and STOP can be read as ordinary characters. See Start/Stop Characters.
--- Macro: tcflag_t *IXANY*
If this bit is set, any input character restarts output when output has been suspended with the STOP character. Otherwise, only the START character restarts output.

This is a BSD extension; it exists only on BSD systems and the GNU system.
--- Macro: tcflag_t *IMAXBEL*
If this bit is set, then filling up the terminal input buffer sends a BEL character (code 007) to the terminal to ring the bell.

This is a BSD extension.
\\

h4. 17.4.5 Output Modes

This section describes the terminal flags and fields that control how output characters are translated and padded for display. All of these are contained in the c_oflag member of the struct&nbsp;termios structure.

The c_oflag member itself is an integer, and you change the flags and fields using the operators &, \|, and \^. Don't try to specify the entire value for c_oflag---instead, change only specific flags and leave the rest untouched (see Setting Modes). --- Macro: tcflag_t *OPOST*
If this bit is set, output data is processed in some unspecified way so that it is displayed appropriately on the terminal device. This typically includes mapping newline characters ('\n') onto carriage return and linefeed pairs.

If this bit isn't set, the characters are transmitted as-is.
The following three bits are BSD features, and they exist only BSD systems and the GNU system. They are effective only if OPOST is set. --- Macro: tcflag_t *ONLCR*
If this bit is set, convert the newline character on output into a pair of characters, carriage return followed by linefeed. --- Macro: tcflag_t *OXTABS*
If this bit is set, convert tab characters on output into the appropriate number of spaces to emulate a tab stop every eight columns.
--- Macro: tcflag_t *ONOEOT*
If this bit is set, discard C-d characters (code 004) on output. These characters cause many dial-up terminals to disconnect.
\\

h4. 17.4.6 Control Modes

This section describes the terminal flags and fields that control parameters usually associated with asynchronous serial data transmission. These flags may not make sense for other kinds of terminal ports (such as a network connection pseudo-terminal). All of these are contained in the c_cflag member of the struct termios structure.

The c_cflag member itself is an integer, and you change the flags and fields using the operators &, \|, and \^. Don't try to specify the entire value for c_cflag---instead, change only specific flags and leave the rest untouched (see Setting Modes). --- Macro: tcflag_t *CLOCAL*
If this bit is set, it indicates that the terminal is connected "locally" and that the modem status lines (such as carrier detect) should be ignored. On many systems if this bit is not set and you call open without the O_NONBLOCK flag set, open blocks until a modem connection is established.

If this bit is not set and a modem disconnect is detected, a SIGHUP signal is sent to the controlling process group for the terminal (if it has one). Normally, this causes the process to exit; see Signal Handling. Reading from the terminal after a disconnect causes an end-of-file condition, and writing causes an EIO error to be returned. The terminal device must be closed and reopened to clear the condition. --- Macro: tcflag_t *HUPCL*
If this bit is set, a modem disconnect is generated when all processes that have the terminal device open have either closed the file or exited.
--- Macro: tcflag_t *CREAD*
If this bit is set, input can be read from the terminal. Otherwise, input is discarded when it arrives.
--- Macro: tcflag_t *CSTOPB*
If this bit is set, two stop bits are used. Otherwise, only one stop bit is used.
--- Macro: tcflag_t *PARENB*
If this bit is set, generation and detection of a parity bit are enabled. See Input Modes, for information on how input parity errors are handled.

If this bit is not set, no parity bit is added to output characters, and input characters are not checked for correct parity.
--- Macro: tcflag_t *PARODD*
This bit is only useful if PARENB is set. If PARODD is set, odd parity is used, otherwise even parity is used.
The control mode flags also includes a field for the number of bits per character. You can use the CSIZE macro as a mask to extract the value, like this: settings.c_cflag & CSIZE. --- Macro: tcflag_t *CSIZE*
This is a mask for the number of bits per character. --- Macro: tcflag_t *CS5*
This specifies five bits per byte.
--- Macro: tcflag_t *CS6*
This specifies six bits per byte.
--- Macro: tcflag_t *CS7*
This specifies seven bits per byte.
--- Macro: tcflag_t *CS8*
This specifies eight bits per byte.
The following four bits are BSD extensions; this exist only on BSD systems and the GNU system. --- Macro: tcflag_t *CCTS_OFLOW*
If this bit is set, enable flow control of output based on the CTS wire (RS232 protocol). --- Macro: tcflag_t *CRTS_IFLOW*
If this bit is set, enable flow control of input based on the RTS wire (RS232 protocol).
--- Macro: tcflag_t *MDMBUF*
If this bit is set, enable carrier-based flow control of output.
--- Macro: tcflag_t *CIGNORE*
If this bit is set, it says to ignore the control modes and line speed values entirely. This is only meaningful in a call to tcsetattr.

The c_cflag member and the line speed values returned by cfgetispeed and cfgetospeed will be unaffected by the call. CIGNORE is useful if you want to set all the software modes in the other members, but leave the hardware details in c_cflag unchanged. (This is how the TCSASOFT flag to tcsettattr works.)

This bit is never set in the structure filled in by tcgetattr.
\\
\\

h4. 17.4.7 Local Modes

This section describes the flags for the c_lflag member of the struct termios structure. These flags generally control higher-level aspects of input processing than the input modes flags described in Input Modes, such as echoing, signals, and the choice of canonical or noncanonical input.

The c_lflag member itself is an integer, and you change the flags and fields using the operators &, \|, and \^. Don't try to specify the entire value for c_lflag---instead, change only specific flags and leave the rest untouched (see Setting Modes). --- Macro: tcflag_t *ICANON*
This bit, if set, enables canonical input processing mode. Otherwise, input is processed in noncanonical mode. See Canonical or Not. --- Macro: tcflag_t *ECHO*
If this bit is set, echoing of input characters back to the terminal is enabled.
--- Macro: tcflag_t *ECHOE*
If this bit is set, echoing indicates erasure of input with the ERASE character by erasing the last character in the current line from the screen. Otherwise, the character erased is re-echoed to show what has happened (suitable for a printing terminal).

This bit only controls the display behavior; the ICANON bit by itself controls actual recognition of the ERASE character and erasure of input, without which ECHOE is simply irrelevant.
--- Macro: tcflag_t *ECHOPRT*
This bit is like ECHOE, enables display of the ERASE character in a way that is geared to a hardcopy terminal. When you type the ERASE character, a `\' character is printed followed by the first character erased. Typing the ERASE character again just prints the next character erased. Then, the next time you type a normal character, a `/' character is printed before the character echoes.

This is a BSD extension, and exists only in BSD systems and the GNU system.
--- Macro: tcflag_t *ECHOK*
This bit enables special display of the KILL character by moving to a new line after echoing the KILL character normally. The behavior of ECHOKE (below) is nicer to look at.

If this bit is not set, the KILL character echoes just as it would if it were not the KILL character. Then it is up to the user to remember that the KILL character has erased the preceding input; there is no indication of this on the screen.

This bit only controls the display behavior; the ICANON bit by itself controls actual recognition of the KILL character and erasure of input, without which ECHOK is simply irrelevant.
--- Macro: tcflag_t *ECHOKE*
This bit is similar to ECHOK. It enables special display of the KILL character by erasing on the screen the entire line that has been killed. This is a BSD extension, and exists only in BSD systems and the GNU system.
--- Macro: tcflag_t *ECHONL*
If this bit is set and the ICANON bit is also set, then the newline ('\n') character is echoed even if the ECHO bit is not set.
--- Macro: tcflag_t *ECHOCTL*
If this bit is set and the ECHO bit is also set, echo control characters with `^' followed by the corresponding text character. Thus, control-A echoes as `^A'. This is usually the preferred mode for interactive input, because echoing a control character back to the terminal could have some undesired effect on the terminal.

This is a BSD extension, and exists only in BSD systems and the GNU system.
--- Macro: tcflag_t *ISIG*
This bit controls whether the INTR, QUIT, and SUSP characters are recognized. The functions associated with these characters are performed if and only if this bit is set. Being in canonical or noncanonical input mode has no affect on the interpretation of these characters.

You should use caution when disabling recognition of these characters. Programs that cannot be interrupted interactively are very user-unfriendly. If you clear this bit, your program should provide some alternate interface that allows the user to interactively send the signals associated with these characters, or to escape from the program. See Signal Characters.
--- Macro: tcflag_t *IEXTEN*
POSIX.1 gives IEXTEN implementation-defined meaning, so you cannot rely on this interpretation on all systems.

On BSD systems and the GNU system, it enables the LNEXT and DISCARD characters. See Other Special.
--- Macro: tcflag_t *NOFLSH*
Normally, the INTR, QUIT, and SUSP characters cause input and output queues for the terminal to be cleared. If this bit is set, the queues are not cleared.
--- Macro: tcflag_t *TOSTOP*
If this bit is set and the system supports job control, then SIGTTOU signals are generated by background processes that attempt to write to the terminal. See Access to the Terminal.
The following bits are BSD extensions; they exist only in BSD systems and the GNU system. --- Macro: tcflag_t *ALTWERASE*
This bit determines how far the WERASE character should erase. The WERASE character erases back to the beginning of a word; the question is, where do words begin?

If this bit is clear, then the beginning of a word is a nonwhitespace character following a whitespace character. If the bit is set, then the beginning of a word is an alphanumeric character or underscore following a character which is none of those.

See Editing Characters, for more information about the WERASE character. --- Macro: tcflag_t *FLUSHO*
This is the bit that toggles when the user types the DISCARD character. While this bit is set, all output is discarded. See Other Special.
--- Macro: tcflag_t *NOKERNINFO*
Setting this bit disables handling of the STATUS character. See Other Special.
--- Macro: tcflag_t *PENDIN*
If this bit is set, it indicates that there is a line of input that needs to be reprinted. Typing the REPRINT character sets this bit; the bit remains set until reprinting is finished. See Editing Characters.
\\
\\

h4. 17.4.10 Noncanonical Input

In noncanonical input mode, the special editing characters such as ERASE and KILL are ignored. The system facilities for the user to edit input are disabled in noncanonical mode, so that all input characters (unless they are special for signal or flow-control purposes) are passed to the application program exactly as typed. It is up to the application program to give the user ways to edit the input, if appropriate.

Noncanonical mode offers special parameters called MIN and TIME for controlling whether and how long to wait for input to be available. You can even use them to avoid ever waiting---to return immediately with whatever input is available, or with no input.

The MIN and TIME are stored in elements of the c_cc array, which is a member of the struct&nbsp;termios structure. Each element of this array has a particular role, and each element has a symbolic constant that stands for the index of that element. VMIN and VMAX are the names for the indices in the array of the MIN and TIME slots. --- Macro: int *VMIN*
This is the subscript for the MIN slot in the c_cc array. Thus, termios.c_cc[VMIN] is the value itself.

The MIN slot is only meaningful in noncanonical input mode; it specifies the minimum number of bytes that must be available in the input queue in order for read to return. --- Macro: int *VTIME*
This is the subscript for the TIME slot in the c_cc array. Thus, termios.c_cc[VTIME] is the value itself.

The TIME slot is only meaningful in noncanonical input mode; it specifies how long to wait for input before returning, in units of 0.1 seconds.
The MIN and TIME values interact to determine the criterion for when read should return; their precise meanings depend on which of them are nonzero. There are four possible cases:
* Both TIME and MIN are nonzero.

In this case, TIME specifies how long to wait after each input character to see if more input arrives. After the first character received, read keeps waiting until either MIN bytes have arrived in all, or TIME elapses with no further input.

read always blocks until the first character arrives, even if TIME elapses first. read can return more than MIN characters if more than MIN happen to be in the queue. Both MIN and TIME are zero. In this case, read always returns immediately with as many characters as are available in the queue, up to the number requested. If no input is immediately available, read returns a value of zero.
MIN is zero but TIME has a nonzero value. In this case, read waits for time TIME for input to become available; the availability of a single byte is enough to satisfy the read request and cause read to return. When it returns, it returns as many characters as are available, up to the number requested. If no input is available before the timer expires, read returns a value of zero.
TIME is zero but MIN has a nonzero value. In this case, read waits until at least MIN bytes are available in the queue. At that time, read returns as many characters as are available, up to the number requested. read can return more than MIN characters if more than MIN happen to be in the queue. What happens if MIN is 50 and you ask to read just 10 bytes? Normally, read waits until there are 50 bytes in the buffer (or, more generally, the wait condition described above is satisfied), and then reads 10 of them, leaving the other 40 buffered in the operating system for a subsequent call to read.

*Portability note:* On some systems, the MIN and TIME slots are actually the same as the EOF and EOL slots. This causes no serious problem because the MIN and TIME slots are used only in noncanonical input and the EOF and EOL slots are used only in canonical input, but it isn't very clean. The GNU library allocates separate slots for these uses. --- Function: void *cfmakeraw* (struct termios \*termios-p)
This function provides an easy way to set up \*termios-p for what has traditionally been called "raw mode" in BSD. This uses noncanonical input, and turns off most processing to give an unmodified channel to the terminal.

It does exactly this: termios-p->c_iflag &= \~(IGNBRK\|BRKINT\|PARMRK\|ISTRIP
| INLCR | IGNCR | ICRNL | IXON); \\
termios-p->c_oflag &= \~OPOST; \\
termios-p->c_lflag &= \~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); \\
termios-p->c_cflag &= \~(CSIZE | PARENB); \\
termios-p->c_cflag | = CS8; \\
&nbsp; \\
&nbsp; \\ |
\\

\--------------------------------------------------------------------------------\-
\\

h3. IOCTL's: Buffer count and flushing

FIONREAD int \*argpGetthenumber ofbytesintheinput buffer.TIOCINQ int \*argpSame as FIONREAD.TIOCOUTQ int \*argpGetthenumber ofbytesintheoutput buffer.TCFLSH intargEquivalenttotcflush(fd, arg).
Seetcflush(3)fortheargument values TCIFLUSH, TCOFLUSH, TCIOFLUSH.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3113441</id>
<property name="title"><![CDATA[Linux Port]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3178948</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 13:40:04.233</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-08 13:59:04.643</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20972086</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004849</id>
</element>
</collection>
<property name="version">17</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[carueda]]></property>
<property name="lastModificationDate">2013-05-15 17:25:47.403</property>
<property name="versionComment"><![CDATA[preliminary sket of json payload for the /goal request]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Comment" package="com.atlassian.confluence.pages">
<id name="id">855</id>
<property name="page" class="Page" package="com.atlassian.confluence.pages"><id name="id">753</id>
</property>
<property name="title"/><collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">852</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-12 08:49:04.123</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-12 08:49:04.123</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">589872</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">622639</id>
</element>
</collection>
<property name="version">14</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-03-19 13:20:33.960</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20972081</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004844</id>
</element>
</collection>
<property name="version">16</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-05-13 15:07:58.770</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11239508</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11272275</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[brent]]></property>
<property name="lastModificationDate">2010-01-20 22:40:03.437</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277178</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/Termios+Dev+Info]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-01 16:10:15.057</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-09 10:52:15.053</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277179</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/viewpageattachments.action?pageId=3113885]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-01 16:13:15.027</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-01 16:13:15.027</property>
</object>
<object class="Comment" package="com.atlassian.confluence.pages">
<id name="id">839</id>
<property name="page" class="Page" package="com.atlassian.confluence.pages"><id name="id">837</id>
</property>
<property name="title"/><collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">836</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-08 11:05:47.427</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-08 11:05:47.427</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">1246243</id>
<property name="destinationPageTitle"><![CDATA[~jgb]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 15:42:54.937</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 15:42:54.937</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10912344</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10945091</id>
</element>
</collection>
<property name="version">33</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-01-04 12:30:54.917</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277181</id>
<property name="viewCount">8</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/AUV+Linux+-+Driver+Port+and+Validation]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-02 11:25:15.097</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-24 10:01:15.063</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">3824</id>
<property name="destinationPageTitle"><![CDATA[2007-02-02 Minutes]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">869</id>
</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-13 08:35:49.407</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-02-13 08:35:49.407</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11239504</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11272271</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[alhayat]]></property>
<property name="lastModificationDate">2009-06-25 09:15:20.770</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277188</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/display/AUV/AUV+Linux+-+Debian+Setup,+Driver+Port+and+Validation]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-04 10:43:15.077</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-04 10:43:15.077</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11239506</id>
<property name="title"><![CDATA[TREX - installation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11272273</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 08:20:32.983</property>
<property name="lastModifierName"><![CDATA[brent]]></property>
<property name="lastModificationDate">2010-01-20 22:30:46.520</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912903</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20972056</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004819</id>
</element>
</collection>
<property name="version">14</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-05-13 14:38:19.383</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">589841</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">622609</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-02-05 11:17:34.830</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-03-06 08:26:23.257</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">589840</id>
<property name="title"><![CDATA[Minutes from 2007-03-19--Status meeting on AUV Deliberative Autonomy project]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">622608</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2007-03-19 12:52:33.537</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2007-03-19 12:52:33.537</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">589839</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20972057</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004820</id>
</element>
</collection>
<property name="version">15</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-05-13 14:42:43.663</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20972051</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004814</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[carueda]]></property>
<property name="lastModificationDate">2013-05-13 11:12:57.557</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20972054</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004817</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-05-13 14:37:31.140</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20972053</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004816</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-05-13 14:23:05.477</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">18841641</id>
<property name="fileName"><![CDATA[human-in-loop workflow.png]]></property>
<property name="contentType"><![CDATA[image/png]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:16:26.457</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:16:26.457</property>
<property name="fileSize">805620</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">1246244</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 15:42:54.937</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 15:42:54.937</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">18841640</id>
<property name="fileName"><![CDATA[HABs Automated  Human in the loop Algorithm Flow]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:10:15.977</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:10:15.977</property>
<property name="fileSize">133</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">1246245</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[AUV]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179834</id>
</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2007-07-16 15:42:54.937</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2007-07-16 15:42:54.937</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20972044</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004807</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[carueda]]></property>
<property name="lastModificationDate">2013-05-13 08:25:27.867</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">18841644</id>
<property name="fileName"><![CDATA[prediction workflow.png]]></property>
<property name="contentType"><![CDATA[image/png]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 09:01:51.457</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 09:01:51.457</property>
<property name="fileSize">439777</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">18841643</id>
<property name="fileName"><![CDATA[detection workflow.png]]></property>
<property name="contentType"><![CDATA[image/png]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:25:10.347</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:25:10.347</property>
<property name="fileSize">747035</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">18841642</id>
<property name="fileName"><![CDATA[projection workflow.png]]></property>
<property name="contentType"><![CDATA[image/png]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579613</id>
</property>
<property name="creatorName"><![CDATA[dcline]]></property>
<property name="creationDate">2012-01-25 01:16:50.467</property>
<property name="lastModifierName"><![CDATA[dcline]]></property>
<property name="lastModificationDate">2012-01-25 01:16:50.467</property>
<property name="fileSize">525992</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20972040</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004803</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[carueda]]></property>
<property name="lastModificationDate">2013-05-13 08:22:57.647</property>
<property name="versionComment"><![CDATA[Modify an existing goal]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">20972038</id>
<property name="title"><![CDATA[trex - ODSS web API]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">21004801</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2013-04-09 13:20:29.733</property>
<property name="lastModifierName"><![CDATA[fpy]]></property>
<property name="lastModificationDate">2013-04-12 16:26:16.850</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971526</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">10485893</id>
<property name="fileName"><![CDATA[TREX-changes.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355444</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2009-07-18 07:53:47.167</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2009-07-18 07:53:47.167</property>
<property name="fileSize">45999</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11239494</id>
<property name="title"><![CDATA[Autonomy Critical Events 2010]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11272261</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-01-20 10:10:26.367</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-01-20 10:14:44.837</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">11239490</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11239492</id>
<property name="title"><![CDATA[Autonomy Critical Events 2010]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11272259</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2010-01-20 10:10:26.367</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-01-20 10:10:26.367</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">11239490</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11239495</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11272262</id>
</element>
</collection>
<property name="version">35</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-01-20 10:00:55.163</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277175</id>
<property name="viewCount">5</property>
<property name="url"><![CDATA[http://oceana:8081/pages/editpage.action?pageId=3114460]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-01 11:52:15.020</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-03 09:06:15.027</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277174</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/createpage.action?spaceKey=AUV&title=Termios+Dev+Info&linkCreation=true&fromPageId=3113885]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-01 11:51:15.267</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-01 11:51:15.267</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11239489</id>
<property name="title"><![CDATA[Autonomy]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11272255</id>
</element>
</collection>
<property name="version">34</property>
<property name="creatorName"><![CDATA[fpy]]></property>
<property name="creationDate">2009-01-20 07:54:29.753</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2010-01-05 11:38:12.110</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">622638</id>
<property name="body"><![CDATA[Present: *Rich, Rob, Frederic, Conor and Kanna*
* A test AMC stack for the autonomy computer is now finally available. It is trex1.shore.mbari.org and has a standard Fedora/RH distribution. Quite a bit of testing with TREX and the EUROPA codebase has been accomplished over the last week since this came online.
* However due to the current RH gcc version, EUROPA code had be modified to compile with stricter gcc 4.1 which added quite a bit of work for Conor.
* The next steps in cloning this machine to go onboard the AUV's bubble would be:
** to test the process of building an image offline on a faster machine and dropping it into trex1 for testing.
** start performance tests to determine how TREX is doing. Current indications on the Mac appears to be that less that 2% of CPU time is being taken over by an optimized version of TREX, primarily for synchronization and database updates.
* We also have a QNX test environment in foobar.shore.mbari.org ready to go.
* There appears to be a problem in the socket code when testing on vehicle which appears to be timing related. Frederic who implemented the original code will be evaluating the code this week.
* There appears to be no trace of state publisher when using the vehicle. Rich and Conor are planning to investigate.
* An issue of vehicle dynamics and layered control came up to see what the vehicle would do when a requested Yo-Yo behavior is not doable because of dynamics
** Rob will investigate by checking the layered control code
* An associated issue (which will impact the autonomy task later) is how Frederic's clustering algorithm is to work with the behavior which needs to use it to initiate a sample. The latter is being written by Rob who will coordinate with Frederic to see how these two software modules need to work together.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">589871</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">5767169</id>
<property name="fileName"><![CDATA[AHRS300CAManual.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637442</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2008-07-14 09:55:12.277</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2008-07-14 09:55:12.277</property>
<property name="fileSize">191467</property>
<property name="comment"><![CDATA[Crossbow Motion and Attitude Sensing Unit]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637828</id>
<property name="title"><![CDATA[AUV Linux - Driver Port and Validation]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670578</id>
</element>
</collection>
<property name="version">83</property>
<property name="creatorName"><![CDATA[tm@mbari.org]]></property>
<property name="creationDate">2008-03-07 10:11:52.387</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-23 13:35:43.350</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113885</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830525</id>
<property name="body"><![CDATA[The auv-linux 'nal' utility provides 3 ways to test vehicle-shore Iridium communications:
# nal \-sim: simulated mode, runs CORBA store-and-fwd service but does not actually connect to a modem
# nal \-9601 \-dev device: connects to a NAL 9601 modem, as the one we have access to on shore
# nal \-dev device: connects to a A3LA modem with large SBDs as the one onboard the vehicle

Note that 'nal' output can be directed to a log file, e.g. to $AUV_LOG_DIR/latest/modem.log - see $AUV_HOME/sampleConfig/log4cxx.cfg

h1. Use the on-shore modem (9601)

After Corba has been correctly set you can run the command
{code}
> nal -9601 -dev tcp:iridium:2101 &
A3LA is now on TREX3 (located in building G)
> nal -dev /dev/ttyS0 &
{code}
Note port number 2101, which is the "raw" TCP socket port. You can also telnet to it for verifying that you can connect to it and send basics commands like AT; for telnet, specify port 2001.
{code}
> telnet iridium 2001
{code}
The serial number of this modem is

h1. Use the A3LA modem on the vehicle

after having started trex2 you will need to restart the modem from mvc-dmo1
{code}
mvc-dmo1> $AUV/bin/reset_a3la
{code}
On trex2 you can then start
{code}
> nal -dev /dev/ttyS1 &
{code}
or check if everything is OK through minicom
{code}

{code}
> minicom iridum]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797756</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">622607</id>
<property name="body"><![CDATA[Present: *Rich, Rob, Frederic, Conor and Kanna*

Rich and Conor have managed to work out substantial detail in the boot up handshake (see attachment to this note) on startup of AMC and VCS. Hardware for AMC stack operations and tests is quite delayed.&nbsp;
* Behavior addition/deletion working fine; this follows some design revisions based on transitions between behaviors. The AMC now sends across a number of behaviors based on its lookahead window.
** Consequently an "arbitrary" length of behavior instantiated on the stack in VCS defined by this lookahead
* The implication to startup are that the AMC now has an initialization sequence
** AMC will initialize the VCS once its all its reactors are fired up, especially the critical adaptor which communicates with the VCS.
** Then the AMC will wait till it gets an init msg. from AMC Agent on the VCS side (see attached image) with a STARTED:0 (id ==0) coming from the VCS
** An init.cfg startup file on the AMC side is equivalent to what the LC uses currently and will have\* MissionTimer\* DepthEnvelope\* SetPoint:ID=0\* Each behavior invocation comes with a unique and specific ID which is common to both AMC and VCS. This allows the ID to be used as a "handle" to manipulate the behavior running (or dormant) on the stack on the VCS side. In addition, it provides a unique identifier to the AMC when the state of the behavior changes on the VCS side. So when the Layered Control starts a behavior, it sends back a STARTED:ID message back to the AMC with this unique ID.
* One issue to resolve is read/write timing dealing with how quickly the VCS and AMC adaptors are able to send/receive messages. Conor and Rob are looking at timing issues on both ends.
* Conor will be building up the infrastructure for regression tests of the AMC allowing predefined mission scripts to be run with the simulator\* We are now quite delayed with respect to getting an AMC stack up and running; the initial target date of end of Feb has slipped substantially and concerns were expressed about the implication of this slip to getting the actual board on the AUV itself. Kanna will be coordinating with Hans to work out what is doable realistically for the latter.
\- ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">589839</id>
</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277228</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/dashboard.action]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-09 14:10:15.063</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-09 14:10:15.063</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277226</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/login.action]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114074</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-08 15:15:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-08 15:15:15.017</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3277227</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/login.action?os_destination=%2Fdisplay%2FAUV%2FTermios%2BDev%2BInfo]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114460</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-09 10:51:15.077</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-09 10:51:15.077</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">4849684</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[https://oceana.mbari.org/confluence/login.action?os_destination=%2Fdisplay%2FAUV%2FHome]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-06-03 13:14:15.030</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-03 13:14:15.030</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830436</id>
<property name="body"><![CDATA[*Present: Tom, Thom, Angel, Frederic, Kanna*
\\

Synopsis of issues from going to seawas summarized in an email note on the autonomy mailing list. It revolved around:\\
# Email gateway issues with binary sbd messages getting stripped.&nbsp;&nbsp;&nbsp; \[Hans/Pat/Frederic\]
# Shutdown of the autonomy computer. \[Hans\]
# Handshake between the NAL driver and T-REX. \[Tom/Frederic\]
# T-REX model bug to handle surfacing uncertainty. \[Frederic\]
# Matlab script bug. \[Frederic\]
# Continuing need to archive all sbd messages. \[Hans\]
# A more permanent way to ensure that the A3LA modem boots up correctly and to tackle issues with buffer garbage. \[Hans/Thom\]
# End-to-end testing of all the above. \[Thom/Kanna\] \\

Critical issues are #2 and #3. There is good understanding of what needs to be done for #3; the key issue is to work out a way to test the complete comm loop to and from shore as and when necessary.


\#2 is more mysterious. Talking with Duane Thompson in the pm after the meeting shows no clear understanding of what went wrong at sea. Autonomy computer boot error was found when AUV was actually deployed (and not when on the deck as thought originally). This makes it more serious. Fundamentally, errors w/ h/w started occurring&nbsp; when modem and autonomy computer was put on same power switch. As Frederic points out, last year a number of tests were carried out sending Iridium msgs. from sea.

For #3, the max msg. size is queried by T-REX and then msg. with that length is queued. We need to log max msg. length on the NAL driver side also for sanity. Problem Thu April 9th was that A3LA modem allows 1960 bytes/SBD msg. but hard-coded 1024 as byte length within NAL driver.

To test modem issues:

* &nbsp;&nbsp;&nbsp; test client pretending to be on the VCS

* &nbsp;&nbsp;&nbsp; from shore send email client (use Matlab code)

T-REX has a logging facility to log even the binary msg. But at sea (with modem connected) paradoxically this logging was turned off. This does not happen when on shore testing with Pseudo-Sim.

We do need a way to sync. when T-REX posts a message to the buffer and when the NAL driver actually sends out the msg. This is for validation on shore that what T-REX sent was actually communicated; conversely what the driver received, T-REX actually consumed as a goal.

There is a separate issue of when the modem is fired up, when there appears to be some initializing problem with junk in the buffer as found at sea. Tom believes this could be either an issue with sending binary data when the modem is expecting a text data or some configuration issue with expectation of what the data is likely to be and what is actually received by the modem. NAL A3LA has different user profiles. Could a confusion of the profile being the cause of the garbage when the modem fires up?

Worth investigating to buy an Iridium modem antenna for the roof of Bldg. B. Checked with Mark Chafee (who did the same for MOOS for Bldg G). To have a modem reception in Bldg B, need an antenna + modem and a RS 232 serial line from the modem to the lab. Approx cost ~ $1500.00]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797667</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">622702</id>
<property name="body"><![CDATA[Present: Frederic, Rob, Hans, Conor

Status
=========
* Rob gave feedback on some model related questions. We can use the rate values from the position vector for velocity and so will not need to extend the state publisher for such data
* Frederic noted that the cpu & memory tracking stats are integrated (AUT-6) so it is up to Conor to review and close.
* We briefly discussed the status of the CTD vehicle with Hans. It is going through an overhaul as the bubble had become dislodged and was floating around giving skewed attitude, heading reference data. Hans expects the vehicle to be back on the network late in the week and will let us know when it is ready. Conor will plan to try another integration test with the vehicle at that time.
* We did a brief walk-through of slides for Kanna's trip. Rob requested a copy of the ICRA workshop paper which Conor will forward.
* There was some discussion about how best to handle the idle requirements noted in AUT-3. Hans proposed a change in layered control that would support a more aggressive approach to abandon the mission if the AMC does not respond within a certain time frame and also to prevent termination of the mission. See AUT-3 for further details. Rob and Rich to follow up.
* We all agreed that a regression test suite would be used as a gate for promoting new builds to be sea-ready. The plan is to have all the tests mentioned in the sea-trial running in simulation anyway. In addition, we have been building up additional tests as part of a regression suite. Frederic is working on extending the Agent Logging to enable automation of these regression tests, capturing expected results.
* We also discussed the possibility of getting battery telemetry as part of the StatePacket from the state publisher. Hans has implmenetd accessors for this data but a new interface will need to be developed to expose it for publication. Conor will generate an issue for this.

I think that covers it. If I have missed anything or misrepresented anything, let me know.

Conor
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">589937</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">9076790</id>
<property name="fileName"><![CDATA[AUV-Linux tutorial.ppt]]></property>
<property name="contentType"><![CDATA[application/vnd.ms-powerpoint]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">763</id>
</property>
<property name="creatorName"><![CDATA[tm]]></property>
<property name="creationDate">2009-02-07 18:38:30.533</property>
<property name="lastModifierName"><![CDATA[tm]]></property>
<property name="lastModificationDate">2009-02-07 18:38:30.533</property>
<property name="fileSize">78848</property>
<property name="comment"><![CDATA[Tom O's tutorial slides on auv-linux]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">4849681</id>
<property name="viewCount">9</property>
<property name="url"><![CDATA[https://oceana.mbari.org/confluence/dashboard.action]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">751</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-06-03 13:10:15.057</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-03 14:19:15.020</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16154625</id>
<property name="fileName"><![CDATA[TREX-Comm-strategy.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912901</id>
</property>
<property name="creatorName"><![CDATA[kanna]]></property>
<property name="creationDate">2011-02-18 09:25:40.843</property>
<property name="lastModifierName"><![CDATA[kanna]]></property>
<property name="lastModificationDate">2011-02-18 09:26:16.217</property>
<property name="fileSize">85318</property>
<property name="comment"><![CDATA[T-REX & DSS Communication protocol 2011]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830466</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% cd home/dorado1/auv_autonomy*
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a x&nbsp;to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window (Term 2), login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# \[dorado1@trex2 \~\]$ *cd amc*
# \[dorado1@trex2 amc\]$ *. config.amc*
# Check the Iridium Modem
## *% minicom iridium*&nbsp;&nbsp; (dev/ttyS0 9600 8N1)
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, switch back to Term1 (mvc-dmo1 qnx)
### bash-2.00$ *cd $AUV/bin*
### bash-2.00$ *reset_a3la*&nbsp;&nbsp; (toggle modem power)&nbsp;
## Switch back to Term2 (trex2)&nbsp;minicom session&nbsp;
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In Term 3:
### \[dorado1@trex2 amc\]$ *nal \-dev /dev/ttyS0*
### should see startup, and then:&nbsp; &nbsp;\[AuvApplication\] run() - just sleeps by default
## In Term 2:
### \[dorado1@trex2 amc\]$ *cd $AUV_HOME/onboard/devices/iridium/tests*
### \[dorado1@trex2 tests\]$ *storefwdclient \-f test-a3la.sbd*
### Observe the nal driver output in Term3 and also examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# in Term3 Start the nal driver for the vsim test
## \[dorado1@trex2 amc\]$ *nohup nal \-dev /dev/ttyS0 &*
## \[dorado1@trex2 amc\]$ *tail \-f nohup.out*&nbsp; &nbsp; (check the nal driver is running - look for \[AuvApplication\] run() - just sleeps by default)
# Test the modem with a text file
## \[dorado1@trex2 tests\]$ *storefwdclient&nbsp;&nbsp;*&nbsp;&nbsp; (enter a meaningful&nbsp;test message and then wait)
## tail \-f nohup.out in Term3 or tail \-f modem.log
## If the storefwdclient fails to send the message, start storefwdclient again with no messages (enter, enter)
## A successful message from Term2 (storefwdclient looks like:

{code}
"StoreAndForward.Downlink succeeded" payload: This is Thom running VSIM at 2:45 on 2 May 2009
Got StoreAndForward event: ConnectModem complete
Done.
terminate called after throwing an instance of 'omni_thread_fatal'
{code}
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# In Term2 (trex2), make sure the config&nbsp;file is correct for vsim&nbsp;
## % \[dorado1@trex2 tests\]$ *cd \~/amc/missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In Term1&nbsp;(mvc-dmo1), startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# In Term2 Move back to the T-REX stack to fire up the T-REX client
# \[dorado1@trex2 missions\]$ *nohup ../exec/amc_o_rt front.cfg&nbsp;&nbsp;&*&nbsp;&nbsp;&nbsp; (For the time being, mission file is front.cfg).&nbsp;&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
## in Term1, bash-2.00$ *ps \-a*

{code}
  PID  PGRP SID PRI STATE   BLK  SIZE COMMAND
   17     7   0 24f  RECV     0  632K (//9/bin/Dev32)
   22     7   0 10r  RECV     0  216K (//9/bin/Pipe)
   24     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   25     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   26     7   0 20r  RECV     0  300K (//9/bin/Dev.ctiser)
   27     7   0 20r  RECV     0  440K (//9/bin/Dev32.ansi)
   31     7   0  9o  RECV     0  148K (//9/bin/Dev32.par)
   32    17   0 20r  RECV     0  316K (//9/bin/Dev32.pty)
   36     4   0 10o  RECV     0 18272K (//9/bin/Fsys.floppy)
   37     7   0 10o  RECV     0   56K (//9/bin/Iso9660fsys)
   40     7   0 20o  RECV     0   20K (//9/bin/nameloc)
   41     7   0 20o REPLY     0   16K (//9/bin/nameloc)
   43     7   0 10o  RECV     0  120K (//9/bin/Dosfsys)
   45     7   0 23r  RECV     0  336K (//9/bin/Net)
   47     7   0 20r  RECV     0  348K (//9/bin/Net.ether82557)
   48     7   0 20r  RECV     0   56K (//9/bin/Net.ether1000)
   87     7   0 10o  WAIT    -1   28K (//9/bin/tinit)
   90     7   0 10o  RECV     0   20K (//9/bin/tinit)
   91     7   0 14o  RECV     0   68K (//9/bin/Mqueue)
28928 28123   2 10o REPLY     0   36K supervisor -plan AmcPlan.cfg -dyno
28942 28123   2 10o REPLY    22   16K tee -i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
28951 28123   2 10o  RECV     0   28K eventLogServer
28953 28123   2 18o  RECV     0   64K workSite
22812 28123   2 14o  RECV     0   72K vehicleConfigurationServer
28959 28123   2 10o  RECV     0   32K externalCommsServer
28963 28123   2 14o  RECV     0  112K navigationServer
22820 28123   2 10o  RECV 28983   32K externalComms
28968 28123   2 10o  RECV     0  140K layeredControl erver -dyno -plan AmcPlan.cfg -abort
28970 28123   2 18o  RECV     0  132K navigation
28972 28123   2 14o  RECV     0   56K dynamicControlServer
28973 28123   2 14o  RECV     0  176K layeredControl -dyno -plan AmcPlan.cfg -abort abortMplan.cfg
28985 28123   2 14o  RECV     0  148K simulator
22331 28123   2 14o  RECV     0   28K simTailCone
22333 28123   2 18o  RECV     0   32K simAhrs
28991 28123   2 18o  RECV     0   72K simGps
28993 28123   2 18o  RECV     0   28K simDepthSensor
 2375 28123   2 10o  RECV     0   60K seabirdServer -n CtdIFServer -dev tcp:sci1-dmo1:10001
22857 28123   2 10o  RECV     0   60K seabirdServer -n ctdDriver2 -dev tcp:sci1-dmo1:10002
29003 28123   2 10o  RECV 29009   92K seabirdDriver -n CtdIFServer -serial tcp:sci1-dmo1:10001,9600,8,n,1
29004 28123   2 10o  RECV 29010   92K seabirdDriver -n ctdDriver2 -serial tcp:sci1-dmo1:10002,9600,8,n,1
22862 28123   2 18o  RECV     0   48K simDvl
29011 28123   2 10o  RECV     0   48K dropWeightServer -dev /dev/ser13
22869 28123   2 10o  RECV     0   64K statePublisher
22872 28123   2 10o REPLY    17   52K dropWeight -serial /dev/ser13,9600,8,n,1
28125 28123   2 10o  RECV 28926   64K ./vcsServer -v
[1]+  Exit 221                nohup ./vcsServer -v
{code}

h1. Hardware-in-the-loop Test

Open 4 terminal sessions

h5. Term1:&nbsp;

*telnet mvc-dmo1*

bash-2.00$ *cd /home/dorado1/auv_autonomy*

bash-2.00$ *. configSrc*

bash-2.00$ *qtalk \-m /dev/ser13*
*\!a<enter>*&nbsp; (look for gulperFB=1), then *ctrl-a, x*
\\
\\

h5. Term2:&nbsp;&nbsp;

*ping trex2* (waiting for the boot)&nbsp;

*ssh trex2*

\[dorado1@trex2 dorado1\]$ *cd amc*&nbsp; (/home/dorado1/amc)

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 amc\]$ *cd missions*

\[dorado1@trex2 missions\]$ *cat vcs.cfg*
{code}
<!-- Configuration file used byt VCS/CORBA adapter and others to --
  -- declare the timelines which interface with the vehicle and other --
  -- parameters.
     Note : the remoteName should preferably be  by default (at least --
  -- on svn) mvc-dmo1 other attributes of the main tag ashould _not_ --
  -- be changed ! (except you know exactly what you are doing)
-->
<Config log="1" localPort="8002" remoteName="mvc-dmo1" remotePort="8004" missionStart="init.cfg">
        <Timeline name="vehicleState"  command="0" />
        <Timeline name="setpoint" class="Setpoint" command="1" />
        <Timeline name="descend"  class="Descend" command="1" />
        <Timeline name="ascend"   class="Ascend" command="1" />
        <Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
        <Timeline name="getgps" class="GPS" command="1" />
        <Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
\[dorado1@trex2 missions\]$
\\
\[dorado1@trex2 missions\]$ *cat amc.cfg*
{code}
<!-- This file is the basic configuration for:
     - connecting to the auv (QNX or Linux)
     - and send/receive messages through the iridium modem.
     As fo now the connect is set to 1 by default as this file should
     be used on "real" conditions.
-->
<Config>
        <!- Use this component when running onboard ->
        <TeleoReactor name="vcs" component="VCSAdapter"/>         <TeleoReactor name="exec" component="DeliberativeReactor"
                lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>
        <TeleoReactor name="downlink" component="Downlink" lookAhead="1" latency="0" log="1" connect="1" config="downlink.cfg"/>
        <!- Skipper has 10 Hour lookahead. ->
        <TeleoReactor name="skipper" component="DeliberativeReactor"
                lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg"/>
</Config>
{code}

h5.


h5. Term3:

*slogin trex2*&nbsp;&nbsp;&nbsp; (or ssh trex2)

\[dorado1@trex2 amc\]$ *cd amc*

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 \~\]$ *minicom iridium*
Then type "*AT*" and look for "OK" (no quotes)

If the vehicle has just been powered up, there is no response so you'll need to enable the A3LA modem power

h5. Term1:

Switch back to Term1 (QNX mvc-dmo1) to toggle the modem power

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *reset_a3la*

h5. Term3:&nbsp;

Switch back to Term3 where minicom is running and type "AT", sometimes it says ERROR, just type AT again

Here's a sample of the minicom session:
{code}
Welcome to minicom 2.1
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jul 26 2006, 06:38:09.
Press CTRL-A Z for help on special keys
ERROR
OK
+SBDI: 0, 1602, 0, 0, 0, 0
OK
{code}
type ctrl-a, then x to leave minicom
\\

h5. Term4 (trex2):

\[dorado1@trex2 \~\]$ *cd amc*
\[dorado1@trex2 amc\]$ *. config.amc*
\[dorado1@trex2 amc\]$ *cd $AUV_HOME/onboard/bin*
\[dorado1@trex2 auv-linux\]$ *pwd*
/home/dorado1/auv-linux/onboard/bin

\[dorado1@trex2 bin\]$ *nohup ./nal \-dev /dev/ttyS0 &*
{code}
[1] 1968
[dorado1@trex2 bin]$ nohup: appending output to `nohup.out'
{code}
\[dorado1@trex2 bin\]$ *tail \-f nohup.out*
\\
{code}
terminate called after throwing an instance of 'omni_thread_fatal'
Reading log4cxx configuration file "/home/dorado1/auv-linux/onboard//sampleConfig/log4cxx.cfg"
14:20:15.598 DEBUG [NALDriver] read +GCMI response
14:20:15.623 INFO [NALDriver] manufacturer:
OK
14:20:15.623 INFO [NALDriver] initialize() complete
IOR:010000001a00000049444c3a6175762f53746f7265416e6446776449463a312e300<snip>000
14:20:15.643 DEBUG [NALApp] Leaving NALApp.initialize()
14:20:15.644 INFO [AuvApplication] run() - just sleeps by default
{code}
Then tail the modem.log

\[dorado1@trex2 bin\]$ *cd $AUV_LOG_DIR*
\[dorado1@trex2 logs\]$ *tail \-f modem.log*

\\
&nbsp;

h5. In Term3:

&nbsp;\[dorado1@trex2 bin\]$ *storefwdclient*&nbsp;&nbsp;&nbsp; (type in a descriptive test string like "This is the vehicle on the zephyr hardware in the loop test by Thom")

Check to see that the email arrived, \[auvsbd\] SBD Msg From Unit: 300003000227440, with an \*.sbd as attachment.&nbsp;&nbsp; Open the attachment with a text editor to verify the message
\\

h5. In Term1:

bash-2.00$ *cd $AUV_CONFIG_DIR*&nbsp;

bash-2.00$ *cp devices.test.cfg devices.cfg*

h5. In Term2 (trex2 in missions dir)

Verify the settings in init.cfg

\[dorado1@trex2 missions\]$ *pwd*
/home/dorado1/amc/missions
\[dorado1@trex2 missions\]$ *cat init.cfg*
\\
{code}
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
{code}

h5. In Term1 (mvc-dmo1):

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *nohup ./vcsServer \-v &*
\[1\] 8344
bash-2.00$ *ps \-a*
{code}
 8346  8344   2 10o REPLY    82   64K ./vcsServer -v
[1]+  Exit 154                nohup ./vcsServer -v
bash-2.00$ cd $AUV_LOG_DIR
bash-2.00$ ls
2009.117.00/              2009.119.00/              latest@
2009.118.00/              2009.119.01/              nov.13th.vcs.tar
2009.118.05/              CVS/                      testLogs/
2009.118.06/              VcsServer.log.0
{code}
bash-2.00$ *cd ../logs*

bash-2.00$ *tail \-f VcsServer.log.0*

h5. In Term2:

\[dorado1@trex2 missions\]$ *nohup ../exec/amc_o_rt msg.timing.1.cfg &*
\[dorado1@trex2 missions\]$ *cd ../log/*
\[dorado1@trex2 log\]$ *tail \-f latest/TREX.log*
\\

bash-2.00$ *tail \-f VcsServer.log.0*
\\
{code}
62940673.813,
######################### Wed Apr 29 21:31:13 2009
62940673.943, VcsServer -- configuration:
        Port = 8004 ms
62940673.943, VcsServer: Socket created on fd 6
62940673.993, VcsServer - running
62940853.801, VcsServer: Connected to client on 134.89.32.39
62940853.801, VcsServer[t=0, delta=0]: Grabbing data
62940853.981, VcsServer:initMission:
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
}
62940854.331, VcsServer::initMission() - starting supervisor
62940855.371, VcsServer::openLC() - created IF with LayeredControl
62940855.671, VcsServer[t=1.86987, delta=1.86987]: Grabbing data
62940891.739, VcsServer: ack - STARTED:0
62940952.044, VcsServer::handleLCMessages() - AMC mission started
62940952.044, VcsServer: ack - FINISHED:0
62941028.259, VcsServer: ack - FINISHED:5167
62941033.779, VcsServer: handling insertBehavior
62941034.039, VcsServer: ack - STARTED:6226
62941037.969, VcsServer[t=184.167, delta=0.43997]: Grabbing data
<snip> 
62941045.198, VcsServer: ack - FINISHED:6226
62941052.248, VcsServer: No ping received for 7 of up to 12 seconds
62941053.058, VcsServer: No ping received for 8 of up to 12 seconds
62941054.137, VcsServer: No ping received for 9 of up to 12 seconds
62941055.217, VcsServer: No ping received for 10 of up to 12 seconds
62941055.697, VcsServer::recvString - received 0 bytes when expected 4 (uint32_t) !!!
62941055.697, Received a NULL message : should no happen.
{code}\\
\\
\\
\\
\\
\\
\\

bash-2.00$ ps \-a
{code}
  PID  PGRP SID PRI STATE   BLK  SIZE COMMAND
 8707  8344   2 14o  RECV     0   60K dynamicControlServer
   17     7   0 24f  RECV     0  632K (//9/bin/Dev32)
 8726  8344   2 14o  RECV     0  176K layeredControl -dyno -plan AmcPlan.cfg -abort abortMplan.cfg
   23     7   0 10r  RECV     0   32K (//9/bin/Pipe)
   24     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   25     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   26     7   0 20r  RECV     0  300K (//9/bin/Dev.ctiser)
   27     7   0 20r  RECV     0  440K (//9/bin/Dev32.ansi)
   31     7   0  9o  RECV     0  148K (//9/bin/Dev32.par)
   32    17   0 20r  RECV     0  316K (//9/bin/Dev32.pty)
   36     4   0 10o  RECV     0 18272K (//9/bin/Fsys.floppy)
   37     7   0 10o  RECV     0   56K (//9/bin/Iso9660fsys)
   40     7   0 20o  RECV     0   20K (//9/bin/nameloc)
   41     7   0 20o REPLY     0   16K (//9/bin/nameloc)
   43     7   0 10o  RECV     0  120K (//9/bin/Dosfsys)
   45     7   0 23r  RECV     0  336K (//9/bin/Net)
   47     7   0 20r  RECV     0  348K (//9/bin/Net.ether82557)
   48     7   0 20r  RECV     0   56K (//9/bin/Net.ether1000)
 8754  8344   2 18o  RECV     0  132K navigation
 8756  8344   2 14o  RECV     0   64K newTailConeServer -dev /dev/ser3
 8758  8344   2 18o  RECV     0   60K m3dmgx1Server -dev /dev/ser12 -useForNav
 8761  8344   2 19o REPLY     0   96K newTailConeDriver -dev /dev/ser3,9600,8,n,1
 8762  8344   2 18o  RECV     0   48K gpsServer -r ashtech -dev /dev/ser7
 8766  8344   2 10o  RECV     0   88K m3dmgx1 -serial /dev/ser12,9600,8,n,1
 8767  8344   2 10o  RECV     0   60K parosciServer -dev /dev/ser5
 8772  8344   2 10o  RECV  8791   60K ashtechDriver -serial /dev/ser7,9600,8,n,1
 8773  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver -dev tcp:sci1-dmo1:10001
 8774  8344   2 19o REPLY    17   84K parosci -serial /dev/ser5,9600,8,n,1
 8778  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver2 -dev tcp:sci1-dmo1:10002
 8779  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver -serial tcp:sci1-dmo1:10001,9600,8,n,1
 8782  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver2 -serial tcp:sci1-dmo1:10002,9600,8,n,1
 8793  8344   2 10o  RECV     0   52K bluefinBattServer -dev /dev/ser10
 8796  8344   2 18o  RECV     0   52K dvlServer -dev /dev/ser6
   94     7   0 10o  WAIT    -1   28K (//9/bin/tinit)
 8799  8344   2 10o REPLY     0   68K bluefinBattDriver -dev /dev/ser10
   98     7   0 10o  RECV     0   20K (//9/bin/tinit)
   99     7   0 14o  RECV     0   68K (//9/bin/Mqueue)
 8804  8344   2 10o REPLY    17   80K dvl -serial /dev/ser6,9600,8,n,1
 8806  8344   2 10o  RECV     0   48K dropWeightServer -dev /dev/ser13
 8814  8344   2 10o  RECV     0   64K statePublisher
 8818  8344   2 10o READY         52K dropWeight -serial /dev/ser13,9600,8,n,1
 8346  8344   2 10o REPLY     0   64K ./vcsServer -v
 8658  8344   2 10o REPLY     0   36K supervisor -plan AmcPlan.cfg -dyno
 8667  8344   2 10o REPLY    23   16K tee -i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
 8675  8344   2 10o  RECV     0   28K eventLogServer
 8677  8344   2 18o  RECV     0   64K workSite
 8679  8344   2 18o  RECV     0   72K vehicleConfigurationServer
 8682  8344   2 10o  RECV     0   32K externalCommsServer
 8686  8344   2 14o  RECV     0  112K navigationServer
 8688  8344   2 10o  RECV  8760   32K externalComms
 8690  8344   2 10o  RECV     0  140K layeredControl erver -dyno -plan AmcPlan.cfg -abort
{code}
bash-2.00$ *slay supervisor*
bash-2.00$ *ps \-a&nbsp;&nbsp;*

h5. In Term2 (trex2):

Verify that amc_o_rt has terminated

\[dorado1@trex2 log\]$ *ps \-elf \| grep amc*
0 R dorado1&nbsp;&nbsp; 2040&nbsp; 1761&nbsp; 0&nbsp; 78&nbsp;&nbsp; 0 \-&nbsp;&nbsp; 975 \-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14:45 pts/0&nbsp;&nbsp;&nbsp; 00:00:00 grep amc

Verify that TREX did not have a problem (relax in the log is BAD)
\\
\[dorado1@trex2 log\]$ *grep relax latest/TREX.log*
\[dorado1@trex2 log\]$
\\

Before turning off the power to the&nbsp;vehicle,&nbsp;shutdown the OS on TREX2 and mvc-dmo1 to prep for power off

\[dorado1@trex2 logs\]$ su root
Password:
\[root@trex2 logs\]# /sbin/shutdown now

Broadcast message from root (pts/2) (Wed Apr 29 14:48:07 2009):

The system is going down to maintenance mode NOW\!
\[root@trex2 logs\]#

In Term1:

bash-2.00$ su root
bash-2.00# shutdown \-b

h4. Testing goal posting through iridium

starts the mission msg.timing.1.cfg

\[dorado1@trex2 missions\]$ *../exec/amc_o_rt msg.timing.1.cfg*

look for the creation of the pipe on TREX.log

\[dorado1@trex2 missions\]$ *tail \-f ../log/latest/TREX.log \| grep listening*
\[downlink\] listening to "msg.timing.1.downlink" (fid=<a number>)

The pipe msg.timing.1.downlink (naming convention is <name of the mission>.downlink) has been created in the directory where TREX has been started (in this case \~/amc/missions). You can then send the goal through this pipe. Create a file goal.sbd with following content :
{code}
<Goal on="front" predicate="Front.Info">
 <Assert name="depth"><value type="float" name="17"/></Assert>
 <Assert name="temperature"><value type="float" name="1.520000e+01"/></Assert>
 <Assert name="mapDepth"><value type="float" name="30"/></Assert>
</Goal>
{code}
And send it in the pipe :
\[dorado1@trex2 missions\] \*cat goal.sbd > msg.timing.1.cfg{note}
this has to be done relatively quickly to avoid to miss the only communication window in msg.timing.1{note}
then check that the goal has been correctly collected and dispatched before the end of the mission. You should see a message similar to this in TREX.log

\[downlink\]\[<number>\]Dispatching Front.Info(<a number>)
\[exec\]\[<number>\]Request received: ON front REQ Front.Info(<a number>)...]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797697</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">622668</id>
<property name="body"><![CDATA[Present: *Rob, Frederic, Conor, Tom and Kanna*
* &nbsp;Conor discussed the state of the VCS/AMC integration while working with Rich last week:
** the major bug tackled was that VCS was not flushing messages in the queue when the VCS is restarted. The consequence was that previous messages in the dispatch stack of the layered control were still being sent off for execution.
** Two ways to mitigate:
**# when the AMC fires up, it will await an explicit initialization coming from the VCS
**# In addition Rich will implement a mechanism to ensure that on a replan action, the control stack is reinitialize
** A number of short runs with a lot of inserts/deletes done to test the AMC/VCS handshaking and messages exchange. All sans above, seems to be well.
* Tom raised the question of a test plan for VCS with all the changes in layered control. His suggestion was to run, at the very least, a leak checker.
** Frederic has some simple graphing tool which shows memory usage over time and can provide a simple way to see if memory is being hogged without Free's taking place. He has used this on QNX to ensure his clustering code is kosher.

** Rob suggested checking with Hans for 'spy' which appears to be equivalent to 'top'. We need to check with Hans.
* Socket related issues from last week were fixed; it appeared to be a timing issue with the read buffer getting read at a faster rate.
* We will use JIRA for any issue tracking (see [http://oceana:8082/browse/AUT])
* We all had a lively discussion with Rob about a related if not directly connected to this project, of how the Gulper behavior will work. Rob's block diagram of the process is as attached to this note.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">589901</id>
</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">4882486</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[EDITSPACE]]></property>
<property name="group"><![CDATA[Onsite Distribution List]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2008-06-03 12:45:31.183</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2008-06-03 12:45:31.183</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">4882485</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[COMMENT]]></property>
<property name="group"><![CDATA[Onsite Distribution List]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2008-06-03 12:45:31.183</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2008-06-03 12:45:31.183</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">4882488</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[EDITBLOG]]></property>
<property name="group"><![CDATA[Onsite Distribution List]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2008-06-03 12:45:31.183</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2008-06-03 12:45:31.183</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">4882487</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[EXPORTSPACE]]></property>
<property name="group"><![CDATA[Onsite Distribution List]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2008-06-03 12:45:31.183</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2008-06-03 12:45:31.183</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">4882489</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">20</id>
</property>
<property name="type"><![CDATA[EXPORTPAGE]]></property>
<property name="group"><![CDATA[Onsite Distribution List]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2008-06-03 12:45:31.187</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2008-06-03 12:45:31.187</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">950280</id>
<property name="body"><![CDATA[h2. About Subversion

SVN (Subversion) is a tool used by many software developers to manage changes within their source code tree. SVN provides the means to store not only the current version of a piece of source code, but a record of all changes (and who made those changes) that have occurred to that source code. Use of SVN is particularly common on projects with multiple developers, since SVN ensures changes made by one developer are not accidentally removed when another developer posts their changes to the source tree.

In order to access a Subversion repository, you must install a special piece of software called a Subversion client. Subversion clients are available for most any operating system. Information about the official subversion client can be found at [http://subversion.tigris.org/]. Excellent documentation on using Subversion can be found at [http://svnbook.red-bean.com/]

h2. Subversion Access

The AUV Autonomy project's Subversion repository can be checked out through SVN with the following instruction set:

{{svn co ssh+svn://kahuna.shore.mbari.org/svn/repos/TREX TREX}}

{warning:title=Warning}This is a generic Subversion checkout command which will pull all modules, tags and/or branches of the project. In most cases, you will want to add '/trunk' to the SVN URL above to check out only trunk (main development line).{warning}
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">917512</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">950281</id>
<property name="body"><![CDATA[h2. About CVS

The main AUV system code is stored in CVS. Details about using and accessing the AUV CVS repository can be found [here|^AUV Software Procedures Document.doc]

h2. About Subversion

SVN (Subversion) is a tool used by many software developers to manage changes within their source code tree. SVN provides the means to store not only the current version of a piece of source code, but a record of all changes (and who made those changes) that have occurred to that source code. Use of SVN is particularly common on projects with multiple developers, since SVN ensures changes made by one developer are not accidentally removed when another developer posts their changes to the source tree.

In order to access a Subversion repository, you must install a special piece of software called a Subversion client. Subversion clients are available for most any operating system. Information about the official subversion client can be found at [http://subversion.tigris.org/]. Excellent documentation on using Subversion can be found at [http://svnbook.red-bean.com/]

h2. Subversion Access

The AUV Autonomy project's Subversion repository can be checked out through SVN with the following instruction set:

{{svn co ssh+svn://kahuna.shore.mbari.org/svn/repos/TREX TREX}}

{warning:title=Warning}This is a generic Subversion checkout command which will pull all modules, tags and/or branches of the project. In most cases, you will want to add '/trunk' to the SVN URL above to check out only trunk (main development line).{warning}
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">917513</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">13959226</id>
<property name="body"><![CDATA[1. Add sliders for replaying data from the past.
2. Figure out a way to get the web server to be publicly available (perhaps in the DMZ?).]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926462</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">13959225</id>
<property name="body"><![CDATA[]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926460</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">13959220</id>
<property name="body"><![CDATA[h1. AUV Wiki


h2. Development

[Linux Port]
[Source Code]
[AUV Linux - Driver Port and Validation]
[AUV Build and Test Server Setup]\\
[Autonomy]

h2. Meeting Minutes

[2009-04-13 Autonomy project|https://oceana.mbari.org/confluence/display/AUV/2009-04-13+Autonomy+project]

[2007-03-26 Autonomy project|Minutes from 2007-03-26--Status meeting on AUV Deliberative Autonomy project]
[2007-03-19 Autonomy project|Minutes from 2007-03-19--Status meeting on AUV Deliberative Autonomy project]
[2007-03-05 Autonomy project|Minutes from 2007-03-05--Status meeting on AUV Deliberative Autonomy project]
[2007-02-20 Autonomy project|Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]

h2. Miscellaneous

[MATLAB Tools]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">13926455</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">14221465</id>
<property name="body"><![CDATA[{section}
{column:width=75%}
[Lessons Learned from June 29th-30th Drifter following Experiment|AUV:Lessons Learned Drifter Following Expt June'10]
{column}
{column:width=25%}
{panel:title=Developer Resources}
# Client Frameworks
## Google Web Toolkit
### [GWT and HTML5 - Google I/O|http://www.java-tv.com/2010/08/11/gwt-html5-can-do-what/]
# Security
## [Securing GWT Clients|http://java.dzone.com/articles/securing-gwt-client-acris]
# Testing
## [GWT Testing Best Practices|http://www.softdevtube.com/2010/08/09/gwt-testing-best-practices/]
## [Testing Web Clients (Selenium)|http://weblogs.java.net/blog/johnsmart/archive/2010/08/09/selenium-2web-driver-land-where-page-objects-are-king]
{panel}
{column}
{section}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">14188699</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9831386</id>
<property name="body"><![CDATA[The auv-linux 'nal' utility provides 3 ways to test vehicle-shore Iridium communications:
# nal \-sim: simulated mode, runs CORBA store-and-fwd service but does not actually connect to  a modem
# nal \-9601 \-dev device: connects to a NAL 9601 modem, as the one we have access to on shore
# nal \-dev device: connects to a A3LA modem with large SBDs as the one onboard the vehicle

Note that 'nal' output can be directed to a log file, e.g. to $AUV_LOG_DIR/latest/modem.log - see $AUV_HOME/sampleConfig/log4cxx.cfg

h1. Use the on-shore modem (9601)

After Corba has been correctly set you can run the command
{code}
> nal -9601 -dev tcp:iridium:2101 &
{code}
Note port number 2101, which is the "raw" TCP socket port. You can also telnet to it for verifying that you can connect to it and send basics commands like AT; for telnet, specify port 2001.
{code}
> telnet iridium 2001
{code}
The serial number of this modem is

h1. Use the A3LA modem on the vehicle

after having started trex2 you will need to restart the modem from mvc-dmo1
{code}
mvc-dmo1> $AUV/bin/reset_a3la
{code}
On trex2 you can then start
{code}
> nal -dev /dev/ttyS1 &
{code}
or check if everything is OK through minicom
{code}
> minicom iridum]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798646</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9831388</id>
<property name="body"><![CDATA[The auv-linux 'nal' utility provides 3 ways to test vehicle-shore Iridium communications:
# nal \-sim: simulated mode, runs CORBA store-and-fwd service but does not actually connect to a modem
# nal \-9601 \-dev device: connects to a NAL 9601 modem, as the one we have access to on shore
# nal \-dev device: connects to a A3LA modem with large SBDs as the one onboard the vehicle

Note that 'nal' output can be directed to a log file, e.g. to $AUV_LOG_DIR/latest/modem.log - see $AUV_HOME/sampleConfig/log4cxx.cfg

h1. Use the on-shore modem (9601)

After Corba has been correctly set you can run the command
{code}
> nal -9601 -dev tcp:iridium:2101 &
A3LA is now on TREX3 (located in building G)
> nal -dev /dev/ttyS0 &> nal -dev
{code}
Note port number 2101, which is the "raw" TCP socket port. You can also telnet to it for verifying that you can connect to it and send basics commands like AT; for telnet, specify port 2001.
{code}
> telnet iridium 2001
{code}
The serial number of this modem is

h1. Use the A3LA modem on the vehicle

after having started trex2 you will need to restart the modem from mvc-dmo1
{code}
mvc-dmo1> $AUV/bin/reset_a3la
{code}
On trex2 you can then start
{code}
> nal -dev /dev/ttyS1 &
{code}
or check if everything is OK through minicom
{code}

{code}
> minicom iridum]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798648</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">13697029</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
* PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h2. Building our old version of Europa/Plasma

&nbsp;To apply the patch and build Europa/Plasma with GCC 4.3:
{code:none}
% cd $PLASMA_HOME
% patch -p1 < plasma-gcc4.3.patch  #i.e. the attached patch file
% jam && jam
{code}
\\

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
To compile TREX libraries, first download the Boost C+\+ library ([http://www.boost.org/]) and install it following the instructions outlined in the site.  Then compile TREX in a similar manner as Europa:
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated via a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher.

&nbsp;Note that threadfish.shore has a *ready to go binary* for AUV-Linux. Log in as 'dorado1' and cd down to 'coding/auv-linux'.

h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% omniNames&
% notifd -c $OMNINOTIFY_HOME/channel.cfg&

% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] <nstep>
Use <nstep> = 50
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">13664264</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8093751</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* config out the audio support (kahlua)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
* 25 July 2008 - looks like there is a memory leak in the ashtec driver (based on the overnight test).
** download duma_2_5_14, untar and run 'make install'
** Modify linker command file to add \-lduma
** &nbsp;

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.
\\

Xtreme104 Serial Setup
\\

serial.conf looks like

mvc-debian4:/proc# cat /etc/serial.conf
/dev/ttyS1 uart 16450 port 0x2F8 irq 3

\#Xtreme card
\# Group A
/dev/ttyS2 uart 16850 port 0x380 irq 9&nbsp; baud_base 1500000
/dev/ttyS3 uart 16850 port 0x388 irq 9&nbsp; baud_base 1500000
/dev/ttyS4 uart 16850 port 0x390 irq 9&nbsp; baud_base 1500000
/dev/ttyS5 uart 16850 port 0x398 irq 9&nbsp; baud_base 1500000

\# Group B
/dev/ttyS6 uart 16850 port 0x300 irq 9&nbsp; baud_base 1500000
/dev/ttyS7 uart 16850 port 0x308 irq 9&nbsp; baud_base 1500000
/dev/ttyS8 uart 16850 port 0x310 irq 9&nbsp; baud_base 1500000
/dev/ttyS9 uart 16850 port 0x318 irq 9&nbsp; baud_base 1500000

\# Group C
/dev/ttyS10 uart 16850 port 0x150 irq 9 baud_base 1500000
/dev/ttyS11 uart 16850 port 0x158 irq 9 baud_base 1500000
/dev/ttyS12 uart 16850 port 0x160 irq 9 baud_base 1500000
/dev/ttyS13 uart 16850 port 0x168 irq 9 baud_base 1500000
&nbsp;
\\

mvc-debian4:/proc# cat /proc/interrupts
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU0
&nbsp; 0:&nbsp;&nbsp; 45634199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; timer
&nbsp; 1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; i8042
&nbsp; 2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; cascade
&nbsp; 6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; floppy
&nbsp; 7:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; parport0
&nbsp; 8:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; rtc
&nbsp; 9:&nbsp;&nbsp; 67591801&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; serial
&nbsp;11:&nbsp;&nbsp;&nbsp;&nbsp; 865812&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; eth0
&nbsp;14:&nbsp;&nbsp;&nbsp;&nbsp; 153327&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; ide0
NMI:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
LOC:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
ERR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
MIS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
mvc-debian4:/proc# setserial \-g /dev/ttyS5
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
mvc-debian4:/proc# setserial \-g /dev/ttyS\*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16450, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: 16850, Port: 0x0150, IRQ: 2
/dev/ttyS11, UART: 16850, Port: 0x0158, IRQ: 2
/dev/ttyS2, UART: 16850, Port: 0x0380, IRQ: 2
/dev/ttyS3, UART: 16850, Port: 0x0388, IRQ: 2
/dev/ttyS4, UART: 16850, Port: 0x0390, IRQ: 2
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
/dev/ttyS6, UART: 16850, Port: 0x0300, IRQ: 2
/dev/ttyS7, UART: 16850, Port: 0x0308, IRQ: 2
/dev/ttyS8, UART: 16850, Port: 0x0310, IRQ: 2
/dev/ttyS9, UART: 16850, Port: 0x0318, IRQ: 2
&nbsp;

&nbsp;mvc-debian4:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0150-0157 : serial
0158-015f : serial
01f0-01f7 : ide0
02f8-02ff : serial
0300-0307 : serial
0308-030f : serial
0310-0317 : serial
0318-031f : serial
0378-037a : parport0
037b-037f : parport0
0380-0387 : serial
0388-038f : serial
0390-0397 : serial
0398-039f : serial
03c0-03df : vga\+
03f2-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-03ff : serial
0cf8-0cff : PCI conf1
e000-e03f : 0000:00:11.0
&nbsp; e000-e03f : e100
f000-f00f : 0000:00:12.2
&nbsp; f000-f007 : ide0
&nbsp; f008-f00f : ide1
\\

h4. Useful Debian links

** www.google.com
** [http://www.debianhelp.org]
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
**** create a file called 'startCorba'
***** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notificatino service.
***** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
***** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
***** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
**** make sure startCorba has execute permissions (chmod a+x startCorba)&nbsp;
**** Create a symbolic link using update-rc.d (Debian command)
***** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba\\
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\
\\

Notes from ConnectTech Support site for Xtreme104 Isolated 12 port serial card
\\

&nbsp;Configuring the Kernel(2.6.x){color:black}The 2.6 kernel has support for the 8250/16650 UART in <src>/drivers/serial/8250.c. You should be able to run our ISA serial cards(Echo, DFlex, Xtreme/104) with this driver and the proper Kernel configuration.{color}{color:black}You'll need to edit your serial.h file in <src>/include/asm and add in the extra serial ports of the card.{color}{color:black}Here's what I added in red for a 4 port Xtreme/104 card at I/O 300 and IRQ 5. You can do the same with your card settings. If your card is using a higher clock than be sure to adjust your BAUD_BAUD value accordingly{color}

/\* Base baud for CTI boards. Default Max Baud = 115200 bps \*/

define CTI_BAUD (1843200 /16){color:black}define STD_SERIAL_PORT_DFNS \{color}{color}{color:black}&nbsp;/\*{color} UARTCLKPORT{color:black}IRQ FLAGS \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS0 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS1 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS2 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS3 \*/ \{color}{color}

{ 0, CTI_BAUD, 0x300, 5, STD_COM_FLAGS }{color:black}, /\* ttyS4 \*/ \{}{color}
{ 0, CTI_BAUD, 0x308, 5, STD_COM_FLAGS }{color:red}, /\* ttyS5 \*/ \{}{color}
{ 0, CTI_BAUD, 0x310, 5, STD_COM_FLAGS }{color:red}, /\* ttyS6 \*/ \{}{color}
{ 0, CTI_BAUD, 0x318, 5, STD_COM_FLAGS }{color:red}, /\* ttyS7 \*/{color}
If your board has a difference clock, be sure to change the CTI_BAUD value appropriately.
\\
\\
\\
\\
\\
\\
\\
\\

Re-Compiling the Kernel(Linux 2.6)

\*# cd
{Linux}*

At this point, you have a choice of two configuration utilities that you can use to configure your kernel. One utility, named config, is text based, and the other, named menuconfig, has a simple GUI (Graphical User Interface). The menuconfig utility is easier to use than config, so unless you have specific reasons use the menuconfig utility.

To use the menuconfig / config utility:

*\# make menuconfig*
Or
*\# make config* Once the configuration utility you choose is running, make sure that the following options are selected. Below shows the setting that must be enabled using the menuconfig and config utilities.

config: CONFIG_PCI
menuconfig: (Bus Options \-> PCI Support)\\

config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> 8250/16550 and compatible serial support)
 

config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Extended 8250/16550 serial driver options)

config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support more than 4 legacy serial ports)
 

config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support for sharing serial interrupts)

After all of the options have been checked and enabled, select exit. You will be prompted to save the new kernel configuration. Select yes. After you have finished configuring your kernel, issue the two following commands:

*\# make clean*
*\# make bzImage*
*\# make modules*
*\# make modules_install{*}Building/Installing the Kernel
NOTE: These instructions are for Red Hat standard installs. If you use a different distribution, or have set up your own system, these instructions will likely not help you. In that case please contact Connect Tech support at support@connecttech.com

Copy the kernel and system map to the boot partition:

The "make bzImage" step created the kernel in the subdirectory {Linux}
/arch//boot. If you don't know what CPU type you're using, you can find the new kernel by:
\\
# ls \-l
{Linux}/arch/*/boot/bzImage

The < cpu type > is the "*" part of the pathname of the newest kernel.
/arch//boot will be referenced by {arch}.

# cp {Linux}
/
{arch}
/bzImage /boot/vmlinuz-bh
# cp
{Linux}
/System.map /boot/System.map-bh

You may choose any postfix, \-df is a handy one. The postfix merely distinguishes between the kernel you've just built and other kernels already installed. It has no other purpose.
&nbsp;
Creating Nodes (Ports) For the Host Adapter
NOTE: Depending on your kernel distribution and configuration, nodes(ports) are often created automatically and you can skip this step. Check to see if they exist before proceeding.

Now that we have the new kernel in place capable of supporting the Blue Heat serial adapter we must create nodes, or ports, to allow the host adapter to communicate with other devices.

To begin, boot the new kernel. After the kernel has booted, open up the messages file using Vi, or your favorite text editor:
# vi
{log_path}/messages
Where {log_path}
is where the system logs are stored. Typically,
{log_path} = /var/log but this may be different in some distributions/systems.

Go to the bottom of the file and search backwards for references to "ttySxx" where xx is a number. You should see ttyS0 and ttyS1 for the standard serial ports, as well as a ttySxx entrie for each installed Echo/Dflex port. In order to use the new ports, these ttySxx entries must exist in the /dev directory. If they do not exist (they aren't created automatically, but do persist after reboots) you must make them with the following command:

# mknod -m [mode] /dev/ttySxx c 4 yy
[mode] is the file mode (permissions) you wish the device to have. 600 is often good.
xx is the number associated with the device which you have seen in the messages file.
yy is just xx + 64

You may also wish to make the corresponding cuaxx devices, but they are being phased out:

# mknod -m {mode} /dev/cuaxx c 5 yy
xx and yy should match the xx and yy from the previous mknod command

Here is an example of what you would do to add the nodes to your /dev directory:
First I opened the Vi editor and search for ttyS*. The results of the search show me that I have ttyS00 and ttyS01 (the standard serial ports) entries, as well as four other entries: ttyS05, ttyS06, ttyS07 and ttyS08. These four entries correspond to the four new ports for my CTI host adapter. (Right now, we are assuming a four-port card. You may have fewer or more ports, depending on the type of card you have). I've written down the four entries on a sheet of paper, seeing how my memory is a little short. Now I would like to make the nodes. From the command line, I type in the four following entries:

# mknod -m 600 /dev/ttyS05 c 4 69
# mknod -m 600 /dev/ttyS06 c 4 70
# mknod -m 600 /dev/ttyS06 c 4 71
# mknod -m 600 /dev/ttyS07 c 4 72

and optionally execute:

# mknod -m 600 /dev/cua12 c 5 69
# mknod -m 600 /dev/cua13 c 5 70
# mknod -m 600 /dev/cua14 c 5 71
# mknod -m 600 /dev/cua15 c 5 72

With the nodes in place, this finishes off our installation
 
Multiport Support
NOTE: Multiport support is not necessary for your boards to operate properly. This may safely be skipped. It is only a performance tweak available for users with older systems. Newer PCs do not gain much performance from this tweak.

Check {log_path}
/messages again. Each serial port will have a line; all the ports on each board will be listed in sequence. An eight port board might look like:

ttyS4 at port 0x300 (irq = 5) is a ST16654
ttyS5 at port 0x308 (irq = 5) is a ST16654
ttyS6 at port 0x310 (irq = 5) is a ST16654
ttyS7 at port 0x318 (irq = 5) is a ST16654
ttyS8 at port 0x320 (irq = 5) is a ST16654
ttyS9 at port 0x328 (irq = 5) is a ST16654
ttyS10 at port 0x330 (irq = 5) is a ST16654
ttyS11 at port 0x338 (irq = 5) is a ST16654

"port" in the above listing is really short for "port address". To avoid confusion, I will refer to the port address as the "address" instead.

Your board will have a table of the port addresses in the manual that came with it. You will need to look up the address that the board has been configured for; the line will also tell you what address the status port is at.
{mask} is determined by the following table:
Number of ports       {mask}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffsetserial is used to inform the driver about the status port, in the following manner:
\\
# setserial
{port} set_multiport portX {status port address} maskX {mask} matchX 0x0
where {port}
is any one port on a given board (using the first port is usually the best way),
{status port address}
is the address of the status port as determined above,
{mask}
is the appropriate mask value for the board from the table above, and X is a multiport setting number between 1 and 4.

The multiport setting number will usually be 1, but can be other values. There may be other multiport settings on the irq that your board is using, set by other boards in your system, including other Connect Tech boards.
# setserial
{port} get_setserial
where {port}
is a port on a board that you are going to use the status port on, will reveal if there are other multiport settings in effect already. If so, take care to choose X to be the lowest empty setting number.

This needs be done only once per board that you wish to have the status port used on.

Example:
You have two boards installed, an 8 port and a 2 port. The ports on each board are:
ttyS4 at port 0x300 (irq = 5) is a ST16654
.
.
ttyS11 at port 0x338 (irq = 5) is a ST16654
ttyS12 at port 0x200 (irq = 10) is a ST16654
ttyS13 at port 0x208 (irq = 10) is a ST16654

Check to see if any other multiport settings are already in use:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0One multiport setting is already in use by another board.

This works on a per irq basis, so each irq that is used by a board needs to be checked:
# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0No multiport settings are in use.

The commands to enable use of the status port on each board would be:
# setserial /dev/ttyS4 set_multiport port2 0x340 mask2 0xff match2 0x00
# setserial /dev/ttyS12 set_multiport port1 0x240 mask1 0x03 match1 0x00

Check that the settings are in place:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x340, mask=0xff, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x240, mask=0x3, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# man setserial

may be of help also.
&nbsp;
RS-485 Line Modes Support
The utility set485 can be used to set the line mode interactively or from a startup script. Settings stick until changed or the system is rebooted.

The Linux header file ioctls.h now contains definitions for TIOCSER485GET and TIOCSER485SET. These ioctls can be used on Connect Tech 485 capable boards to set the line mode. The mode (passed as an integer) can be one of TIOCSER485FULLDUPLEX, TIOCSER485HALFDUPLEX or TIOCSER485SLAVEMULTIPLEX for full or half duplex or slave multidrop mode, respectively.
&nbsp;
The Linux 2.6 standard serial driver does not have advanced RS485 mode support as of yet. If you require this functionality please contactsupport@connecttech.comfor the latest status of patches available.\\

More stream of consciousness ramblings:

OmniNotify v2.1 will not compile with the latest C+\+ offerings from GNU and Microsoft.

Why?&nbsp; Because support for the header <iostream.h> has been removed.

It is replaced by <iostream> (without the .h) and requires use of namespaces to access.

A patch to v2.1 that fixes this can be found here\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8060985</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8093752</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* config out the audio support (kahlua)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
* 25 July 2008 - looks like there is a memory leak in the ashtec driver (based on the overnight test).
** download duma_2_5_14, untar and run 'make install'
** Modify linker command file to add \-lduma
** &nbsp;

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.
\\

Xtreme104 Serial Setup
\\

serial.conf looks like

mvc-debian4:/proc# cat /etc/serial.conf
/dev/ttyS1 uart 16450 port 0x2F8 irq 3

\#Xtreme card
\# Group A
/dev/ttyS2 uart 16850 port 0x380 irq 9&nbsp; baud_base 1500000
/dev/ttyS3 uart 16850 port 0x388 irq 9&nbsp; baud_base 1500000
/dev/ttyS4 uart 16850 port 0x390 irq 9&nbsp; baud_base 1500000
/dev/ttyS5 uart 16850 port 0x398 irq 9&nbsp; baud_base 1500000

\# Group B
/dev/ttyS6 uart 16850 port 0x300 irq 9&nbsp; baud_base 1500000
/dev/ttyS7 uart 16850 port 0x308 irq 9&nbsp; baud_base 1500000
/dev/ttyS8 uart 16850 port 0x310 irq 9&nbsp; baud_base 1500000
/dev/ttyS9 uart 16850 port 0x318 irq 9&nbsp; baud_base 1500000

\# Group C
/dev/ttyS10 uart 16850 port 0x150 irq 9 baud_base 1500000
/dev/ttyS11 uart 16850 port 0x158 irq 9 baud_base 1500000
/dev/ttyS12 uart 16850 port 0x160 irq 9 baud_base 1500000
/dev/ttyS13 uart 16850 port 0x168 irq 9 baud_base 1500000
&nbsp;
\\

mvc-debian4:/proc# cat /proc/interrupts
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU0
&nbsp; 0:&nbsp;&nbsp; 45634199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; timer
&nbsp; 1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; i8042
&nbsp; 2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; cascade
&nbsp; 6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; floppy
&nbsp; 7:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; parport0
&nbsp; 8:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; rtc
&nbsp; 9:&nbsp;&nbsp; 67591801&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; serial
&nbsp;11:&nbsp;&nbsp;&nbsp;&nbsp; 865812&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; eth0
&nbsp;14:&nbsp;&nbsp;&nbsp;&nbsp; 153327&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; ide0
NMI:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
LOC:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
ERR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
MIS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
mvc-debian4:/proc# setserial \-g /dev/ttyS5
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
mvc-debian4:/proc# setserial \-g /dev/ttyS\*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16450, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: 16850, Port: 0x0150, IRQ: 2
/dev/ttyS11, UART: 16850, Port: 0x0158, IRQ: 2
/dev/ttyS2, UART: 16850, Port: 0x0380, IRQ: 2
/dev/ttyS3, UART: 16850, Port: 0x0388, IRQ: 2
/dev/ttyS4, UART: 16850, Port: 0x0390, IRQ: 2
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
/dev/ttyS6, UART: 16850, Port: 0x0300, IRQ: 2
/dev/ttyS7, UART: 16850, Port: 0x0308, IRQ: 2
/dev/ttyS8, UART: 16850, Port: 0x0310, IRQ: 2
/dev/ttyS9, UART: 16850, Port: 0x0318, IRQ: 2
&nbsp;

&nbsp;mvc-debian4:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0150-0157 : serial
0158-015f : serial
01f0-01f7 : ide0
02f8-02ff : serial
0300-0307 : serial
0308-030f : serial
0310-0317 : serial
0318-031f : serial
0378-037a : parport0
037b-037f : parport0
0380-0387 : serial
0388-038f : serial
0390-0397 : serial
0398-039f : serial
03c0-03df : vga\+
03f2-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-03ff : serial
0cf8-0cff : PCI conf1
e000-e03f : 0000:00:11.0
&nbsp; e000-e03f : e100
f000-f00f : 0000:00:12.2
&nbsp; f000-f007 : ide0
&nbsp; f008-f00f : ide1
\\

h4. Useful Debian links

** www.google.com
** [http://www.debianhelp.org]
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
**** create a file called 'startCorba'
***** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notificatino service.
***** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
***** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
***** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
**** make sure startCorba has execute permissions (chmod a+x startCorba)&nbsp;
**** Create a symbolic link using update-rc.d (Debian command)
***** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\
\\

Notes from ConnectTech Support site for Xtreme104 Isolated 12 port serial card
\\

&nbsp;Configuring the Kernel(2.6.x){color:black}The 2.6 kernel has support for the 8250/16650 UART in <src>/drivers/serial/8250.c. You should be able to run our ISA serial cards(Echo, DFlex, Xtreme/104) with this driver and the proper Kernel configuration.{color}{color:black}You'll need to edit your serial.h file in <src>/include/asm and add in the extra serial ports of the card.{color}{color:black}Here's what I added in red for a 4 port Xtreme/104 card at I/O 300 and IRQ 5. You can do the same with your card settings. If your card is using a higher clock than be sure to adjust your BAUD_BAUD value accordingly{color}

/\* Base baud for CTI boards. Default Max Baud = 115200 bps \*/

define CTI_BAUD (1843200 /16){color:black}define STD_SERIAL_PORT_DFNS \{color}{color}{color:black}&nbsp;/\*{color} UARTCLKPORT{color:black}IRQ FLAGS \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS0 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS1 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS2 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS3 \*/ \{color}{color}
{ 0, CTI_BAUD, 0x300, 5, STD_COM_FLAGS }{color:black}, /\* ttyS4 \*/ \{}{color}
{ 0, CTI_BAUD, 0x308, 5, STD_COM_FLAGS }{color:red}, /\* ttyS5 \*/ \{}{color}
{ 0, CTI_BAUD, 0x310, 5, STD_COM_FLAGS }{color:red}, /\* ttyS6 \*/ \{}{color}
{ 0, CTI_BAUD, 0x318, 5, STD_COM_FLAGS }{color:red}, /\* ttyS7 \*/{color}
If your board has a difference clock, be sure to change the CTI_BAUD value appropriately.
\\
\\
\\
\\
\\
\\
\\
\\ Re-Compiling the Kernel(Linux 2.6)

\*# cd
{Linux}*

At this point, you have a choice of two configuration utilities that you can use to configure your kernel. One utility, named config, is text based, and the other, named menuconfig, has a simple GUI (Graphical User Interface). The menuconfig utility is easier to use than config, so unless you have specific reasons use the menuconfig utility.

To use the menuconfig / config utility:

*\# make menuconfig*
Or
*\# make config* Once the configuration utility you choose is running, make sure that the following options are selected. Below shows the setting that must be enabled using the menuconfig and config utilities.

config: CONFIG_PCI
menuconfig: (Bus Options \-> PCI Support)\\

config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> 8250/16550 and compatible serial support)
 

config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Extended 8250/16550 serial driver options)

config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support more than 4 legacy serial ports)
 

config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support for sharing serial interrupts)

After all of the options have been checked and enabled, select exit. You will be prompted to save the new kernel configuration. Select yes. After you have finished configuring your kernel, issue the two following commands:

*\# make clean*
*\# make bzImage*
*\# make modules*
*\# make modules_install{*}Building/Installing the Kernel
NOTE: These instructions are for Red Hat standard installs. If you use a different distribution, or have set up your own system, these instructions will likely not help you. In that case please contact Connect Tech support at support@connecttech.com

Copy the kernel and system map to the boot partition:

The "make bzImage" step created the kernel in the subdirectory {Linux}
/arch//boot. If you don't know what CPU type you're using, you can find the new kernel by:
\\
# ls \-l
{Linux}/arch/*/boot/bzImage

The < cpu type > is the "*" part of the pathname of the newest kernel.
/arch//boot will be referenced by {arch}.

# cp {Linux}
/
{arch}
/bzImage /boot/vmlinuz-bh
# cp
{Linux}
/System.map /boot/System.map-bh

You may choose any postfix, \-df is a handy one. The postfix merely distinguishes between the kernel you've just built and other kernels already installed. It has no other purpose.
&nbsp;
Creating Nodes (Ports) For the Host Adapter
NOTE: Depending on your kernel distribution and configuration, nodes(ports) are often created automatically and you can skip this step. Check to see if they exist before proceeding.

Now that we have the new kernel in place capable of supporting the Blue Heat serial adapter we must create nodes, or ports, to allow the host adapter to communicate with other devices.

To begin, boot the new kernel. After the kernel has booted, open up the messages file using Vi, or your favorite text editor:
# vi
{log_path}/messages
Where {log_path}
is where the system logs are stored. Typically,
{log_path} = /var/log but this may be different in some distributions/systems.

Go to the bottom of the file and search backwards for references to "ttySxx" where xx is a number. You should see ttyS0 and ttyS1 for the standard serial ports, as well as a ttySxx entrie for each installed Echo/Dflex port. In order to use the new ports, these ttySxx entries must exist in the /dev directory. If they do not exist (they aren't created automatically, but do persist after reboots) you must make them with the following command:

# mknod -m [mode] /dev/ttySxx c 4 yy
[mode] is the file mode (permissions) you wish the device to have. 600 is often good.
xx is the number associated with the device which you have seen in the messages file.
yy is just xx + 64

You may also wish to make the corresponding cuaxx devices, but they are being phased out:

# mknod -m {mode} /dev/cuaxx c 5 yy
xx and yy should match the xx and yy from the previous mknod command

Here is an example of what you would do to add the nodes to your /dev directory:
First I opened the Vi editor and search for ttyS*. The results of the search show me that I have ttyS00 and ttyS01 (the standard serial ports) entries, as well as four other entries: ttyS05, ttyS06, ttyS07 and ttyS08. These four entries correspond to the four new ports for my CTI host adapter. (Right now, we are assuming a four-port card. You may have fewer or more ports, depending on the type of card you have). I've written down the four entries on a sheet of paper, seeing how my memory is a little short. Now I would like to make the nodes. From the command line, I type in the four following entries:

# mknod -m 600 /dev/ttyS05 c 4 69
# mknod -m 600 /dev/ttyS06 c 4 70
# mknod -m 600 /dev/ttyS06 c 4 71
# mknod -m 600 /dev/ttyS07 c 4 72

and optionally execute:

# mknod -m 600 /dev/cua12 c 5 69
# mknod -m 600 /dev/cua13 c 5 70
# mknod -m 600 /dev/cua14 c 5 71
# mknod -m 600 /dev/cua15 c 5 72

With the nodes in place, this finishes off our installation
 
Multiport Support
NOTE: Multiport support is not necessary for your boards to operate properly. This may safely be skipped. It is only a performance tweak available for users with older systems. Newer PCs do not gain much performance from this tweak.

Check {log_path}
/messages again. Each serial port will have a line; all the ports on each board will be listed in sequence. An eight port board might look like:

ttyS4 at port 0x300 (irq = 5) is a ST16654
ttyS5 at port 0x308 (irq = 5) is a ST16654
ttyS6 at port 0x310 (irq = 5) is a ST16654
ttyS7 at port 0x318 (irq = 5) is a ST16654
ttyS8 at port 0x320 (irq = 5) is a ST16654
ttyS9 at port 0x328 (irq = 5) is a ST16654
ttyS10 at port 0x330 (irq = 5) is a ST16654
ttyS11 at port 0x338 (irq = 5) is a ST16654

"port" in the above listing is really short for "port address". To avoid confusion, I will refer to the port address as the "address" instead.

Your board will have a table of the port addresses in the manual that came with it. You will need to look up the address that the board has been configured for; the line will also tell you what address the status port is at.
{mask} is determined by the following table:
Number of ports       {mask}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffsetserial is used to inform the driver about the status port, in the following manner:
\\
# setserial
{port} set_multiport portX {status port address} maskX {mask} matchX 0x0
where {port}
is any one port on a given board (using the first port is usually the best way),
{status port address}
is the address of the status port as determined above,
{mask}
is the appropriate mask value for the board from the table above, and X is a multiport setting number between 1 and 4.

The multiport setting number will usually be 1, but can be other values. There may be other multiport settings on the irq that your board is using, set by other boards in your system, including other Connect Tech boards.
# setserial
{port} get_setserial
where {port}
is a port on a board that you are going to use the status port on, will reveal if there are other multiport settings in effect already. If so, take care to choose X to be the lowest empty setting number.

This needs be done only once per board that you wish to have the status port used on.

Example:
You have two boards installed, an 8 port and a 2 port. The ports on each board are:
ttyS4 at port 0x300 (irq = 5) is a ST16654
.
.
ttyS11 at port 0x338 (irq = 5) is a ST16654
ttyS12 at port 0x200 (irq = 10) is a ST16654
ttyS13 at port 0x208 (irq = 10) is a ST16654

Check to see if any other multiport settings are already in use:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0One multiport setting is already in use by another board.

This works on a per irq basis, so each irq that is used by a board needs to be checked:
# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0No multiport settings are in use.

The commands to enable use of the status port on each board would be:
# setserial /dev/ttyS4 set_multiport port2 0x340 mask2 0xff match2 0x00
# setserial /dev/ttyS12 set_multiport port1 0x240 mask1 0x03 match1 0x00

Check that the settings are in place:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x340, mask=0xff, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x240, mask=0x3, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# man setserial

may be of help also.
&nbsp;
RS-485 Line Modes Support
The utility set485 can be used to set the line mode interactively or from a startup script. Settings stick until changed or the system is rebooted.

The Linux header file ioctls.h now contains definitions for TIOCSER485GET and TIOCSER485SET. These ioctls can be used on Connect Tech 485 capable boards to set the line mode. The mode (passed as an integer) can be one of TIOCSER485FULLDUPLEX, TIOCSER485HALFDUPLEX or TIOCSER485SLAVEMULTIPLEX for full or half duplex or slave multidrop mode, respectively.
&nbsp;
The Linux 2.6 standard serial driver does not have advanced RS485 mode support as of yet. If you require this functionality please contactsupport@connecttech.comfor the latest status of patches available.
\\ More stream of consciousness ramblings:

*OmniNotify v2.1 will not compile with the latest C+\+ offerings from GNU and Microsoft.*

Why?&nbsp; Because support for the header <iostream.h> has been removed.

It is replaced by <iostream> (without the .h) and requires use of namespaces to access.

A patch to v2.1 that fixes this can be found here
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8060987</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">13697033</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
* PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h1. Mac specific : installing development tools
\\

You need to have administration rights on this computer&nbsp;


on the Finder : select menu Go > Connect to Server ...

on the invite type : cifs://tornado.shore.mbari.org and <OK>


enter your login and password &nbsp;

select AppsAND <OK>

under the directory Macs/DevelopperTools/XcodeTools select the version of xcode for the OS version of your computer (10.6 = Snow Leopard) and get the xcode*.dmg file

you can then eject tornado disk

double click on the xcode*.dmg to mount the file


and then on Xcode.mpkg to start the installation&nbsp;


h2. Building our old version of Europa/Plasma

&nbsp;To apply the patch and build Europa/Plasma with GCC 4.3:
{code:none}
% cd $PLASMA_HOME
% patch -p1 < plasma-gcc4.3.patch  #i.e. the attached patch file
% jam && jam
{code}
\\

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
To compile TREX libraries, first download the Boost C+\+ library ([http://www.boost.org/]) and install it following the instructions outlined in the site.  Then compile TREX in a similar manner as Europa:
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated via a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher.

&nbsp;Note that threadfish.shore has a *ready to go binary* for AUV-Linux. Log in as 'dorado1' and cd down to 'coding/auv-linux'.

h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% omniNames&
% notifd -c $OMNINOTIFY_HOME/channel.cfg&

% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] <nstep>
Use <nstep> = 50
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">13664268</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8093749</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* config out the audio support (kahlua)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
* 25 July 2008 - looks like there is a memory leak in the ashtec driver (based on the overnight test).
** download duma_2_5_14, untar and run 'make install'
** Modify linker command file to add \-lduma
** &nbsp;

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.
\\

Xtreme104 Serial Setup
\\

serial.conf looks like

mvc-debian4:/proc# cat /etc/serial.conf
/dev/ttyS1 uart 16450 port 0x2F8 irq 3

\#Xtreme card
\# Group A
/dev/ttyS2 uart 16850 port 0x380 irq 9&nbsp; baud_base 1500000
/dev/ttyS3 uart 16850 port 0x388 irq 9&nbsp; baud_base 1500000
/dev/ttyS4 uart 16850 port 0x390 irq 9&nbsp; baud_base 1500000
/dev/ttyS5 uart 16850 port 0x398 irq 9&nbsp; baud_base 1500000

\# Group B
/dev/ttyS6 uart 16850 port 0x300 irq 9&nbsp; baud_base 1500000
/dev/ttyS7 uart 16850 port 0x308 irq 9&nbsp; baud_base 1500000
/dev/ttyS8 uart 16850 port 0x310 irq 9&nbsp; baud_base 1500000
/dev/ttyS9 uart 16850 port 0x318 irq 9&nbsp; baud_base 1500000

\# Group C
/dev/ttyS10 uart 16850 port 0x150 irq 9 baud_base 1500000
/dev/ttyS11 uart 16850 port 0x158 irq 9 baud_base 1500000
/dev/ttyS12 uart 16850 port 0x160 irq 9 baud_base 1500000
/dev/ttyS13 uart 16850 port 0x168 irq 9 baud_base 1500000
&nbsp;
\\

mvc-debian4:/proc# cat /proc/interrupts
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU0
&nbsp; 0:&nbsp;&nbsp; 45634199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; timer
&nbsp; 1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; i8042
&nbsp; 2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; cascade
&nbsp; 6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; floppy
&nbsp; 7:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; parport0
&nbsp; 8:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; rtc
&nbsp; 9:&nbsp;&nbsp; 67591801&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; serial
&nbsp;11:&nbsp;&nbsp;&nbsp;&nbsp; 865812&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; eth0
&nbsp;14:&nbsp;&nbsp;&nbsp;&nbsp; 153327&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; ide0
NMI:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
LOC:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
ERR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
MIS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
mvc-debian4:/proc# setserial \-g /dev/ttyS5
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
mvc-debian4:/proc# setserial \-g /dev/ttyS\*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16450, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: 16850, Port: 0x0150, IRQ: 2
/dev/ttyS11, UART: 16850, Port: 0x0158, IRQ: 2
/dev/ttyS2, UART: 16850, Port: 0x0380, IRQ: 2
/dev/ttyS3, UART: 16850, Port: 0x0388, IRQ: 2
/dev/ttyS4, UART: 16850, Port: 0x0390, IRQ: 2
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
/dev/ttyS6, UART: 16850, Port: 0x0300, IRQ: 2
/dev/ttyS7, UART: 16850, Port: 0x0308, IRQ: 2
/dev/ttyS8, UART: 16850, Port: 0x0310, IRQ: 2
/dev/ttyS9, UART: 16850, Port: 0x0318, IRQ: 2
&nbsp;

&nbsp;mvc-debian4:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0150-0157 : serial
0158-015f : serial
01f0-01f7 : ide0
02f8-02ff : serial
0300-0307 : serial
0308-030f : serial
0310-0317 : serial
0318-031f : serial
0378-037a : parport0
037b-037f : parport0
0380-0387 : serial
0388-038f : serial
0390-0397 : serial
0398-039f : serial
03c0-03df : vga\+
03f2-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-03ff : serial
0cf8-0cff : PCI conf1
e000-e03f : 0000:00:11.0
&nbsp; e000-e03f : e100
f000-f00f : 0000:00:12.2
&nbsp; f000-f007 : ide0
&nbsp; f008-f00f : ide1
\\

h4. Useful Debian links

** www.google.com
** [http://www.debianhelp.org]
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
**** create a file called 'startCorba'
***** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notificatino service.
***** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
***** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
***** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
**** make sure startCorba has execute permissions (chmod a+x startCorba)&nbsp;
**** Create a symbolic link using update-rc.d (Debian command)
***** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba

&nbsp;
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\
\\

Notes from ConnectTech Support site for Xtreme104 Isolated 12 port serial card
\\

&nbsp;Configuring the Kernel(2.6.x){color:black}The 2.6 kernel has support for the 8250/16650 UART in <src>/drivers/serial/8250.c. You should be able to run our ISA serial cards(Echo, DFlex, Xtreme/104) with this driver and the proper Kernel configuration.{color}{color:black}You'll need to edit your serial.h file in <src>/include/asm and add in the extra serial ports of the card.{color}{color:black}Here's what I added in red for a 4 port Xtreme/104 card at I/O 300 and IRQ 5. You can do the same with your card settings. If your card is using a higher clock than be sure to adjust your BAUD_BAUD value accordingly{color}

/\* Base baud for CTI boards. Default Max Baud = 115200 bps \*/

define CTI_BAUD (1843200 /16){color:black}define STD_SERIAL_PORT_DFNS \{color}{color}{color:black}&nbsp;/\*{color} UARTCLKPORT{color:black}IRQ FLAGS \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS0 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS1 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS2 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS3 \*/ \{color}{color}
{ 0, CTI_BAUD, 0x300, 5, STD_COM_FLAGS }{color:black}, /\* ttyS4 \*/ \{}{color}
{ 0, CTI_BAUD, 0x308, 5, STD_COM_FLAGS }{color:red}, /\* ttyS5 \*/ \{}{color}
{ 0, CTI_BAUD, 0x310, 5, STD_COM_FLAGS }{color:red}, /\* ttyS6 \*/ \{}{color}
{ 0, CTI_BAUD, 0x318, 5, STD_COM_FLAGS }{color:red}, /\* ttyS7 \*/{color}
If your board has a difference clock, be sure to change the CTI_BAUD value appropriately.
\\
\\
\\
\\
\\
\\
\\

Re-Compiling the Kernel(Linux 2.6)

\*# cd
{Linux}*

At this point, you have a choice of two configuration utilities that you can use to configure your kernel. One utility, named config, is text based, and the other, named menuconfig, has a simple GUI (Graphical User Interface). The menuconfig utility is easier to use than config, so unless you have specific reasons use the menuconfig utility.

To use the menuconfig / config utility:

*\# make menuconfig*
Or
*\# make config* Once the configuration utility you choose is running, make sure that the following options are selected. Below shows the setting that must be enabled using the menuconfig and config utilities.

config: CONFIG_PCI
menuconfig: (Bus Options \-> PCI Support)\\

config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> 8250/16550 and compatible serial support)
 

config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Extended 8250/16550 serial driver options)

config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support more than 4 legacy serial ports)
 

config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support for sharing serial interrupts)

After all of the options have been checked and enabled, select exit. You will be prompted to save the new kernel configuration. Select yes. After you have finished configuring your kernel, issue the two following commands:

*\# make clean*
*\# make bzImage*
*\# make modules*
*\# make modules_install{*}Building/Installing the Kernel
NOTE: These instructions are for Red Hat standard installs. If you use a different distribution, or have set up your own system, these instructions will likely not help you. In that case please contact Connect Tech support at support@connecttech.com

Copy the kernel and system map to the boot partition:

The "make bzImage" step created the kernel in the subdirectory {Linux}
/arch//boot. If you don't know what CPU type you're using, you can find the new kernel by:
\\
# ls \-l
{Linux}/arch/*/boot/bzImage

The < cpu type > is the "*" part of the pathname of the newest kernel.
/arch//boot will be referenced by {arch}.

# cp {Linux}
/
{arch}
/bzImage /boot/vmlinuz-bh
# cp
{Linux}
/System.map /boot/System.map-bh

You may choose any postfix, \-df is a handy one. The postfix merely distinguishes between the kernel you've just built and other kernels already installed. It has no other purpose.
&nbsp;
Creating Nodes (Ports) For the Host Adapter
NOTE: Depending on your kernel distribution and configuration, nodes(ports) are often created automatically and you can skip this step. Check to see if they exist before proceeding.

Now that we have the new kernel in place capable of supporting the Blue Heat serial adapter we must create nodes, or ports, to allow the host adapter to communicate with other devices.

To begin, boot the new kernel. After the kernel has booted, open up the messages file using Vi, or your favorite text editor:
# vi
{log_path}/messages
Where {log_path}
is where the system logs are stored. Typically,
{log_path} = /var/log but this may be different in some distributions/systems.

Go to the bottom of the file and search backwards for references to "ttySxx" where xx is a number. You should see ttyS0 and ttyS1 for the standard serial ports, as well as a ttySxx entrie for each installed Echo/Dflex port. In order to use the new ports, these ttySxx entries must exist in the /dev directory. If they do not exist (they aren't created automatically, but do persist after reboots) you must make them with the following command:

# mknod -m [mode] /dev/ttySxx c 4 yy
[mode] is the file mode (permissions) you wish the device to have. 600 is often good.
xx is the number associated with the device which you have seen in the messages file.
yy is just xx + 64

You may also wish to make the corresponding cuaxx devices, but they are being phased out:

# mknod -m {mode} /dev/cuaxx c 5 yy
xx and yy should match the xx and yy from the previous mknod command

Here is an example of what you would do to add the nodes to your /dev directory:
First I opened the Vi editor and search for ttyS*. The results of the search show me that I have ttyS00 and ttyS01 (the standard serial ports) entries, as well as four other entries: ttyS05, ttyS06, ttyS07 and ttyS08. These four entries correspond to the four new ports for my CTI host adapter. (Right now, we are assuming a four-port card. You may have fewer or more ports, depending on the type of card you have). I've written down the four entries on a sheet of paper, seeing how my memory is a little short. Now I would like to make the nodes. From the command line, I type in the four following entries:

# mknod -m 600 /dev/ttyS05 c 4 69
# mknod -m 600 /dev/ttyS06 c 4 70
# mknod -m 600 /dev/ttyS06 c 4 71
# mknod -m 600 /dev/ttyS07 c 4 72

and optionally execute:

# mknod -m 600 /dev/cua12 c 5 69
# mknod -m 600 /dev/cua13 c 5 70
# mknod -m 600 /dev/cua14 c 5 71
# mknod -m 600 /dev/cua15 c 5 72

With the nodes in place, this finishes off our installation
 
Multiport Support
NOTE: Multiport support is not necessary for your boards to operate properly. This may safely be skipped. It is only a performance tweak available for users with older systems. Newer PCs do not gain much performance from this tweak.

Check {log_path}
/messages again. Each serial port will have a line; all the ports on each board will be listed in sequence. An eight port board might look like:

ttyS4 at port 0x300 (irq = 5) is a ST16654
ttyS5 at port 0x308 (irq = 5) is a ST16654
ttyS6 at port 0x310 (irq = 5) is a ST16654
ttyS7 at port 0x318 (irq = 5) is a ST16654
ttyS8 at port 0x320 (irq = 5) is a ST16654
ttyS9 at port 0x328 (irq = 5) is a ST16654
ttyS10 at port 0x330 (irq = 5) is a ST16654
ttyS11 at port 0x338 (irq = 5) is a ST16654

"port" in the above listing is really short for "port address". To avoid confusion, I will refer to the port address as the "address" instead.

Your board will have a table of the port addresses in the manual that came with it. You will need to look up the address that the board has been configured for; the line will also tell you what address the status port is at.
{mask} is determined by the following table:
Number of ports       {mask}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffsetserial is used to inform the driver about the status port, in the following manner:
\\
# setserial
{port} set_multiport portX {status port address} maskX {mask} matchX 0x0
where {port}
is any one port on a given board (using the first port is usually the best way),
{status port address}
is the address of the status port as determined above,
{mask}
is the appropriate mask value for the board from the table above, and X is a multiport setting number between 1 and 4.

The multiport setting number will usually be 1, but can be other values. There may be other multiport settings on the irq that your board is using, set by other boards in your system, including other Connect Tech boards.
# setserial
{port} get_setserial
where {port}
is a port on a board that you are going to use the status port on, will reveal if there are other multiport settings in effect already. If so, take care to choose X to be the lowest empty setting number.

This needs be done only once per board that you wish to have the status port used on.

Example:
You have two boards installed, an 8 port and a 2 port. The ports on each board are:
ttyS4 at port 0x300 (irq = 5) is a ST16654
.
.
ttyS11 at port 0x338 (irq = 5) is a ST16654
ttyS12 at port 0x200 (irq = 10) is a ST16654
ttyS13 at port 0x208 (irq = 10) is a ST16654

Check to see if any other multiport settings are already in use:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0One multiport setting is already in use by another board.

This works on a per irq basis, so each irq that is used by a board needs to be checked:
# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0No multiport settings are in use.

The commands to enable use of the status port on each board would be:
# setserial /dev/ttyS4 set_multiport port2 0x340 mask2 0xff match2 0x00
# setserial /dev/ttyS12 set_multiport port1 0x240 mask1 0x03 match1 0x00

Check that the settings are in place:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x340, mask=0xff, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x240, mask=0x3, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# man setserial

may be of help also.
&nbsp;
RS-485 Line Modes Support
The utility set485 can be used to set the line mode interactively or from a startup script. Settings stick until changed or the system is rebooted.

The Linux header file ioctls.h now contains definitions for TIOCSER485GET and TIOCSER485SET. These ioctls can be used on Connect Tech 485 capable boards to set the line mode. The mode (passed as an integer) can be one of TIOCSER485FULLDUPLEX, TIOCSER485HALFDUPLEX or TIOCSER485SLAVEMULTIPLEX for full or half duplex or slave multidrop mode, respectively.
&nbsp;
The Linux 2.6 standard serial driver does not have advanced RS485 mode support as of yet. If you require this functionality please contactsupport@connecttech.comfor the latest status of patches available.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8060983</id>
</property>
</object>
<object class="Labelling" package="com.atlassian.confluence.labels">
<id name="id">11206657</id>
<property name="label" class="Label" package="com.atlassian.confluence.labels"><id name="id">11173889</id>
</property>
<property name="content" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">750</id>
</property>
<property name="spaceKey"><![CDATA[AUV]]></property>
<property name="user"><![CDATA[fpy]]></property>
<property name="creationDate">2009-12-09 13:49:37.300</property>
<property name="lastModificationDate">2009-12-09 13:49:37.300</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1212611</id>
<property name="body"><![CDATA[h2. AUV CTD GUI (a.k.a. ReviewGUI)

h3. About
From [~jgb]

{quote}If you are not interested in a graphical interface for easily plotting AUV data, or never use MATLAB, read no further...

Francois Cazenave, a summer student in my lab, has developed a nice GUI for selecting and plotting AUV data.  I think he did a nice job - certainly we are finding it useful, so I wanted to share it with the rest of you.  Please find attached his instructions for loading and using the GUI.  While he is still around, it would be great if folks could try it out and send us comments (especially if you encounter problems). 

This is intended as a tool for getting at and plotting ALL of the Dorado data, for those of you that might want to delve deeper than the standard plots.  There are some known issues - for example the AUV records some of its units incorrectly (e.g. degrees and radians) and since the GUI simply reflects the AUV data set, there are some places where the units are incorrect. 

I apologize to those of you who receive this multiple times - hopefully the various AUV lists are not too redundant.{quote}

h3. Documentation
* [Download documentation|^AUV-CTD-GUI.doc]

h3. Download
* [Zip file|^reviewGUI.zip]


]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179845</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1212612</id>
<property name="body"><![CDATA[h2. AUV CTD GUI (a.k.a. reviewGUI)

h3. About
From [~jgb]

{quote}If you are not interested in a graphical interface for easily plotting AUV data, or never use MATLAB, read no further...

Francois Cazenave, a summer student in my lab, has developed a nice GUI for selecting and plotting AUV data.  I think he did a nice job - certainly we are finding it useful, so I wanted to share it with the rest of you.  Please find attached his instructions for loading and using the GUI.  While he is still around, it would be great if folks could try it out and send us comments (especially if you encounter problems). 

This is intended as a tool for getting at and plotting ALL of the Dorado data, for those of you that might want to delve deeper than the standard plots.  There are some known issues - for example the AUV records some of its units incorrectly (e.g. degrees and radians) and since the GUI simply reflects the AUV data set, there are some places where the units are incorrect. 

I apologize to those of you who receive this multiple times - hopefully the various AUV lists are not too redundant.{quote}

h3. Documentation
* [Download documentation|^AUV-CTD-GUI.doc]

h3. Download
* [Zip file|^reviewGUI.zip]


]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179846</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1212613</id>
<property name="body"><![CDATA[h2. AUV CTD GUI (a.k.a. reviewGUI)

h3. About
From [~jgb]

{quote}If you are not interested in a graphical interface for easily plotting AUV data, or never use MATLAB, read no further...

Francois Cazenave, a summer student in my lab, has developed a nice GUI for selecting and plotting AUV data.  I think he did a nice job - certainly we are finding it useful, so I wanted to share it with the rest of you.  Please find attached his instructions for loading and using the GUI.  While he is still around, it would be great if folks could try it out and send us comments (especially if you encounter problems). 

This is intended as a tool for getting at and plotting ALL of the Dorado data, for those of you that might want to delve deeper than the standard plots.  There are some known issues - for example the AUV records some of its units incorrectly (e.g. degrees and radians) and since the GUI simply reflects the AUV data set, there are some places where the units are incorrect. 

I apologize to those of you who receive this multiple times - hopefully the various AUV lists are not too redundant.{quote}

h3. Documentation
* [Download documentation|^AUV-CTD-GUI.doc]

h3. Download
* [Zip file of Matlab code|^reviewGUI.zip]


]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179847</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">14221381</id>
<property name="body"><![CDATA[{section}
{column:width=75%}
[Lessons Learned from June 29th-30th Drifter following Experiment|AUV:Lessons Learned Drifter Following Expt June'10]
{column}
{column:width=25%}
{panel:title=Developer Resources}
# Security
## [Securing GWT Clients|http://java.dzone.com/articles/securing-gwt-client-acris]
# Testing
## [GWT Testing Best Practices|http://www.softdevtube.com/2010/08/09/gwt-testing-best-practices/]
## [Testing Web Clients (Selenium)|http://weblogs.java.net/blog/johnsmart/archive/2010/08/09/selenium-2web-driver-land-where-page-objects-are-king]
{panel}
{column}
{section}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">14188614</id>
</property>
</object>
<object class="Label" package="com.atlassian.confluence.labels">
<id name="id">11173889</id>
<property name="name"><![CDATA[favourite]]></property>
<property name="owner"><![CDATA[fpy]]></property>
<property name="namespace"><![CDATA[my]]></property>
<property name="creationDate">2009-12-09 13:49:37.267</property>
<property name="lastModificationDate">2009-12-09 13:49:58.467</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388209</id>
<property name="body"><![CDATA[Sept.&nbsp;9th&nbsp;Sea date: RC15 with auv-linux

\[P1, file bugs against auv-linux for changes needed for Sept sea date to insure publishing log files (McCann) is working).

Oct. 1st &nbsp;Sea date:

1) the head of TREX\\

Priority:&nbsp; P1="must have", P2="should have", P3="nice to have"
\\

*Core T-REX issues:*

1. Merge front branch with mainline in SVN. \[P1\]
- The current state of T-REX is divided between the HEAD and the Front branches. There are aspects of the HEAD particularly Angel's 5 reactor configuration which should be folded in. Ideally we should merge the Front branch into the mainline and declare the Front branch dead.
-* Updates have been made to pull Front branch (RC15) to the head \[P1, Frederic, Done Jul 16\]
-* Test and Validation of the SVN head \[Frederic, Angel, in progress Jul 20, goal is to complete Jul 25\]

2. Move to Google/T-REX \[P2\] - (not crucial for MBARI, but should be done to insure clean tech transfer&nbsp;and efficient evolution in the future)
- move our code to Google \[P2\]
- clean up interface w/ EUROPA esp. for ESA project \[P2, Frederic, goal mid-Sept\]
-* Subtask: bring in latest EUROPA code to test the interface&nbsp;\[P2, Frederic&nbsp;\]

\\
- this is something long overdue and we need to work on primarily to ensure some bugs found in T-REX core and some key issues in EUROPA are incorporated. Plus not doing so incrementally and ever so often will lead to different trajectories of code base which might kill us later on. Specifically for the ESA project the last item needs to be undertaken anyway since APSI will need to replace EUROPA.

3. Improvements to PSim for AUV dynamics model (partially checked in to Front branch)
- this is to make the PSim reflect the uncertainty of the environment as well as to do a better job reflecting the dynamics of the AUV itself. This also ties in with the comment from Brent to patch the PSim to reflect the latency of execution of commands sent to the VCS. This should be managed by Brent or Thom as it is a relatively independent model and will still be a strong basis for testing purposes for further development of TREX.&nbsp;&nbsp; \[P1, Brent, Frederic to meet with Brent on Wednesday, needed by mid-August in order to be used by Sept. sea date\]

4. Cleaner separation of model (e.g rules.nddl)&nbsp; \[P3, time should be allocated in the schedule to allow refactoring, test plan is to use .valid files to verify model correctness.&nbsp;&nbsp; Goal would be to test at sea October or later\]
- this involves (along with #5 below) of cleanly separating the model elements needed for a specific mission and structuring the code base in a way that is more intuitive instead of lumping all the constraints in one file.

5. Better configuration mgmt. of files in T-REX \[P3 - plan for December, since build process changes are disruptive\]
- related to above, but more focused on the directory structure and build process of T-REX and moving away from the ctd2007 based directory structure.

6. Send more data from VCS to T-REX \[P1 - plan for October, low risk modification\]
- by putting the lat/long into state publisher which in turn gets put in vehicle state timeline, we will be able to use the log files directly for Google Earth visualization without doing convulsions as Alhayat needs to do now.

7. Modeling how to break up a survey or goal and continue/need for interruption \[Potentially high risk modification, will require re-engineering of top level models and potential modification of TREX.&nbsp;&nbsp;&nbsp;&nbsp; Volume survey presents an easier 'restart' manually, side note from Frederic:&nbsp; Volume survey demonstrates the capability of TREX more than front following.).&nbsp;&nbsp;&nbsp; Plan for November/December, will likely 3 or months of effort (simulator and sea dates).
- this is an important (hence in bold font) issue that needs to be tackled and also something we signed up to do this year. Namely to be able to interrupt a mission and then resume. It will show a clear demarcation with the existing Layered Control work and really demonstrate that we can use plan projection for tasks which are less reactive and interrupt driven. It primarily involves modeling and will require you to be involved. It might be a case study for more complex modeling where Brent/Thom can look over your shoulder. We should aim to do this task as soon as possible given its utility (including what Julio seems to have mentioned on Monday) and its demonstration of clear implication of our work, not to mention publication possibilities.

Angel:

8. Implementation of parametric functions for Gulper usage
- this is the effort Angel is focusing on now and will provide utility-estimate based means to figure out when to trigger gulpers. More importantly this could be used in conjunction with T-REX Jr. where no deliberation for nav/control will be necessary and the standard script based approach in concert with cluster based estimation and these functions drive how a light-weight version of T-REX can be used. I have made this in bold font also given it should be considered on the critical path.

9. Resource reasoning (i.e how many gulpers left for the remainder of the mission) with and without task interruption
- this task is tied in with #7 above as one starting point for resource reasoning albeit of a simpler variety. The objective would be to see if goals can be executed/dropped in the light of existing gulper availability at sea and to do simple resource reasoning. In the event that when our AUVs have 48 hour battery charge and can revisit the location in the bay after an initial survey, the need to do this simple kind of reasoning increases.

T-REX items for Brent/Thom for '09

10. Psim modeling latency
- this issue is directly related to #3 above. And would be a nice clean sub-task that Brent can work on.

11. VCS Config file (e.g ctd1 in devices. cfg)
- this should be wrapped up with #5 above to get an overall clean approach to dealing with varying configurations. Not only should the T-REX core be properly and systematically reconfigured, but so should the VCSServer. I suggest all file configuration issues (this and #5) be given to Thom.

12. Garbage collection of behaviors on stack (Tom?)
- an item for Brent and Thom to work on. More specifically this might be something Thom can use to dive into AUV code given he's not at all familiar with how it is sturcutred other than having skimmed it some time ago.

13. Failure tracking during development
- this item relates to code checked in partially by Conor which might need modification and used for development time tracking and fixing of bugs. It also relates to issues in identifying a cause of failure and to see how improvements/augmentation can be done.

14. Set up a notification mechanism of which behavior is currently running on the stack
- this is important so in the future T-REX can work around anomalies when lower level behaviors are superseded and T-REX needs to be contexually aware of vehicle state.

15. For a light weight VCS server (T-REX Jr) [see attachment to this email]
a. fire gulper without Layered Control
b. VCSServer has no expectation on T-REX activity (i.e there is no need to track pings anymore) and it is robust to the case where T-REX is dead; this property should also be checked and applied to the StatePublisher
c. VCSServer does not launch the Supervisor but is instead launched by it and reflects the nominal operation of the vehicle (ie what Hans does)
- this is an important (therefore in bold) part of our development to demonstrate this year and will make us more ubiquitous and possibly something Hans can use on his own provided for feature tracking the features are already encoded in the clusters that have been created.

16. Track multiple sensor signals for firing gulpers
(important and useful for T-REX Jr). Share task with Angel.
- we will definitely need this in the near term (therefore also in bold). However the way in which we need to put this development feature together is in a way that differentiates us from what Rob and Layered Control can do.

17. Connecting a synthetic ocean model to the Linux Sim
- current Sim (both QNX and its Linux port) are limited in not being able to model dynamic features in the ocean. Since T-REX is going after unstructured phenomenon in the ocean, we need a way to be able to model them on shore to test the system more robustly. Mike Godin has some kind of a connection with a ROMS model. We should connect with him to understand what has been done to date.

Sea dates mission targets:

18. We agreed that for the week of Sept 7th when AUV-Linux will be tested and if/when we get a chance to do a full days mission we will use RC14\+ (i.e RC14 with the temporal constraint fix from the July 1st mission). We do not want to have any other changes brought in even if this is a test of Linux and not T-REX.

19. For the Oct 1st mission we should target (subject to agreement with John) an INL survey but use the updated 5 reactor configuration from Angel.

20. I was under the impression from an earlier schedule from John that Oct 26th is an autonomy day. But Rev 8 of the Zephyr schedule does not show that. This needs to be worked out with Teresa/Chris Grech in addition to the two floater days we still have.

Plan visualization: (Alhayat)

Both the items are things we should get Alhayat to develop during his stay, and one which seems doable. However his approach thus far is not wholly satisfactory and we need a way to have interpolation of sensor data clearly visible within Google Earth or COVE. So this should be carefully supervised.

21. Visualize plans with track: show high-level tokens on the track with Google Earth (check on status of COVE and keep that engagement going)
- do with using KML files first.
22. Make the visualization dynamic so real-time evolution can be shown in GE.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355477</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">16252999</id>
<property name="body"><![CDATA[This page will refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09
* [TREX Volume Survey Operations] procedure for operations group to start the TREX volume survey
* [Autonomy Deployment Log]

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [Monte-Carlo Testing guide|https://oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect
* [Autonomy Plans for 2010 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans10.pdf]
* [Autonomy Plans for 2011 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans11.pdf]
* [Decision Support for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/CANON.pdf]
* [TREX and DSS Communication Protocol for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Comm-strategy.pdf]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16220233</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">16252997</id>
<property name="body"><![CDATA[This page will refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09
* [TREX Volume Survey Operations] procedure for operations group to start the TREX volume survey
* [Autonomy Deployment Log]

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [Monte-Carlo Testing guide|https://oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect
* [Autonomy Plans for 2010 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans10.pdf]
* [Autonomy Plans for 2011 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans11.pdf]
* [Decision Support for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/CANON.pdf]
* [TREX and DSS Communication Protocol for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Comm-strategy.pdf]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16220231</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388206</id>
<property name="body"><![CDATA[&nbsp;Priority:&nbsp; P1="must have", P2="should have", P3="nice to have"
\\

*Core T-REX issues:*

1. Merge front branch with mainline in SVN. \[P1\]
- The current state of T-REX is divided between the HEAD and the Front branches. There are aspects of the HEAD particularly Angel's 5 reactor configuration which should be folded in. Ideally we should merge the Front branch into the mainline and declare the Front branch dead.
-* Updates have been made to pull Front branch (RC15) to the head \[P1, Frederic, Done Jul 16\]
-* Test and Validation of the SVN head \[Frederic, Angel, in progress Jul 20, goal is to complete Jul 25\]

2. Move to Google/T-REX \[P2\] - (not crucial for MBARI, but should be done to insure clean tech transfer&nbsp;and efficient evolution in the future)
- move our code to Google \[P2\]
- clean up interface w/ EUROPA esp. for ESA project \[P2, Frederic, goal mid-Sept\]
-* Subtask: bring in latest EUROPA code to test the interface&nbsp;\[P2, \]

\\
- this is something long overdue and we need to work on primarily to ensure some bugs found in T-REX core and some key issues in EUROPA are incorporated. Plus not doing so incrementally and ever so often will lead to different trajectories of code base which might kill us later on. Specifically for the ESA project the last item needs to be undertaken anyway since APSI will need to replace EUROPA.

3. Improvements to PSim for AUV dynamics model (partially checked in to Front branch)
- this is to make the PSim reflect the uncertainty of the environment as well as to do a better job reflecting the dynamics of the AUV itself. This also ties in with the comment from Brent to patch the PSim to reflect the latency of execution of commands sent to the VCS. This should be managed by Brent or Thom as it is a relatively independent model and will still be a strong basis for testing purposes for further development of TREX.&nbsp;&nbsp; \[P1, Brent, Frederic to meet with Brent on Wednesday, needed by mid-August in order to be used by Sept. sea date\]

4. Cleaner separation of model (e.g rules.nddl)&nbsp; \[P3\]
- this involves (along with #5 below) of cleanly separating the model elements needed for a specific mission and structuring the code base in a way that is more intuitive instead of lumping all the constraints in one file.

5. Better configuration mgmt. of files in T-REX
- related to above, but more focused on the directory structure and build process of T-REX and moving away from the ctd2007 based directory structure.

6. Send more data from VCS to T-REX
- by putting the lat/long into state publisher which in turn gets put in vehicle state timeline, we will be able to use the log files directly for Google Earth visualization without doing convulsions as Alhayat needs to do now.

7. Modeling how to break up a survey or goal and continue/need for interruption
- this is an important (hence in bold font) issue that needs to be tackled and also something we signed up to do this year. Namely to be able to interrupt a mission and then resume. It will show a clear demarcation with the existing Layered Control work and really demonstrate that we can use plan projection for tasks which are less reactive and interrupt driven. It primarily involves modeling and will require you to be involved. It might be a case study for more complex modeling where Brent/Thom can look over your shoulder. We should aim to do this task as soon as possible given its utility (including what Julio seems to have mentioned on Monday) and its demonstration of clear implication of our work, not to mention publication possibilities.

Angel:

8. Implementation of parametric functions for Gulper usage
- this is the effort Angel is focusing on now and will provide utility-estimate based means to figure out when to trigger gulpers. More importantly this could be used in conjunction with T-REX Jr. where no deliberation for nav/control will be necessary and the standard script based approach in concert with cluster based estimation and these functions drive how a light-weight version of T-REX can be used. I have made this in bold font also given it should be considered on the critical path.

9. Resource reasoning (i.e how many gulpers left for the remainder of the mission) with and without task interruption
- this task is tied in with #7 above as one starting point for resource reasoning albeit of a simpler variety. The objective would be to see if goals can be executed/dropped in the light of existing gulper availability at sea and to do simple resource reasoning. In the event that when our AUVs have 48 hour battery charge and can revisit the location in the bay after an initial survey, the need to do this simple kind of reasoning increases.

T-REX items for Brent/Thom for '09

10. Psim modeling latency
- this issue is directly related to #3 above. And would be a nice clean sub-task that Brent can work on.

11. VCS Config file (e.g ctd1 in devices. cfg)
- this should be wrapped up with #5 above to get an overall clean approach to dealing with varying configurations. Not only should the T-REX core be properly and systematically reconfigured, but so should the VCSServer. I suggest all file configuration issues (this and #5) be given to Thom.

12. Garbage collection of behaviors on stack (Tom?)
- an item for Brent and Thom to work on. More specifically this might be something Thom can use to dive into AUV code given he's not at all familiar with how it is sturcutred other than having skimmed it some time ago.

13. Failure tracking during development
- this item relates to code checked in partially by Conor which might need modification and used for development time tracking and fixing of bugs. It also relates to issues in identifying a cause of failure and to see how improvements/augmentation can be done.

14. Set up a notification mechanism of which behavior is currently running on the stack
- this is important so in the future T-REX can work around anomalies when lower level behaviors are superseded and T-REX needs to be contexually aware of vehicle state.

15. For a light weight VCS server (T-REX Jr) [see attachment to this email]
a. fire gulper without Layered Control
b. VCSServer has no expectation on T-REX activity (i.e there is no need to track pings anymore) and it is robust to the case where T-REX is dead; this property should also be checked and applied to the StatePublisher
c. VCSServer does not launch the Supervisor but is instead launched by it and reflects the nominal operation of the vehicle (ie what Hans does)
- this is an important (therefore in bold) part of our development to demonstrate this year and will make us more ubiquitous and possibly something Hans can use on his own provided for feature tracking the features are already encoded in the clusters that have been created.

16. Track multiple sensor signals for firing gulpers
(important and useful for T-REX Jr). Share task with Angel.
- we will definitely need this in the near term (therefore also in bold). However the way in which we need to put this development feature together is in a way that differentiates us from what Rob and Layered Control can do.

17. Connecting a synthetic ocean model to the Linux Sim
- current Sim (both QNX and its Linux port) are limited in not being able to model dynamic features in the ocean. Since T-REX is going after unstructured phenomenon in the ocean, we need a way to be able to model them on shore to test the system more robustly. Mike Godin has some kind of a connection with a ROMS model. We should connect with him to understand what has been done to date.

Sea dates mission targets:

18. We agreed that for the week of Sept 7th when AUV-Linux will be tested and if/when we get a chance to do a full days mission we will use RC14\+ (i.e RC14 with the temporal constraint fix from the July 1st mission). We do not want to have any other changes brought in even if this is a test of Linux and not T-REX.

19. For the Oct 1st mission we should target (subject to agreement with John) an INL survey but use the updated 5 reactor configuration from Angel.

20. I was under the impression from an earlier schedule from John that Oct 26th is an autonomy day. But Rev 8 of the Zephyr schedule does not show that. This needs to be worked out with Teresa/Chris Grech in addition to the two floater days we still have.

Plan visualization: (Alhayat)

Both the items are things we should get Alhayat to develop during his stay, and one which seems doable. However his approach thus far is not wholly satisfactory and we need a way to have interpolation of sensor data clearly visible within Google Earth or COVE. So this should be carefully supervised.

21. Visualize plans with track: show high-level tokens on the track with Google Earth (check on status of COVE and keep that engagement going)
- do with using KML files first.
22. Make the visualization dynamic so real-time evolution can be shown in GE.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355474</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">16252996</id>
<property name="body"><![CDATA[h1. AUV Wiki


h2. Development

[Linux Port]
[Source Code]
[AUV Linux - Driver Port and Validation]
[AUV Build and Test Server Setup]\\
[Autonomy]
[Decision Support System]

h2. Meeting Minutes

[2009-04-13 Autonomy project|https://oceana.mbari.org/confluence/display/AUV/2009-04-13+Autonomy+project]

[2007-03-26 Autonomy project|Minutes from 2007-03-26--Status meeting on AUV Deliberative Autonomy project]
[2007-03-19 Autonomy project|Minutes from 2007-03-19--Status meeting on AUV Deliberative Autonomy project]
[2007-03-05 Autonomy project|Minutes from 2007-03-05--Status meeting on AUV Deliberative Autonomy project]
[2007-02-20 Autonomy project|Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]

h2. Miscellaneous

[MATLAB Tools]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16220230</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388204</id>
<property name="body"><![CDATA[&nbsp;Priority:&nbsp; P1="must have", P2="should have", P3="nice to have"\\

Core T-REX issues:

1. Merge front branch with mainline in SVN. \[P1\]
- The current state of T-REX is divided between the HEAD and the Front branches. There are aspects of the HEAD particularly Angel's 5 reactor configuration which should be folded in. Ideally we should merge the Front branch into the mainline and declare the Front branch dead.
-* Updates have been made to pull Front branch (RC15) to the head \[Frederic, Done Jul 16\]
-* Test and Validation of the SVN head \[Frederic, Angel, in progress Jul 20, goal is to complete Jul 25\]

2. Move to Google/T-REX \[P2\]
+ move our code to Google
+ bring in latest EUROPA code
+ clean up interface w/ EUROPA esp. for ESA project
- this is something long overdue and we need to work on primarily to ensure some bugs found in T-REX core and some key issues in EUROPA are incorporated. Plus not doing so incrementally and ever so often will lead to different trajectories of code base which might kill us later on. Specifically for the ESA project the last item needs to be undertaken anyway since APSI will need to replace EUROPA.

3. Improvements to PSim for AUV dynamics model (partially checked in to Front branch)
- this is to make the PSim reflect the uncertainty of the environment as well as to do a better job reflecting the dynamics of the AUV itself. This also ties in with the comment from Brent to patch the PSim to reflect the latency of execution of commands sent to the VCS. This should be managed by Brent or Thom as it is a relatively independent model and will still be a strong basis for testing purposes for further development of TREX.

4. Cleaner separation of model (e.g rules.nddl)
- this involves (along with #5 below) of cleanly separating the model elements needed for a specific mission and structuring the code base in a way that is more intuitive instead of lumping all the constraints in one file.

5. Better configuration mgmt. of files in T-REX
- related to above, but more focused on the directory structure and build process of T-REX and moving away from the ctd2007 based directory structure.

6. Send more data from VCS to T-REX
- by putting the lat/long into state publisher which in turn gets put in vehicle state timeline, we will be able to use the log files directly for Google Earth visualization without doing convulsions as Alhayat needs to do now.

7. Modeling how to break up a survey or goal and continue/need for interruption
- this is an important (hence in bold font) issue that needs to be tackled and also something we signed up to do this year. Namely to be able to interrupt a mission and then resume. It will show a clear demarcation with the existing Layered Control work and really demonstrate that we can use plan projection for tasks which are less reactive and interrupt driven. It primarily involves modeling and will require you to be involved. It might be a case study for more complex modeling where Brent/Thom can look over your shoulder. We should aim to do this task as soon as possible given its utility (including what Julio seems to have mentioned on Monday) and its demonstration of clear implication of our work, not to mention publication possibilities.

Angel:

8. Implementation of parametric functions for Gulper usage
- this is the effort Angel is focusing on now and will provide utility-estimate based means to figure out when to trigger gulpers. More importantly this could be used in conjunction with T-REX Jr. where no deliberation for nav/control will be necessary and the standard script based approach in concert with cluster based estimation and these functions drive how a light-weight version of T-REX can be used. I have made this in bold font also given it should be considered on the critical path.

9. Resource reasoning (i.e how many gulpers left for the remainder of the mission) with and without task interruption
- this task is tied in with #7 above as one starting point for resource reasoning albeit of a simpler variety. The objective would be to see if goals can be executed/dropped in the light of existing gulper availability at sea and to do simple resource reasoning. In the event that when our AUVs have 48 hour battery charge and can revisit the location in the bay after an initial survey, the need to do this simple kind of reasoning increases.

T-REX items for Brent/Thom for '09

10. Psim modeling latency
- this issue is directly related to #3 above. And would be a nice clean sub-task that Brent can work on.

11. VCS Config file (e.g ctd1 in devices. cfg)
- this should be wrapped up with #5 above to get an overall clean approach to dealing with varying configurations. Not only should the T-REX core be properly and systematically reconfigured, but so should the VCSServer. I suggest all file configuration issues (this and #5) be given to Thom.

12. Garbage collection of behaviors on stack (Tom?)
- an item for Brent and Thom to work on. More specifically this might be something Thom can use to dive into AUV code given he's not at all familiar with how it is sturcutred other than having skimmed it some time ago.

13. Failure tracking during development
- this item relates to code checked in partially by Conor which might need modification and used for development time tracking and fixing of bugs. It also relates to issues in identifying a cause of failure and to see how improvements/augmentation can be done.

14. Set up a notification mechanism of which behavior is currently running on the stack
- this is important so in the future T-REX can work around anomalies when lower level behaviors are superseded and T-REX needs to be contexually aware of vehicle state.

15. For a light weight VCS server (T-REX Jr) [see attachment to this email]
a. fire gulper without Layered Control
b. VCSServer has no expectation on T-REX activity (i.e there is no need to track pings anymore) and it is robust to the case where T-REX is dead; this property should also be checked and applied to the StatePublisher
c. VCSServer does not launch the Supervisor but is instead launched by it and reflects the nominal operation of the vehicle (ie what Hans does)
- this is an important (therefore in bold) part of our development to demonstrate this year and will make us more ubiquitous and possibly something Hans can use on his own provided for feature tracking the features are already encoded in the clusters that have been created.

16. Track multiple sensor signals for firing gulpers
(important and useful for T-REX Jr). Share task with Angel.
- we will definitely need this in the near term (therefore also in bold). However the way in which we need to put this development feature together is in a way that differentiates us from what Rob and Layered Control can do.

17. Connecting a synthetic ocean model to the Linux Sim
- current Sim (both QNX and its Linux port) are limited in not being able to model dynamic features in the ocean. Since T-REX is going after unstructured phenomenon in the ocean, we need a way to be able to model them on shore to test the system more robustly. Mike Godin has some kind of a connection with a ROMS model. We should connect with him to understand what has been done to date.

Sea dates mission targets:

18. We agreed that for the week of Sept 7th when AUV-Linux will be tested and if/when we get a chance to do a full days mission we will use RC14\+ (i.e RC14 with the temporal constraint fix from the July 1st mission). We do not want to have any other changes brought in even if this is a test of Linux and not T-REX.

19. For the Oct 1st mission we should target (subject to agreement with John) an INL survey but use the updated 5 reactor configuration from Angel.

20. I was under the impression from an earlier schedule from John that Oct 26th is an autonomy day. But Rev 8 of the Zephyr schedule does not show that. This needs to be worked out with Teresa/Chris Grech in addition to the two floater days we still have.

Plan visualization: (Alhayat)

Both the items are things we should get Alhayat to develop during his stay, and one which seems doable. However his approach thus far is not wholly satisfactory and we need a way to have interpolation of sensor data clearly visible within Google Earth or COVE. So this should be carefully supervised.

21. Visualize plans with track: show high-level tokens on the track with Google Earth (check on status of COVE and keep that engagement going)
- do with using KML files first.
22. Make the visualization dynamic so real-time evolution can be shown in GE.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355472</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388202</id>
<property name="body"><![CDATA[Core T-REX issues:

1. Merge front branch with mainline in SVN. 
	- the current state of T-REX is divided between the HEAD and the Front branches. There are aspects of the HEAD particularly Angel's 5 reactor configuration which should be folded in. Ideally we should merge the Front branch into the mainline and declare the Front branch dead.

2. Move to Google/T-REX
	+ move our code to Google
	+ bring in latest EUROPA code
	+ clean up interface w/ EUROPA esp. for ESA project

	- this is something long overdue and we need to work on primarily to ensure some bugs found in T-REX core and some key issues in EUROPA are incorporated. Plus not doing so incrementally and ever so often will lead to different trajectories of code base which might kill us later on. Specifically for the ESA project the last item needs to be undertaken anyway since APSI will need to replace EUROPA.
	
3. Improvements to PSim for AUV dynamics model (partially checked in to Front branch)
	- this is to make the PSim reflect the uncertainty of the environment as well as to do a better job reflecting the dynamics of the AUV itself. This also ties in with the comment from Brent to patch the PSim to reflect the latency of execution of commands sent to the VCS. This should be managed by Brent or Thom as it is a relatively independent model and will still be a strong basis for testing purposes for further development of TREX.

4. Cleaner separation of model (e.g rules.nddl)
	- this involves (along with #5 below) of cleanly separating the model elements needed for a specific mission and structuring the code base in a way that is more intuitive instead of lumping all the constraints in one file.

5. Better configuration mgmt. of files in T-REX
	- related to above, but more focused on the directory structure and build process of T-REX and moving away from the ctd2007 based directory structure.

6. Send more data from VCS to T-REX
	- by putting the lat/long into state publisher which in turn gets put in vehicle state timeline, we will be able to use the log files directly for Google Earth visualization without doing convulsions as Alhayat needs to do now. 


7. Modeling how to break up a survey or goal and continue/need for interruption
	- this is an important (hence in bold font) issue that needs to be tackled and also something we signed up to do this year. Namely to be able to interrupt a mission and then resume. It will show a clear demarcation with the existing Layered Control work and really demonstrate that we can use plan projection for tasks which are less reactive and interrupt driven. It primarily involves modeling and will require you to be involved. It might be a case study for more complex modeling where Brent/Thom can look over your shoulder. We should aim to do this task as soon as possible given its utility (including what Julio seems to have mentioned on Monday) and its demonstration of clear implication of our work, not to mention publication possibilities.

Angel:

8. Implementation of parametric functions for Gulper usage
	- this is the effort Angel is focusing on now and will provide utility-estimate based means to figure out when to trigger gulpers. More importantly this could be used in conjunction with T-REX Jr. where no deliberation for nav/control will be necessary and the standard script based approach in concert with cluster based estimation and these functions drive how a light-weight version of T-REX can be used. I have made this in bold font also given it should be considered on the critical path.

9. Resource reasoning (i.e how many gulpers left  for the remainder of the mission) with and without task interruption
	- this task is tied in with #7 above as one starting point for resource reasoning albeit of a simpler variety. The objective would be to see if goals can be executed/dropped in the light of existing gulper availability at sea and to do simple resource reasoning. In the event that when our AUVs have 48 hour battery charge and can revisit the location in the bay after an initial survey, the need to do this simple kind of reasoning increases.


T-REX items for Brent/Thom for '09

10. Psim modeling latency
	- this issue is directly related to #3 above. And would be a nice clean sub-task that Brent can work on. 

11. VCS Config file (e.g ctd1 in devices. cfg)
	- this should be wrapped up with #5 above to get an overall clean approach to dealing with varying configurations. Not only should the T-REX core be properly and systematically reconfigured, but so should the VCSServer. I suggest all file configuration issues (this and #5) be given to Thom.

12. Garbage collection of behaviors on stack (Tom?)
	- an item for Brent and Thom to work on. More specifically this might be something Thom can use to dive into AUV code given he's not at all familiar with how it is sturcutred other than having skimmed it some time ago. 

13. Failure tracking during development
	- this item relates to code checked in partially by Conor which might need modification and used for development time tracking and fixing of bugs. It also relates to issues in identifying a cause of failure and to see how improvements/augmentation can be done.

14. Set up a notification mechanism of which behavior is currently running on the stack
	- this is important so in the future T-REX can work around anomalies when lower level behaviors are superseded and T-REX needs to be contexually aware of vehicle state.

15. For a light weight VCS server (T-REX Jr) [see attachment to this email]
	a. fire gulper without Layered Control
	b. VCSServer has no expectation on T-REX activity (i.e there is no need to track pings anymore) and it is robust to the case where T-REX is dead; this property should also be checked and applied to the StatePublisher 
	c. VCSServer does not launch the Supervisor but is instead launched by it and reflects the nominal operation of the vehicle (ie what Hans does)
 	- this is an important (therefore in bold) part of our development to demonstrate this year and will make us more ubiquitous and possibly something Hans can use on his own provided for feature tracking the features are already encoded in the clusters that have been created.

16. Track multiple sensor signals for firing gulpers
	(important and useful for T-REX Jr). Share task with Angel.
	- we will definitely need this in the near term (therefore also in bold). However the way in which we need to put this development feature together is in a way that differentiates us from what Rob and Layered Control can do.

17. Connecting a synthetic ocean model to the Linux Sim
	- current Sim (both QNX and its Linux port) are limited in not being able to model dynamic features in the ocean. Since T-REX is going after unstructured phenomenon in the ocean, we need a way to be able to model them on shore to test the system more robustly. Mike Godin has some kind of a connection with a ROMS model. We should connect with him to understand what has been done to date.

Sea dates mission targets:

18. We agreed that for the week of Sept 7th when AUV-Linux will be tested and if/when we get a chance to do a full days mission we will use RC14+ (i.e RC14 with the temporal constraint fix from the July 1st mission). We do not want to have any other changes brought in even if this is a test of Linux and not T-REX.

19. For the  Oct 1st mission we should target (subject to agreement with John) an  INL survey but use the updated 5  reactor configuration from Angel. 

20. I was under the impression from an earlier schedule from John that Oct 26th is an autonomy day. But Rev 8 of the Zephyr schedule does not show that. This needs to be worked out with Teresa/Chris Grech in addition to the two floater days we still have.

Plan visualization: (Alhayat)

Both the items are things we should get Alhayat to develop during his stay, and one which seems doable. However his approach thus far is not wholly satisfactory and we need a way to have interpolation of sensor data clearly visible within Google Earth or COVE. So this should be carefully supervised.

21. Visualize plans with track: show high-level tokens on the track with Google Earth (check on status of COVE and keep that engagement going)
	- do with using KML files first.
22. Make the visualization dynamic so real-time evolution can be shown in GE.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355470</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">14221325</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#svn] Give a view of the TREX development branches and the external dependencies
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. SVN version and dependencies

{anchor:svn}
The following picture illustrates the current svn tree with active and dead branches. 
!TREX-svn.png|align=centre!

There are 3 active branches in TREX :
* the trunk which is the version we are now using on the AUV (since June 2010)
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk
{code}
* the multisim branch where the Monte-Carlo simulation is now connected to the auv-linux simulator
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/branches/multisim
{code}
* the Europa_independent branch which is a full redesign of TREX in order to make it independent of Europa (allowing 3rd parties to integrate their own planner) and is also closer to the formal definition of the architecture (see [AAMAS paper|http://www.mbari.org/autonomy/Publications/aamas10.pdf])
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/branches/multisim
{code}


The two first branches rely on the same 3rd parties components and are fairly similar in the way they are compiled. The external tools needed are :
* *jam* ([http://www.perforce.com/jam/jam.html]) This is a make replacement utility used to compile TREX. The version used during development was jam 2.5
* *boost* ([http://www.boost.org/]) A set of libraries for advanced C++ programming. The version required is 1.36 and above.
* *Europa 2.1.1* ([http://babelfish.arc.nasa.gov/trac/europa]) This is an old version of a planner development at NASA-Ames. The easiest way to have this version is to copy the full Europa directory from dorado1 account on threadfish :
{code:none}
% scp -r dorado1@threadfish:coding/Europa .
{code} 
Europa have few extra dependencies that are given on [this  page|http://babelfish.arc.nasa.gov/trac/europa/wiki/EuropaInstallation]

The Europa independent branch do not depend on Europa and will future the latest version of it in the future. It still depends on boost (1.40.0 or above) and jam


h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
** PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

{warning:title=Important requirement}
All TREX build system and execution assumes that important variables are defined. There's a file 
{{devConfig}} that defines them for *bash*. More details about this are given on the section [#env]
{warning}

h1. Mac specific : installing development tools

\\

You need to have administration rights on this computer&nbsp;

on the Finder : select menu Go > Connect to Server ...

on the invite type : cifs://tornado.shore.mbari.org and <OK>

enter your login and password &nbsp;

select AppsAND <OK>

under the directory Macs/DevelopperTools/XcodeTools select the version of xcode for the OS version of your computer (10.6 = Snow Leopard) and get the xcode*.dmg file

you can then eject tornado disk

double click on the xcode*.dmg to mount the file

and then on Xcode.mpkg to start the installation&nbsp;

h2. Building our old version of Europa/Plasma

&nbsp;To apply the patch and build Europa/Plasma with GCC 4.3:
{code:none}
% cd $PLASMA_HOME
% patch -p1 < plasma-gcc4.3.patch  #i.e. the attached patch file
% jam && jam
{code}
\\

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
To compile TREX libraries, first download the Boost C+\+ library ([http://www.boost.org/]) and install it following the instructions outlined in the site.  Then compile TREX in a similar manner as Europa:
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated via a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher.

&nbsp;Note that threadfish.shore has a *ready to go binary* for AUV-Linux. Log in as 'dorado1' and cd down to 'coding/auv-linux'.

h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% omniNames&
% notifd -c $OMNINOTIFY_HOME/channel.cfg&

% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] <nstep>
Use <nstep> = 50
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">14188557</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">14221323</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#svn] Give a view of the TREX development branches and the external dependencies
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. SVN version and dependencies

{anchor:svn}
The following picture illustrates the current svn tree with active and dead branches. 
!TREX-svn.png|align=centre!

There are 3 active branches in TREX :
* the trunk which is the version we are now using on the AUV (since June 2010)
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk
{code}
* the multisim branch where the Monte-Carlo simulation is now connected to the auv-linux simulator
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/branches/multisim
{code}
* the Europa_independent branch which is a full redesign of TREX in order to make it independent of Europa (allowing 3rd parties to integrate their own planner) and is also closer to the formal definition of the architecture (see [AAMAS paper|http://www.mbari.org/autonomy/Publications/aamas10.pdf])
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/branches/multisim
{code}


The two first branches rely on the same 3rd parties components and are fairly similar in the way they are compiled. The external tools needed are :
* *jam* ([http://www.perforce.com/jam/jam.html]) This is a make replacement utility used to compile TREX. The version used during development was jam 2.5
* *boost* ([http://www.boost.org/]) A set of libraries for advanced C++ programming. The version required is 1.36 and above.
* *Europa 2.1.1* ([http://babelfish.arc.nasa.gov/trac/europa]) This is an old version of a planner development at NASA-Ames. The easiest way to have this version is to copy the full Europa directory from dorado1 account on threadfish :
{code:none}
% scp -r dorado1@threadfish:coding/Europa .
{code} 
Europa have few extra dependencies that are given on [this  page|http://babelfish.arc.nasa.gov/trac/europa/wiki/EuropaInstallation]

The Europa independent branch do not depend on Europa and will future the latest version of it in the future. It still depends on boost (1.40.0 or above) and jam


h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
** PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

{warning:title=Important requirement}
All TREX build system and execution assumes that important variables are defined. There's a file 
{{devConfig}} that defines them for *bash*. More details about this are given on the section #env
{warning}

h1. Mac specific : installing development tools

\\

You need to have administration rights on this computer&nbsp;

on the Finder : select menu Go > Connect to Server ...

on the invite type : cifs://tornado.shore.mbari.org and <OK>

enter your login and password &nbsp;

select AppsAND <OK>

under the directory Macs/DevelopperTools/XcodeTools select the version of xcode for the OS version of your computer (10.6 = Snow Leopard) and get the xcode*.dmg file

you can then eject tornado disk

double click on the xcode*.dmg to mount the file

and then on Xcode.mpkg to start the installation&nbsp;

h2. Building our old version of Europa/Plasma

&nbsp;To apply the patch and build Europa/Plasma with GCC 4.3:
{code:none}
% cd $PLASMA_HOME
% patch -p1 < plasma-gcc4.3.patch  #i.e. the attached patch file
% jam && jam
{code}
\\

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
To compile TREX libraries, first download the Boost C+\+ library ([http://www.boost.org/]) and install it following the instructions outlined in the site.  Then compile TREX in a similar manner as Europa:
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated via a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher.

&nbsp;Note that threadfish.shore has a *ready to go binary* for AUV-Linux. Log in as 'dorado1' and cd down to 'coding/auv-linux'.

h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% omniNames&
% notifd -c $OMNINOTIFY_HOME/channel.cfg&

% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] <nstep>
Use <nstep> = 50
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">14188555</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004296</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h1. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{panel:title=List of trex existing timelines}
 * input: none
 * output: 
a list of all the timelines trex currently have
{panel}

{panel:title=Content of a timeline}

{panel}

 

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971528</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388221</id>
<property name="body"><![CDATA[Sept.&nbsp;9th&nbsp;Sea date: RC15 with auv-linux
* RC15 with auv-linux, 2 CPU's.&nbsp;&nbsp;&nbsp; No change to TREX.&nbsp;&nbsp; Front Following
* PSIM (nightly PSIM + monte carlo), FSIM (flight code test 150x speed), LSIM (cycle accurate simulator, analogous to QSIM), VSIM (with Linux), HITL (with Linux)
** PSIM with latency modelling \[Brent\]&nbsp;
** LSIM \-&nbsp;'angus'.&nbsp;&nbsp; Substantial task to get test platform setup. \[Thom\]
** QSIM needed for validation of TREX (LSIM should then work no problem).&nbsp;
** VSIM with linux harddisk (at least twice, preferrably 5 times)
** Task:&nbsp;&nbsp;examine \*.cfg files used with QNX and insure they are the same when used with AUV-Linux
** AUV-Linux 'check-in', are we testing with what is used by DMO.&nbsp;&nbsp; Hans indicated he would use the head of CVS.&nbsp;&nbsp;
* \[P1, file bugs against auv-linux for changes needed for Sept sea date to insure publishing log files (McCann) is working).
\\

Oct. 1st &nbsp;Sea date:
* the head of TREX, code&nbsp;freeze by August 21st.
* Changes:
** Merged updates from RC15 into the head.&nbsp;
** Volume Survey (TBD, per John Ryan or Bob V.).&nbsp;&nbsp;&nbsp; &nbsp;
** Improved Gulper resource management (major enhancement, Angel)
** Redistributed / new partition of the model.&nbsp;&nbsp; Adding robustness to the model with more flexible constraints.&nbsp;&nbsp;
*** Work will need to be done for front following (angle has already updated volume survey).
** Transect prediction enhancement (looks further into the volume survey to calculate the min/max transects which are dynamically update)&nbsp;
\\

Date Unknown: Smart Gulper - goal would be November timeframe \[Brent\]
* Using TREX to manage Gulper sampling during a classical scripted survey
* Transition to use Corba to collect sensor data to determine Gulper firing (retiring VCS server).&nbsp;&nbsp; First step towards testing the Corba transition.
* Could be a singe CPU deployment (two user processes)
\\

Priority:&nbsp; P1="must have", P2="should have", P3="nice to have"
\\

*Core T-REX issues:*

1. Merge front branch with mainline in SVN. \[P1\]
- The current state of T-REX is divided between the HEAD and the Front branches. There are aspects of the HEAD particularly Angel's 5 reactor configuration which should be folded in. Ideally we should merge the Front branch into the mainline and declare the Front branch dead.
-* Updates have been made to pull Front branch (RC15) to the head \[P1, Frederic, Done Jul 16\]
-* Test and Validation of the SVN head \[Frederic, Angel, in progress Jul 20, goal is to complete Jul 25\]

2. Move to Google/T-REX \[P2\] - (not crucial for MBARI, but should be done to insure clean tech transfer&nbsp;and efficient evolution in the future)
- move our code to Google \[P2\]
- clean up interface w/ EUROPA esp. for ESA project \[P2, Frederic, goal mid-Sept\]
-* Subtask: bring in latest EUROPA code to test the interface&nbsp;\[P2, Frederic&nbsp;\]

\\
- this is something long overdue and we need to work on primarily to ensure some bugs found in T-REX core and some key issues in EUROPA are incorporated. Plus not doing so incrementally and ever so often will lead to different trajectories of code base which might kill us later on. Specifically for the ESA project the last item needs to be undertaken anyway since APSI will need to replace EUROPA.

3. Improvements to PSim for AUV dynamics model (partially checked in to Front branch)
- this is to make the PSim reflect the uncertainty of the environment as well as to do a better job reflecting the dynamics of the AUV itself. This also ties in with the comment from Brent to patch the PSim to reflect the latency of execution of commands sent to the VCS. This should be managed by Brent or Thom as it is a relatively independent model and will still be a strong basis for testing purposes for further development of TREX.&nbsp;&nbsp; \[P1, Brent, Frederic to meet with Brent on Wednesday, needed by mid-August in order to be used by Sept. sea date\]

4. Cleaner separation of model (e.g rules.nddl)&nbsp; \[P3, time should be allocated in the schedule to allow refactoring, test plan is to use .valid files to verify model correctness.&nbsp;&nbsp; Goal would be to test at sea October or later\]
- this involves (along with #5 below) of cleanly separating the model elements needed for a specific mission and structuring the code base in a way that is more intuitive instead of lumping all the constraints in one file.

5. Better configuration mgmt. of files in T-REX \[P3 - plan for December, since build process changes are disruptive\]
- related to above, but more focused on the directory structure and build process of T-REX and moving away from the ctd2007 based directory structure.

6. Send more data from VCS to T-REX \[P1 - plan for October, low risk modification\]
- by putting the lat/long into state publisher which in turn gets put in vehicle state timeline, we will be able to use the log files directly for Google Earth visualization without doing convulsions as Alhayat needs to do now.

7. Modeling how to break up a survey or goal and continue/need for interruption \[Potentially high risk modification, will require re-engineering of top level models and potential modification of TREX.&nbsp;&nbsp;&nbsp;&nbsp; Volume survey presents an easier 'restart' manually, side note from Frederic:&nbsp; Volume survey demonstrates the capability of TREX more than front following.).&nbsp;&nbsp;&nbsp; Plan for November/December, will likely 3 or months of effort (simulator and sea dates).&nbsp;&nbsp; We may not want to do this in 2009.
- this is an important (hence in bold font) issue that needs to be tackled and also something we signed up to do this year. Namely to be able to interrupt a mission and then resume. It will show a clear demarcation with the existing Layered Control work and really demonstrate that we can use plan projection for tasks which are less reactive and interrupt driven. It primarily involves modeling and will require you to be involved. It might be a case study for more complex modeling where Brent/Thom can look over your shoulder. We should aim to do this task as soon as possible given its utility (including what Julio seems to have mentioned on Monday) and its demonstration of clear implication of our work, not to mention publication possibilities.

Angel:

8. Implementation of parametric functions for Gulper usage \[P1 for Oct. 1\]
- this is the effort Angel is focusing on now and will provide utility-estimate based means to figure out when to trigger gulpers. More importantly this could be used in conjunction with T-REX Jr. where no deliberation for nav/control will be necessary and the standard script based approach in concert with cluster based estimation and these functions drive how a light-weight version of T-REX can be used. I have made this in bold font also given it should be considered on the critical path.

9. Resource reasoning (i.e how many gulpers left for the remainder of the mission) with and without task interruption.&nbsp; \[P2 since there are risk associated with the associated model changes, AND, Angel is gone end of Aug. not recommended for 2009\]
- this task is tied in with #7 above as one starting point for resource reasoning albeit of a simpler variety. The objective would be to see if goals can be executed/dropped in the light of existing gulper availability at sea and to do simple resource reasoning. In the event that when our AUVs have 48 hour battery charge and can revisit the location in the bay after an initial survey, the need to do this simple kind of reasoning increases.

T-REX items for Brent/Thom for '09

10. Psim modeling latency \[P1 Brent for Sept deployment, target is 2nd week in Aug\]
- this issue is directly related to #3 above. And would be a nice clean sub-task that Brent can work on.

11. VCS Config file (e.g ctd1 in devices. cfg)&nbsp; \[P3, this task may be elimated if we transition to Corba\]
- this should be wrapped up with #5 above to get an overall clean approach to dealing with varying configurations. Not only should the T-REX core be properly and systematically reconfigured, but so should the VCSServer. I suggest all file configuration issues (this and #5) be given to Thom.

12. Garbage collection of behaviors on stack (Tom O.)&nbsp;&nbsp; \[P3, Improves FSIM efficiency, November ?\]
* For longer missions, the stack size may be an issue (setpoint 0 inserted as IDLE instruction).&nbsp;&nbsp; Another option is to add an idle behaviour with a timeout and idle_stop behaviour to terminate idle.
* an item for Brent and Thom to work on. More specifically this might be something Thom can use to dive into AUV code given he's not at all familiar with how it is sturcutred other than having skimmed it some time ago.

13. Failure tracking during development&nbsp;and deployment&nbsp;\[P1\]
- this item relates to code checked in partially by Conor which might need modification and used for development time tracking and fixing of bugs. It also relates to issues in identifying a cause of failure and to see how improvements/augmentation can be done.
- Explaination:&nbsp; there is some instrumenting in TREX that facilitates debug, new developers need guidance on how to utilize the instrumentation output to understand what to fix/change. \[P1\]&nbsp;&nbsp;
-* Additional instrumentation or improvement to existing instrumentation \[P3\]
- Pre-deployment review&nbsp;with DMO of operation parameters (max speed, max depth, check-in frequency,&nbsp;localization (too&nbsp;close to shore)).&nbsp;&nbsp; Cruise plan with details (sensors, operational parms) \[P1\]&nbsp;
- Deployment results analysis for&nbsp;concise root cause on failures - deployment results report&nbsp;\[P1\]
\\

14. Set up a notification mechanism of which behavior is currently running on the stack (Tom)&nbsp; \[P3, November-December\]
- this is important so in the future T-REX can work around anomalies when lower level behaviors are superseded and T-REX needs to be contexually aware of vehicle state.

15. For a light weight VCS server (T-REX Jr) [see attachment to this email]&nbsp; \[P2 - date is TBD\]
- a. fire gulper without Layered Control
- b. VCSServer has no expectation on T-REX activity (i.e there is no need to track pings anymore) and it is robust to the case where T-REX is dead; this property should also be checked and applied to the StatePublisher
- c. VCSServer does not launch the Supervisor but is instead launched by it and reflects the nominal operation of the vehicle (ie what Hans does)
- this is an important (therefore in bold) part of our development to demonstrate this year and will make us more ubiquitous and possibly something Hans can use on his own provided for feature tracking the features are already encoded in the clusters that have been created.

16. Track multiple sensor signals for firing gulpers&nbsp;&nbsp; \[P2, follow-on to TREX-jr / SmartGulper, likely 2010\]
(important and useful for T-REX Jr). Share task with Angel.
- we will definitely need this in the near term (therefore also in bold). However the way in which we need to put this development feature together is in a way that differentiates us from what Rob and Layered Control can do.

17. Connecting a synthetic ocean model to the Linux Sim&nbsp; \[P2, Goal is November but could be 2010, Tom O.\]
- current Sim (both QNX and its Linux port) are limited in not being able to model dynamic features in the ocean. Since T-REX is going after unstructured phenomenon in the ocean, we need a way to be able to model them on shore to test the system more robustly. Mike Godin has some kind of a connection with a ROMS model. We should connect with him to understand what has been done to date.

Sea dates mission targets:

18. We agreed that for the week of Sept 7th when AUV-Linux will be tested and if/when we get a chance to do a full days mission we will use RC15 (i.e RC14 with the temporal constraint fix from the July 1st mission). We do not want to have any other changes brought in even if this is a test of Linux and not T-REX.

19. For the Oct 1st mission we should target (subject to agreement with John) an INL survey but use the updated 5 reactor configuration from Angel.

20. I was under the impression from an earlier schedule from John that Oct 26th is an autonomy day. But Rev 8 of the Zephyr schedule does not show that. This needs to be worked out with Teresa/Chris Grech in addition to the two floater days we still have.
\\

Plan visualization: (Alhayat)

Both the items are things we should get Alhayat to develop during his stay, and one which seems doable. However his approach thus far is not wholly satisfactory and we need a way to have interpolation of sensor data clearly visible within Google Earth or COVE. So this should be carefully supervised.&nbsp;&nbsp;&nbsp;
* Contact Google Earth team about missing features.

21. Visualize plans with track: show high-level tokens on the track with Google Earth (check on status of COVE and keep that engagement going)
- do with using KML files first. \[P1 - Done, Alhayat\]

22. Make the visualization dynamic so real-time evolution can be shown in GE (programmatic interface) (P2 - goal mid-Aug, Alhayat)
* Recommendation is javascript and GE as this seems far more stable and has a larger user base even for ocean based visualization.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355490</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388219</id>
<property name="body"><![CDATA[Sept.&nbsp;9th&nbsp;Sea date: RC15 with auv-linux
* RC15 with auv-linux, 2 CPU's.&nbsp;&nbsp;&nbsp; No change to TREX.&nbsp;&nbsp; Front Following
* PSIM (nightly PSIM + monte carlo), FSIM (flight code test 150x speed), LSIM (cycle accurate simulator, analogous to QSIM), VSIM (with Linux), HITL (with Linux)
** PSIM with latency modelling \[Brent\]&nbsp;
** LSIM \-&nbsp;'angus'.&nbsp;&nbsp; Substantial task to get test platform setup. \[Thom\]
** QSIM needed for validation of TREX (LSIM should then work no problem).&nbsp;
** VSIM with linux harddisk (at least twice, preferrably 5 times)
** Task:&nbsp;&nbsp;examine \*.cfg files used with QNX and insure they are the same when used with AUV-Linux
** AUV-Linux 'check-in', are we testing with what is used by DMO.&nbsp;&nbsp; Hans indicated he would use the head of CVS.&nbsp;&nbsp;
* \[P1, file bugs against auv-linux for changes needed for Sept sea date to insure publishing log files (McCann) is working).
\\

Oct. 1st &nbsp;Sea date:
* the head of TREX, code&nbsp;freeze by August 21st.
* Changes:
** Merged updates from RC15 into the head.&nbsp;
** Volume Survey (TBD, per John Ryan or Bob V.).&nbsp;&nbsp;&nbsp; &nbsp;
** Improved Gulper resource management (major enhancement, Angel)
** Redistributed / new partition of the model.&nbsp;&nbsp; Adding robustness to the model with more flexible constraints.&nbsp;&nbsp;
*** Work will need to be done for front following (angle has already updated volume survey).
** Transect prediction enhancement (looks further into the volume survey to calculate the min/max transects which are dynamically update)&nbsp;
\\

Date Unknown: Smart Gulper - goal would be November timeframe \[Brent\]
* Using TREX to manage Gulper sampling during a classical scripted survey
* Transition to use Corba to collect sensor data to determine Gulper firing (retiring VCS server).&nbsp;&nbsp; First step towards testing the Corba transition.
* Could be a singe CPU deployment (two user processes)
\\

Priority:&nbsp; P1="must have", P2="should have", P3="nice to have"
\\

*Core T-REX issues:*

1. Merge front branch with mainline in SVN. \[P1\]
- The current state of T-REX is divided between the HEAD and the Front branches. There are aspects of the HEAD particularly Angel's 5 reactor configuration which should be folded in. Ideally we should merge the Front branch into the mainline and declare the Front branch dead.
-* Updates have been made to pull Front branch (RC15) to the head \[P1, Frederic, Done Jul 16\]
-* Test and Validation of the SVN head \[Frederic, Angel, in progress Jul 20, goal is to complete Jul 25\]

2. Move to Google/T-REX \[P2\] - (not crucial for MBARI, but should be done to insure clean tech transfer&nbsp;and efficient evolution in the future)
- move our code to Google \[P2\]
- clean up interface w/ EUROPA esp. for ESA project \[P2, Frederic, goal mid-Sept\]
-* Subtask: bring in latest EUROPA code to test the interface&nbsp;\[P2, Frederic&nbsp;\]

\\
- this is something long overdue and we need to work on primarily to ensure some bugs found in T-REX core and some key issues in EUROPA are incorporated. Plus not doing so incrementally and ever so often will lead to different trajectories of code base which might kill us later on. Specifically for the ESA project the last item needs to be undertaken anyway since APSI will need to replace EUROPA.

3. Improvements to PSim for AUV dynamics model (partially checked in to Front branch)
- this is to make the PSim reflect the uncertainty of the environment as well as to do a better job reflecting the dynamics of the AUV itself. This also ties in with the comment from Brent to patch the PSim to reflect the latency of execution of commands sent to the VCS. This should be managed by Brent or Thom as it is a relatively independent model and will still be a strong basis for testing purposes for further development of TREX.&nbsp;&nbsp; \[P1, Brent, Frederic to meet with Brent on Wednesday, needed by mid-August in order to be used by Sept. sea date\]

4. Cleaner separation of model (e.g rules.nddl)&nbsp; \[P3, time should be allocated in the schedule to allow refactoring, test plan is to use .valid files to verify model correctness.&nbsp;&nbsp; Goal would be to test at sea October or later\]
- this involves (along with #5 below) of cleanly separating the model elements needed for a specific mission and structuring the code base in a way that is more intuitive instead of lumping all the constraints in one file.

5. Better configuration mgmt. of files in T-REX \[P3 - plan for December, since build process changes are disruptive\]
- related to above, but more focused on the directory structure and build process of T-REX and moving away from the ctd2007 based directory structure.

6. Send more data from VCS to T-REX \[P1 - plan for October, low risk modification\]
- by putting the lat/long into state publisher which in turn gets put in vehicle state timeline, we will be able to use the log files directly for Google Earth visualization without doing convulsions as Alhayat needs to do now.

7. Modeling how to break up a survey or goal and continue/need for interruption \[Potentially high risk modification, will require re-engineering of top level models and potential modification of TREX.&nbsp;&nbsp;&nbsp;&nbsp; Volume survey presents an easier 'restart' manually, side note from Frederic:&nbsp; Volume survey demonstrates the capability of TREX more than front following.).&nbsp;&nbsp;&nbsp; Plan for November/December, will likely 3 or months of effort (simulator and sea dates).&nbsp;&nbsp; We may not want to do this in 2009.
- this is an important (hence in bold font) issue that needs to be tackled and also something we signed up to do this year. Namely to be able to interrupt a mission and then resume. It will show a clear demarcation with the existing Layered Control work and really demonstrate that we can use plan projection for tasks which are less reactive and interrupt driven. It primarily involves modeling and will require you to be involved. It might be a case study for more complex modeling where Brent/Thom can look over your shoulder. We should aim to do this task as soon as possible given its utility (including what Julio seems to have mentioned on Monday) and its demonstration of clear implication of our work, not to mention publication possibilities.

Angel:

8. Implementation of parametric functions for Gulper usage \[P1 for Oct. 1\]
- this is the effort Angel is focusing on now and will provide utility-estimate based means to figure out when to trigger gulpers. More importantly this could be used in conjunction with T-REX Jr. where no deliberation for nav/control will be necessary and the standard script based approach in concert with cluster based estimation and these functions drive how a light-weight version of T-REX can be used. I have made this in bold font also given it should be considered on the critical path.

9. Resource reasoning (i.e how many gulpers left for the remainder of the mission) with and without task interruption.&nbsp; \[P2 since there are risk associated with the associated model changes, AND, Angel is gone end of Aug. not recommended for 2009\]
- this task is tied in with #7 above as one starting point for resource reasoning albeit of a simpler variety. The objective would be to see if goals can be executed/dropped in the light of existing gulper availability at sea and to do simple resource reasoning. In the event that when our AUVs have 48 hour battery charge and can revisit the location in the bay after an initial survey, the need to do this simple kind of reasoning increases.

T-REX items for Brent/Thom for '09

10. Psim modeling latency \[P1 Brent for Sept deployment, target is 2nd week in Aug\]
- this issue is directly related to #3 above. And would be a nice clean sub-task that Brent can work on.

11. VCS Config file (e.g ctd1 in devices. cfg)&nbsp; \[P3, this task may be elimated if we transition to Corba\]
- this should be wrapped up with #5 above to get an overall clean approach to dealing with varying configurations. Not only should the T-REX core be properly and systematically reconfigured, but so should the VCSServer. I suggest all file configuration issues (this and #5) be given to Thom.

12. Garbage collection of behaviors on stack (Tom O.)&nbsp;&nbsp; \[P3, Improves FSIM efficiency, November ?\]
* For longer missions, the stack size may be an issue (setpoint 0 inserted as IDLE instruction).&nbsp;&nbsp; Another option is to add an idle behaviour with a timeout and idle_stop behaviour to terminate idle.
* an item for Brent and Thom to work on. More specifically this might be something Thom can use to dive into AUV code given he's not at all familiar with how it is sturcutred other than having skimmed it some time ago.

13. Failure tracking during development&nbsp;and deployment&nbsp;\[P1\]
- this item relates to code checked in partially by Conor which might need modification and used for development time tracking and fixing of bugs. It also relates to issues in identifying a cause of failure and to see how improvements/augmentation can be done.
- Explaination:&nbsp; there is some instrumenting in TREX that facilitates debug, new developers need guidance on how to utilize the instrumentation output to understand what to fix/change. \[P1\]&nbsp;&nbsp;
-* Additional instrumentation or improvement to existing instrumentation \[P3\]
- Pre-deployment review&nbsp;with DMO of operation parameters (max speed, max depth, check-in frequency,&nbsp;localization (too&nbsp;close to shore)).&nbsp;&nbsp; Cruise plan with details (sensors, operational parms) \[P1\]&nbsp;
- Deployment results analysis for&nbsp;concise root cause on failures - deployment results report&nbsp;\[P1\]
\\

14. Set up a notification mechanism of which behavior is currently running on the stack&nbsp; \[P3, December\]
- this is important so in the future T-REX can work around anomalies when lower level behaviors are superseded and T-REX needs to be contexually aware of vehicle state.

15. For a light weight VCS server (T-REX Jr) [see attachment to this email]&nbsp; \[P2 - date is TBD\]
- a. fire gulper without Layered Control
- b. VCSServer has no expectation on T-REX activity (i.e there is no need to track pings anymore) and it is robust to the case where T-REX is dead; this property should also be checked and applied to the StatePublisher
- c. VCSServer does not launch the Supervisor but is instead launched by it and reflects the nominal operation of the vehicle (ie what Hans does)
- this is an important (therefore in bold) part of our development to demonstrate this year and will make us more ubiquitous and possibly something Hans can use on his own provided for feature tracking the features are already encoded in the clusters that have been created.

16. Track multiple sensor signals for firing gulpers&nbsp;&nbsp; \[P2, follow-on to TREX-jr / SmartGulper, likely 2010\]
(important and useful for T-REX Jr). Share task with Angel.
- we will definitely need this in the near term (therefore also in bold). However the way in which we need to put this development feature together is in a way that differentiates us from what Rob and Layered Control can do.

17. Connecting a synthetic ocean model to the Linux Sim&nbsp; \[P2, Goal is November but could be 2010, Tom O.\]
- current Sim (both QNX and its Linux port) are limited in not being able to model dynamic features in the ocean. Since T-REX is going after unstructured phenomenon in the ocean, we need a way to be able to model them on shore to test the system more robustly. Mike Godin has some kind of a connection with a ROMS model. We should connect with him to understand what has been done to date.

Sea dates mission targets:

18. We agreed that for the week of Sept 7th when AUV-Linux will be tested and if/when we get a chance to do a full days mission we will use RC15 (i.e RC14 with the temporal constraint fix from the July 1st mission). We do not want to have any other changes brought in even if this is a test of Linux and not T-REX.

19. For the Oct 1st mission we should target (subject to agreement with John) an INL survey but use the updated 5 reactor configuration from Angel.

20. I was under the impression from an earlier schedule from John that Oct 26th is an autonomy day. But Rev 8 of the Zephyr schedule does not show that. This needs to be worked out with Teresa/Chris Grech in addition to the two floater days we still have.
\\

Plan visualization: (Alhayat)

Both the items are things we should get Alhayat to develop during his stay, and one which seems doable. However his approach thus far is not wholly satisfactory and we need a way to have interpolation of sensor data clearly visible within Google Earth or COVE. So this should be carefully supervised.&nbsp;&nbsp;&nbsp;
* Contact Google Earth team about missing features.

21. Visualize plans with track: show high-level tokens on the track with Google Earth (check on status of COVE and keep that engagement going)
- do with using KML files first. \[P1 - Done, Alhayat\]

22. Make the visualization dynamic so real-time evolution can be shown in GE (programmatic interface) (P2 - goal mid-Aug, Alhayat)
* Recommendation is javascript and GE as this seems far more stable and has a larger user base even for ocean based visualization.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355487</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">14221318</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
** PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h1. Mac specific : installing development tools

\\

You need to have administration rights on this computer&nbsp;

on the Finder : select menu Go > Connect to Server ...

on the invite type : cifs://tornado.shore.mbari.org and <OK>

enter your login and password &nbsp;

select AppsAND <OK>

under the directory Macs/DevelopperTools/XcodeTools select the version of xcode for the OS version of your computer (10.6 = Snow Leopard) and get the xcode*.dmg file

you can then eject tornado disk

double click on the xcode*.dmg to mount the file

and then on Xcode.mpkg to start the installation&nbsp;

h2. Building our old version of Europa/Plasma

&nbsp;To apply the patch and build Europa/Plasma with GCC 4.3:
{code:none}
% cd $PLASMA_HOME
% patch -p1 < plasma-gcc4.3.patch  #i.e. the attached patch file
% jam && jam
{code}
\\

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
To compile TREX libraries, first download the Boost C+\+ library ([http://www.boost.org/]) and install it following the instructions outlined in the site.  Then compile TREX in a similar manner as Europa:
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated via a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher.

&nbsp;Note that threadfish.shore has a *ready to go binary* for AUV-Linux. Log in as 'dorado1' and cd down to 'coding/auv-linux'.

h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% omniNames&
% notifd -c $OMNINOTIFY_HOME/channel.cfg&

% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] <nstep>
Use <nstep> = 50
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">14188550</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388217</id>
<property name="body"><![CDATA[Sept.&nbsp;9th&nbsp;Sea date: RC15 with auv-linux
* RC15 with auv-linux, 2 CPU's.&nbsp;&nbsp;&nbsp; No change to TREX.&nbsp;&nbsp; Front Following
* PSIM (nightly PSIM + monte carlo), FSIM (flight code test 150x speed), LSIM (cycle accurate simulator, analogous to QSIM), VSIM (with Linux), HITL (with Linux)
** PSIM with latency modelling \[Brent\]&nbsp;
** LSIM \-&nbsp;'angus'.&nbsp;&nbsp; Substantial task to get test platform setup. \[Thom\]
** QSIM needed for validation of TREX (LSIM should then work no problem).&nbsp;
** VSIM with linux harddisk (at least twice, preferrably 5 times)
** Task:&nbsp;&nbsp;examine \*.cfg files used with QNX and insure they are the same when used with AUV-Linux
** AUV-Linux 'check-in', are we testing with what is used by DMO.&nbsp;&nbsp; Hans indicated he would use the head of CVS.&nbsp;&nbsp;
* \[P1, file bugs against auv-linux for changes needed for Sept sea date to insure publishing log files (McCann) is working).
\\

Oct. 1st &nbsp;Sea date:
* the head of TREX, code&nbsp;freeze by August 21st.
* Changes:
** Merged updates from RC15 into the head.&nbsp;
** Volume Survey (TBD, per John Ryan or Bob V.).&nbsp;&nbsp;&nbsp; &nbsp;
** Improved Gulper resource management (major enhancement, Angel)
** Redistributed / new partition of the model.&nbsp;&nbsp; Adding robustness to the model with more flexible constraints.&nbsp;&nbsp;
*** Work will need to be done for front following (angle has already updated volume survey).
** Transect prediction enhancement (looks further into the volume survey to calculate the min/max transects which are dynamically update)&nbsp;
\\

Date Unknown: Smart Gulper - goal would be November timeframe \[Brent\]
* Using TREX to manage Gulper sampling during a classical scripted survey
* Transition to use Corba to collect sensor data to determine Gulper firing (retiring VCS server).&nbsp;&nbsp; First step towards testing the Corba transition.
* Could be a singe CPU deployment (two user processes)
\\

Priority:&nbsp; P1="must have", P2="should have", P3="nice to have"
\\

*Core T-REX issues:*

1. Merge front branch with mainline in SVN. \[P1\]
- The current state of T-REX is divided between the HEAD and the Front branches. There are aspects of the HEAD particularly Angel's 5 reactor configuration which should be folded in. Ideally we should merge the Front branch into the mainline and declare the Front branch dead.
-* Updates have been made to pull Front branch (RC15) to the head \[P1, Frederic, Done Jul 16\]
-* Test and Validation of the SVN head \[Frederic, Angel, in progress Jul 20, goal is to complete Jul 25\]

2. Move to Google/T-REX \[P2\] - (not crucial for MBARI, but should be done to insure clean tech transfer&nbsp;and efficient evolution in the future)
- move our code to Google \[P2\]
- clean up interface w/ EUROPA esp. for ESA project \[P2, Frederic, goal mid-Sept\]
-* Subtask: bring in latest EUROPA code to test the interface&nbsp;\[P2, Frederic&nbsp;\]

\\
- this is something long overdue and we need to work on primarily to ensure some bugs found in T-REX core and some key issues in EUROPA are incorporated. Plus not doing so incrementally and ever so often will lead to different trajectories of code base which might kill us later on. Specifically for the ESA project the last item needs to be undertaken anyway since APSI will need to replace EUROPA.

3. Improvements to PSim for AUV dynamics model (partially checked in to Front branch)
- this is to make the PSim reflect the uncertainty of the environment as well as to do a better job reflecting the dynamics of the AUV itself. This also ties in with the comment from Brent to patch the PSim to reflect the latency of execution of commands sent to the VCS. This should be managed by Brent or Thom as it is a relatively independent model and will still be a strong basis for testing purposes for further development of TREX.&nbsp;&nbsp; \[P1, Brent, Frederic to meet with Brent on Wednesday, needed by mid-August in order to be used by Sept. sea date\]

4. Cleaner separation of model (e.g rules.nddl)&nbsp; \[P3, time should be allocated in the schedule to allow refactoring, test plan is to use .valid files to verify model correctness.&nbsp;&nbsp; Goal would be to test at sea October or later\]
- this involves (along with #5 below) of cleanly separating the model elements needed for a specific mission and structuring the code base in a way that is more intuitive instead of lumping all the constraints in one file.

5. Better configuration mgmt. of files in T-REX \[P3 - plan for December, since build process changes are disruptive\]
- related to above, but more focused on the directory structure and build process of T-REX and moving away from the ctd2007 based directory structure.

6. Send more data from VCS to T-REX \[P1 - plan for October, low risk modification\]
- by putting the lat/long into state publisher which in turn gets put in vehicle state timeline, we will be able to use the log files directly for Google Earth visualization without doing convulsions as Alhayat needs to do now.

7. Modeling how to break up a survey or goal and continue/need for interruption \[Potentially high risk modification, will require re-engineering of top level models and potential modification of TREX.&nbsp;&nbsp;&nbsp;&nbsp; Volume survey presents an easier 'restart' manually, side note from Frederic:&nbsp; Volume survey demonstrates the capability of TREX more than front following.).&nbsp;&nbsp;&nbsp; Plan for November/December, will likely 3 or months of effort (simulator and sea dates).&nbsp;&nbsp; We may not want to do this in 2009.
- this is an important (hence in bold font) issue that needs to be tackled and also something we signed up to do this year. Namely to be able to interrupt a mission and then resume. It will show a clear demarcation with the existing Layered Control work and really demonstrate that we can use plan projection for tasks which are less reactive and interrupt driven. It primarily involves modeling and will require you to be involved. It might be a case study for more complex modeling where Brent/Thom can look over your shoulder. We should aim to do this task as soon as possible given its utility (including what Julio seems to have mentioned on Monday) and its demonstration of clear implication of our work, not to mention publication possibilities.

Angel:

8. Implementation of parametric functions for Gulper usage \[P1 for Oct. 1\]
- this is the effort Angel is focusing on now and will provide utility-estimate based means to figure out when to trigger gulpers. More importantly this could be used in conjunction with T-REX Jr. where no deliberation for nav/control will be necessary and the standard script based approach in concert with cluster based estimation and these functions drive how a light-weight version of T-REX can be used. I have made this in bold font also given it should be considered on the critical path.

9. Resource reasoning (i.e how many gulpers left for the remainder of the mission) with and without task interruption.&nbsp; \[P2 since there are risk associated with the associated model changes, AND, Angel is gone end of Aug. not recommended for 2009\]
- this task is tied in with #7 above as one starting point for resource reasoning albeit of a simpler variety. The objective would be to see if goals can be executed/dropped in the light of existing gulper availability at sea and to do simple resource reasoning. In the event that when our AUVs have 48 hour battery charge and can revisit the location in the bay after an initial survey, the need to do this simple kind of reasoning increases.

T-REX items for Brent/Thom for '09

10. Psim modeling latency \[P1 Brent for Sept deployment, target is 2nd week in Aug\]
- this issue is directly related to #3 above. And would be a nice clean sub-task that Brent can work on.

11. VCS Config file (e.g ctd1 in devices. cfg)&nbsp; \[P3, this task may be elimated if we transition to Corba\]
- this should be wrapped up with #5 above to get an overall clean approach to dealing with varying configurations. Not only should the T-REX core be properly and systematically reconfigured, but so should the VCSServer. I suggest all file configuration issues (this and #5) be given to Thom.

12. Garbage collection of behaviors on stack (Tom O.)&nbsp;&nbsp; \[P3, Improves FSIM efficiency, November ?\]
* For longer missions, the stack size may be an issue (setpoint 0 inserted as IDLE instruction).&nbsp;&nbsp; Another option is to add an idle behaviour with a timeout and idle_stop behaviour to terminate idle.
* an item for Brent and Thom to work on. More specifically this might be something Thom can use to dive into AUV code given he's not at all familiar with how it is sturcutred other than having skimmed it some time ago.

13. Failure tracking during development&nbsp;and deployment&nbsp;\[P1\]
- this item relates to code checked in partially by Conor which might need modification and used for development time tracking and fixing of bugs. It also relates to issues in identifying a cause of failure and to see how improvements/augmentation can be done.
- Explaination:&nbsp; there is some instrumenting in TREX that facilitates debug, new developers need guidance on how to utilize the instrumentation output to understand what to fix/change. \[P1\]&nbsp;&nbsp;
-* Additional instrumentation or improvement to existing instrumentation \[P3\]
- Pre-deployment review&nbsp;with DMO of operation parameters (max speed, max depth, check-in frequency,&nbsp;localization (too&nbsp;close to shore)).&nbsp;&nbsp; Cruise plan with details (sensors, operational parms) \[P1\]&nbsp;
- Deployment results analysis for&nbsp;concise root cause on failures - deployment results report&nbsp;\[P1\]
\\

14. Set up a notification mechanism of which behavior is currently running on the stack&nbsp; \[P3, December\]
- this is important so in the future T-REX can work around anomalies when lower level behaviors are superseded and T-REX needs to be contexually aware of vehicle state.

15. For a light weight VCS server (T-REX Jr) [see attachment to this email]&nbsp; \[P2 - date is TBD\]
- a. fire gulper without Layered Control
- b. VCSServer has no expectation on T-REX activity (i.e there is no need to track pings anymore) and it is robust to the case where T-REX is dead; this property should also be checked and applied to the StatePublisher
- c. VCSServer does not launch the Supervisor but is instead launched by it and reflects the nominal operation of the vehicle (ie what Hans does)
- this is an important (therefore in bold) part of our development to demonstrate this year and will make us more ubiquitous and possibly something Hans can use on his own provided for feature tracking the features are already encoded in the clusters that have been created.

16. Track multiple sensor signals for firing gulpers&nbsp;&nbsp; \[P2, follow-on to TREX-jr / SmartGulper, likely 2010\]
(important and useful for T-REX Jr). Share task with Angel.
- we will definitely need this in the near term (therefore also in bold). However the way in which we need to put this development feature together is in a way that differentiates us from what Rob and Layered Control can do.

17. Connecting a synthetic ocean model to the Linux Sim&nbsp; \[P2, Goal is November but could be 2010, Tom O.\]
- current Sim (both QNX and its Linux port) are limited in not being able to model dynamic features in the ocean. Since T-REX is going after unstructured phenomenon in the ocean, we need a way to be able to model them on shore to test the system more robustly. Mike Godin has some kind of a connection with a ROMS model. We should connect with him to understand what has been done to date.

Sea dates mission targets:

18. We agreed that for the week of Sept 7th when AUV-Linux will be tested and if/when we get a chance to do a full days mission we will use RC15 (i.e RC14 with the temporal constraint fix from the July 1st mission). We do not want to have any other changes brought in even if this is a test of Linux and not T-REX.

19. For the Oct 1st mission we should target (subject to agreement with John) an INL survey but use the updated 5 reactor configuration from Angel.

20. I was under the impression from an earlier schedule from John that Oct 26th is an autonomy day. But Rev 8 of the Zephyr schedule does not show that. This needs to be worked out with Teresa/Chris Grech in addition to the two floater days we still have.\\

Plan visualization: (Alhayat)

Both the items are things we should get Alhayat to develop during his stay, and one which seems doable. However his approach thus far is not wholly satisfactory and we need a way to have interpolation of sensor data clearly visible within Google Earth or COVE. So this should be carefully supervised.&nbsp;&nbsp;&nbsp;
* Contact Google Earth team about missing features.

21. Visualize plans with track: show high-level tokens on the track with Google Earth (check on status of COVE and keep that engagement going)
- do with using KML files first. \[P1 - Done, Alhayat\]


22. Make the visualization dynamic so real-time evolution can be shown in GE (programmatic interface) (P2 - goal mid-Aug, Alhayat)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355485</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388215</id>
<property name="body"><![CDATA[Sept.&nbsp;9th&nbsp;Sea date: RC15 with auv-linux
* RC15 with auv-linux, 2 CPU's.&nbsp;&nbsp;&nbsp; No change to TREX.&nbsp;&nbsp; Front Following
* PSIM (nightly PSIM + monte carlo), FSIM (flight code test 150x speed), LSIM (cycle accurate simulator, analogous to QSIM), VSIM (with Linux), HITL (with Linux)
** LSIM \-&nbsp;'angus'.&nbsp;&nbsp; Substantial task to get test platform setup.
** QSIM needed for validation of TREX (LSIM should then work no problem).&nbsp;
** VSIM with linux harddisk (at least twice, preferrably 5 times)
** Task:&nbsp;&nbsp;examine \*.cfg files used with QNX and insure they are the same when used with AUV-Linux
** AUV-Linux 'check-in', are we testing with what is used by DMO.&nbsp;&nbsp; Hans indicated he would use the head of CVS.&nbsp;&nbsp;
* \[P1, file bugs against auv-linux for changes needed for Sept sea date to insure publishing log files (McCann) is working).
\\

Oct. 1st &nbsp;Sea date:
* the head of TREX, code&nbsp;freeze by August 21st.
* Changes:
** Merged updates from RC15 into the head.&nbsp;
** Volume Survey (TBD, per John Ryan or Bob V.).&nbsp;&nbsp;&nbsp; &nbsp;
** Improved Gulper resource management (major enhancement, Angel)
** Redistributed / new partition of the model.&nbsp;&nbsp; Adding robustness to the model with more flexible constraints.&nbsp;&nbsp;
*** Work will need to be done for front following (angle has already updated volume survey).
** Transect prediction enhancement (looks further into the volume survey to calculate the min/max transects which are dynamically update)&nbsp;
\\

Priority:&nbsp; P1="must have", P2="should have", P3="nice to have"
\\

*Core T-REX issues:*

1. Merge front branch with mainline in SVN. \[P1\]
- The current state of T-REX is divided between the HEAD and the Front branches. There are aspects of the HEAD particularly Angel's 5 reactor configuration which should be folded in. Ideally we should merge the Front branch into the mainline and declare the Front branch dead.
-* Updates have been made to pull Front branch (RC15) to the head \[P1, Frederic, Done Jul 16\]
-* Test and Validation of the SVN head \[Frederic, Angel, in progress Jul 20, goal is to complete Jul 25\]

2. Move to Google/T-REX \[P2\] - (not crucial for MBARI, but should be done to insure clean tech transfer&nbsp;and efficient evolution in the future)
- move our code to Google \[P2\]
- clean up interface w/ EUROPA esp. for ESA project \[P2, Frederic, goal mid-Sept\]
-* Subtask: bring in latest EUROPA code to test the interface&nbsp;\[P2, Frederic&nbsp;\]

\\
- this is something long overdue and we need to work on primarily to ensure some bugs found in T-REX core and some key issues in EUROPA are incorporated. Plus not doing so incrementally and ever so often will lead to different trajectories of code base which might kill us later on. Specifically for the ESA project the last item needs to be undertaken anyway since APSI will need to replace EUROPA.

3. Improvements to PSim for AUV dynamics model (partially checked in to Front branch)
- this is to make the PSim reflect the uncertainty of the environment as well as to do a better job reflecting the dynamics of the AUV itself. This also ties in with the comment from Brent to patch the PSim to reflect the latency of execution of commands sent to the VCS. This should be managed by Brent or Thom as it is a relatively independent model and will still be a strong basis for testing purposes for further development of TREX.&nbsp;&nbsp; \[P1, Brent, Frederic to meet with Brent on Wednesday, needed by mid-August in order to be used by Sept. sea date\]

4. Cleaner separation of model (e.g rules.nddl)&nbsp; \[P3, time should be allocated in the schedule to allow refactoring, test plan is to use .valid files to verify model correctness.&nbsp;&nbsp; Goal would be to test at sea October or later\]
- this involves (along with #5 below) of cleanly separating the model elements needed for a specific mission and structuring the code base in a way that is more intuitive instead of lumping all the constraints in one file.

5. Better configuration mgmt. of files in T-REX \[P3 - plan for December, since build process changes are disruptive\]
- related to above, but more focused on the directory structure and build process of T-REX and moving away from the ctd2007 based directory structure.

6. Send more data from VCS to T-REX \[P1 - plan for October, low risk modification\]
- by putting the lat/long into state publisher which in turn gets put in vehicle state timeline, we will be able to use the log files directly for Google Earth visualization without doing convulsions as Alhayat needs to do now.

7. Modeling how to break up a survey or goal and continue/need for interruption \[Potentially high risk modification, will require re-engineering of top level models and potential modification of TREX.&nbsp;&nbsp;&nbsp;&nbsp; Volume survey presents an easier 'restart' manually, side note from Frederic:&nbsp; Volume survey demonstrates the capability of TREX more than front following.).&nbsp;&nbsp;&nbsp; Plan for November/December, will likely 3 or months of effort (simulator and sea dates).&nbsp;&nbsp; We may not want to do this in 2009.
- this is an important (hence in bold font) issue that needs to be tackled and also something we signed up to do this year. Namely to be able to interrupt a mission and then resume. It will show a clear demarcation with the existing Layered Control work and really demonstrate that we can use plan projection for tasks which are less reactive and interrupt driven. It primarily involves modeling and will require you to be involved. It might be a case study for more complex modeling where Brent/Thom can look over your shoulder. We should aim to do this task as soon as possible given its utility (including what Julio seems to have mentioned on Monday) and its demonstration of clear implication of our work, not to mention publication possibilities.

Angel:

8. Implementation of parametric functions for Gulper usage
- this is the effort Angel is focusing on now and will provide utility-estimate based means to figure out when to trigger gulpers. More importantly this could be used in conjunction with T-REX Jr. where no deliberation for nav/control will be necessary and the standard script based approach in concert with cluster based estimation and these functions drive how a light-weight version of T-REX can be used. I have made this in bold font also given it should be considered on the critical path.

9. Resource reasoning (i.e how many gulpers left for the remainder of the mission) with and without task interruption
- this task is tied in with #7 above as one starting point for resource reasoning albeit of a simpler variety. The objective would be to see if goals can be executed/dropped in the light of existing gulper availability at sea and to do simple resource reasoning. In the event that when our AUVs have 48 hour battery charge and can revisit the location in the bay after an initial survey, the need to do this simple kind of reasoning increases.

T-REX items for Brent/Thom for '09

10. Psim modeling latency
- this issue is directly related to #3 above. And would be a nice clean sub-task that Brent can work on.

11. VCS Config file (e.g ctd1 in devices. cfg)
- this should be wrapped up with #5 above to get an overall clean approach to dealing with varying configurations. Not only should the T-REX core be properly and systematically reconfigured, but so should the VCSServer. I suggest all file configuration issues (this and #5) be given to Thom.

12. Garbage collection of behaviors on stack (Tom?)
- an item for Brent and Thom to work on. More specifically this might be something Thom can use to dive into AUV code given he's not at all familiar with how it is sturcutred other than having skimmed it some time ago.

13. Failure tracking during development
- this item relates to code checked in partially by Conor which might need modification and used for development time tracking and fixing of bugs. It also relates to issues in identifying a cause of failure and to see how improvements/augmentation can be done.

14. Set up a notification mechanism of which behavior is currently running on the stack
- this is important so in the future T-REX can work around anomalies when lower level behaviors are superseded and T-REX needs to be contexually aware of vehicle state.

15. For a light weight VCS server (T-REX Jr) [see attachment to this email]
a. fire gulper without Layered Control
b. VCSServer has no expectation on T-REX activity (i.e there is no need to track pings anymore) and it is robust to the case where T-REX is dead; this property should also be checked and applied to the StatePublisher
c. VCSServer does not launch the Supervisor but is instead launched by it and reflects the nominal operation of the vehicle (ie what Hans does)
- this is an important (therefore in bold) part of our development to demonstrate this year and will make us more ubiquitous and possibly something Hans can use on his own provided for feature tracking the features are already encoded in the clusters that have been created.

16. Track multiple sensor signals for firing gulpers
(important and useful for T-REX Jr). Share task with Angel.
- we will definitely need this in the near term (therefore also in bold). However the way in which we need to put this development feature together is in a way that differentiates us from what Rob and Layered Control can do.

17. Connecting a synthetic ocean model to the Linux Sim
- current Sim (both QNX and its Linux port) are limited in not being able to model dynamic features in the ocean. Since T-REX is going after unstructured phenomenon in the ocean, we need a way to be able to model them on shore to test the system more robustly. Mike Godin has some kind of a connection with a ROMS model. We should connect with him to understand what has been done to date.

Sea dates mission targets:

18. We agreed that for the week of Sept 7th when AUV-Linux will be tested and if/when we get a chance to do a full days mission we will use RC14\+ (i.e RC14 with the temporal constraint fix from the July 1st mission). We do not want to have any other changes brought in even if this is a test of Linux and not T-REX.

19. For the Oct 1st mission we should target (subject to agreement with John) an INL survey but use the updated 5 reactor configuration from Angel.

20. I was under the impression from an earlier schedule from John that Oct 26th is an autonomy day. But Rev 8 of the Zephyr schedule does not show that. This needs to be worked out with Teresa/Chris Grech in addition to the two floater days we still have.

Plan visualization: (Alhayat)

Both the items are things we should get Alhayat to develop during his stay, and one which seems doable. However his approach thus far is not wholly satisfactory and we need a way to have interpolation of sensor data clearly visible within Google Earth or COVE. So this should be carefully supervised.

21. Visualize plans with track: show high-level tokens on the track with Google Earth (check on status of COVE and keep that engagement going)
- do with using KML files first.
22. Make the visualization dynamic so real-time evolution can be shown in GE.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355483</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">14221322</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#svn] Give a view of the TREX development branches and the external dependencies
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. SVN version and dependencies

{anchor:svn}
The following picture illustrates the current svn tree with active and dead branches. 
!TREX-svn.png|align=centre!

There's 3 actives branches in TREX :
* the trunk which is the version we are now using on the AUV (since June 2010)
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk
{code}
* the multisim branch where the Monte-Carlo simulation is now connected to the auv-linux simulator
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/branches/multisim
{code}
* the Europa_independent branch which is a full redesign of TREX in order to make it independent of Europa (allowing 3rd parties to integrate their own planner) and is also closer to the formal definition of the architecture (see [AAMAS paper|http://www.mbari.org/autonomy/Publications/aamas10.pdf])
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/branches/multisim
{code}


The two first branches rely on the same 3rd parties components and are fairly similar in the way they are compiled. The external tools needed are :
* *jam* ([http://www.perforce.com/jam/jam.html]) This is a make replacement utility used to compile TREX. The version used during development was jam 2.5
* *boost* ([http://www.boost.org/]) A set of libraries for advanced C++ programming. The version required is 1.36 and above.
* *Europa 2.1.1* ([http://babelfish.arc.nasa.gov/trac/europa]) This is an old version of a planner development at NASA-Ames. The easiest way to have this version is to copy the full Europa directory from dorado1 account on threadfish :
{code:none}
% scp -r dorado1@threadfish:coding/Europa .
{code} 
Europa have few extra dependencies that are given on [this  page|http://babelfish.arc.nasa.gov/trac/europa/wiki/EuropaInstallation]

The Europa independent branch do not depend on Europa and will future the latest version of it in the future. It still depends on boost (1.40.0 or above) and jam


h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
** PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

{warning:title=Important requirement}
All TREX build system and execution assumes that important variables are defined. There's a file 
{{devConfig}} that defines them for *bash*. To load it you need to source it on TREX root directory
{code:none}
% cd <path>/TREX
% source devConfig
{code}
The best thing is probably to do this on your {{.profile}} or {{.bashrc}}
{warning}

h1. Mac specific : installing development tools

\\

You need to have administration rights on this computer&nbsp;

on the Finder : select menu Go > Connect to Server ...

on the invite type : cifs://tornado.shore.mbari.org and <OK>

enter your login and password &nbsp;

select AppsAND <OK>

under the directory Macs/DevelopperTools/XcodeTools select the version of xcode for the OS version of your computer (10.6 = Snow Leopard) and get the xcode*.dmg file

you can then eject tornado disk

double click on the xcode*.dmg to mount the file

and then on Xcode.mpkg to start the installation&nbsp;

h2. Building our old version of Europa/Plasma

&nbsp;To apply the patch and build Europa/Plasma with GCC 4.3:
{code:none}
% cd $PLASMA_HOME
% patch -p1 < plasma-gcc4.3.patch  #i.e. the attached patch file
% jam && jam
{code}
\\

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
To compile TREX libraries, first download the Boost C+\+ library ([http://www.boost.org/]) and install it following the instructions outlined in the site.  Then compile TREX in a similar manner as Europa:
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated via a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher.

&nbsp;Note that threadfish.shore has a *ready to go binary* for AUV-Linux. Log in as 'dorado1' and cd down to 'coding/auv-linux'.

h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% omniNames&
% notifd -c $OMNINOTIFY_HOME/channel.cfg&

% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] <nstep>
Use <nstep> = 50
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">14188554</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004304</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h1. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a restFULL kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.
{note}

{panel:title=List of trex existing timelines}
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have
{panel}

{panel:title=current tick}
 * *input:* none
 * *output:* 
    The date (UTC) and value (an integer) of the current tick of trex

 This call may have a push based counterpart in the future. Indeed the current tick changes in trex as time advance. in my ODSS version I currently use a tick running at a 1 mn period 
{panel}

{panel:title=Content of a timeline}
 * *input:*
 ** A timeline name
 ** A time interval _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval
{panel}

{panel:title=Post a new goal}
 * *input:*
 ** The json format of the goal
 * *output:*
 ** A simple binary feedback (OK/Invalid)

 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit along tall of these are purely indicative and may change as we see fit:

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971536</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388213</id>
<property name="body"><![CDATA[Sept.&nbsp;9th&nbsp;Sea date: RC15 with auv-linux
* RC15 with auv-linux, 2 CPU's.&nbsp;&nbsp;&nbsp; No change to TREX
* PSIM (nightly PSIM + monte carlo), FSIM (flight code test 150x speed), LSIM (cycle accurate simulator, analogous to QSIM), VSIM (with Linux), HITL (with Linux)
** LSIM \-&nbsp;'angus'.&nbsp;&nbsp; Substantial task to get test platform setup.
** QSIM needed for validation of TREX (LSIM should then work no problem).&nbsp;
** VSIM with linux harddisk (at least twice, preferrably 5 times)
** Task:&nbsp;&nbsp;examine \*.cfg files used with QNX and insure they are the same when used with AUV-Linux
** AUV-Linux 'check-in', are we testing with what is used by DMO.&nbsp;&nbsp; Hans indicated he would use the head of CVS.&nbsp;&nbsp;
* \[P1, file bugs against auv-linux for changes needed for Sept sea date to insure publishing log files (McCann) is working).\\

Oct. 1st &nbsp;Sea date:

&nbsp;the head of TREX
\\

Priority:&nbsp; P1="must have", P2="should have", P3="nice to have"
\\

*Core T-REX issues:*

1. Merge front branch with mainline in SVN. \[P1\]
- The current state of T-REX is divided between the HEAD and the Front branches. There are aspects of the HEAD particularly Angel's 5 reactor configuration which should be folded in. Ideally we should merge the Front branch into the mainline and declare the Front branch dead.
-* Updates have been made to pull Front branch (RC15) to the head \[P1, Frederic, Done Jul 16\]
-* Test and Validation of the SVN head \[Frederic, Angel, in progress Jul 20, goal is to complete Jul 25\]

2. Move to Google/T-REX \[P2\] - (not crucial for MBARI, but should be done to insure clean tech transfer&nbsp;and efficient evolution in the future)
- move our code to Google \[P2\]
- clean up interface w/ EUROPA esp. for ESA project \[P2, Frederic, goal mid-Sept\]
-* Subtask: bring in latest EUROPA code to test the interface&nbsp;\[P2, Frederic&nbsp;\]

\\
- this is something long overdue and we need to work on primarily to ensure some bugs found in T-REX core and some key issues in EUROPA are incorporated. Plus not doing so incrementally and ever so often will lead to different trajectories of code base which might kill us later on. Specifically for the ESA project the last item needs to be undertaken anyway since APSI will need to replace EUROPA.

3. Improvements to PSim for AUV dynamics model (partially checked in to Front branch)
- this is to make the PSim reflect the uncertainty of the environment as well as to do a better job reflecting the dynamics of the AUV itself. This also ties in with the comment from Brent to patch the PSim to reflect the latency of execution of commands sent to the VCS. This should be managed by Brent or Thom as it is a relatively independent model and will still be a strong basis for testing purposes for further development of TREX.&nbsp;&nbsp; \[P1, Brent, Frederic to meet with Brent on Wednesday, needed by mid-August in order to be used by Sept. sea date\]

4. Cleaner separation of model (e.g rules.nddl)&nbsp; \[P3, time should be allocated in the schedule to allow refactoring, test plan is to use .valid files to verify model correctness.&nbsp;&nbsp; Goal would be to test at sea October or later\]
- this involves (along with #5 below) of cleanly separating the model elements needed for a specific mission and structuring the code base in a way that is more intuitive instead of lumping all the constraints in one file.

5. Better configuration mgmt. of files in T-REX \[P3 - plan for December, since build process changes are disruptive\]
- related to above, but more focused on the directory structure and build process of T-REX and moving away from the ctd2007 based directory structure.

6. Send more data from VCS to T-REX \[P1 - plan for October, low risk modification\]
- by putting the lat/long into state publisher which in turn gets put in vehicle state timeline, we will be able to use the log files directly for Google Earth visualization without doing convulsions as Alhayat needs to do now.

7. Modeling how to break up a survey or goal and continue/need for interruption \[Potentially high risk modification, will require re-engineering of top level models and potential modification of TREX.&nbsp;&nbsp;&nbsp;&nbsp; Volume survey presents an easier 'restart' manually, side note from Frederic:&nbsp; Volume survey demonstrates the capability of TREX more than front following.).&nbsp;&nbsp;&nbsp; Plan for November/December, will likely 3 or months of effort (simulator and sea dates).&nbsp;&nbsp; We may not want to do this in 2009.
- this is an important (hence in bold font) issue that needs to be tackled and also something we signed up to do this year. Namely to be able to interrupt a mission and then resume. It will show a clear demarcation with the existing Layered Control work and really demonstrate that we can use plan projection for tasks which are less reactive and interrupt driven. It primarily involves modeling and will require you to be involved. It might be a case study for more complex modeling where Brent/Thom can look over your shoulder. We should aim to do this task as soon as possible given its utility (including what Julio seems to have mentioned on Monday) and its demonstration of clear implication of our work, not to mention publication possibilities.

Angel:

8. Implementation of parametric functions for Gulper usage
- this is the effort Angel is focusing on now and will provide utility-estimate based means to figure out when to trigger gulpers. More importantly this could be used in conjunction with T-REX Jr. where no deliberation for nav/control will be necessary and the standard script based approach in concert with cluster based estimation and these functions drive how a light-weight version of T-REX can be used. I have made this in bold font also given it should be considered on the critical path.

9. Resource reasoning (i.e how many gulpers left for the remainder of the mission) with and without task interruption
- this task is tied in with #7 above as one starting point for resource reasoning albeit of a simpler variety. The objective would be to see if goals can be executed/dropped in the light of existing gulper availability at sea and to do simple resource reasoning. In the event that when our AUVs have 48 hour battery charge and can revisit the location in the bay after an initial survey, the need to do this simple kind of reasoning increases.

T-REX items for Brent/Thom for '09

10. Psim modeling latency
- this issue is directly related to #3 above. And would be a nice clean sub-task that Brent can work on.

11. VCS Config file (e.g ctd1 in devices. cfg)
- this should be wrapped up with #5 above to get an overall clean approach to dealing with varying configurations. Not only should the T-REX core be properly and systematically reconfigured, but so should the VCSServer. I suggest all file configuration issues (this and #5) be given to Thom.

12. Garbage collection of behaviors on stack (Tom?)
- an item for Brent and Thom to work on. More specifically this might be something Thom can use to dive into AUV code given he's not at all familiar with how it is sturcutred other than having skimmed it some time ago.

13. Failure tracking during development
- this item relates to code checked in partially by Conor which might need modification and used for development time tracking and fixing of bugs. It also relates to issues in identifying a cause of failure and to see how improvements/augmentation can be done.

14. Set up a notification mechanism of which behavior is currently running on the stack
- this is important so in the future T-REX can work around anomalies when lower level behaviors are superseded and T-REX needs to be contexually aware of vehicle state.

15. For a light weight VCS server (T-REX Jr) [see attachment to this email]
a. fire gulper without Layered Control
b. VCSServer has no expectation on T-REX activity (i.e there is no need to track pings anymore) and it is robust to the case where T-REX is dead; this property should also be checked and applied to the StatePublisher
c. VCSServer does not launch the Supervisor but is instead launched by it and reflects the nominal operation of the vehicle (ie what Hans does)
- this is an important (therefore in bold) part of our development to demonstrate this year and will make us more ubiquitous and possibly something Hans can use on his own provided for feature tracking the features are already encoded in the clusters that have been created.

16. Track multiple sensor signals for firing gulpers
(important and useful for T-REX Jr). Share task with Angel.
- we will definitely need this in the near term (therefore also in bold). However the way in which we need to put this development feature together is in a way that differentiates us from what Rob and Layered Control can do.

17. Connecting a synthetic ocean model to the Linux Sim
- current Sim (both QNX and its Linux port) are limited in not being able to model dynamic features in the ocean. Since T-REX is going after unstructured phenomenon in the ocean, we need a way to be able to model them on shore to test the system more robustly. Mike Godin has some kind of a connection with a ROMS model. We should connect with him to understand what has been done to date.

Sea dates mission targets:

18. We agreed that for the week of Sept 7th when AUV-Linux will be tested and if/when we get a chance to do a full days mission we will use RC14\+ (i.e RC14 with the temporal constraint fix from the July 1st mission). We do not want to have any other changes brought in even if this is a test of Linux and not T-REX.

19. For the Oct 1st mission we should target (subject to agreement with John) an INL survey but use the updated 5 reactor configuration from Angel.

20. I was under the impression from an earlier schedule from John that Oct 26th is an autonomy day. But Rev 8 of the Zephyr schedule does not show that. This needs to be worked out with Teresa/Chris Grech in addition to the two floater days we still have.

Plan visualization: (Alhayat)

Both the items are things we should get Alhayat to develop during his stay, and one which seems doable. However his approach thus far is not wholly satisfactory and we need a way to have interpolation of sensor data clearly visible within Google Earth or COVE. So this should be carefully supervised.

21. Visualize plans with track: show high-level tokens on the track with Google Earth (check on status of COVE and keep that engagement going)
- do with using KML files first.
22. Make the visualization dynamic so real-time evolution can be shown in GE.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355481</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">14221320</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#svn] Give a view of the TREX development branches and the external dependencies
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. SVN version and dependencies

{anchor:svn}
The following picture illustrates the current svn tree with active and dead branches. 
!TREX-svn.png|align=centre!

There's 3 actives branches in TREX :
* the trunk which is the version we are now using on the AUV (since June 2010)
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk
{code}
* the multisim branch where the Monte-Carlo simulation is now connected to the auv-linux simulator
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/branches/multisim
{code}
* the Europa_independent branch which is a full redesign of TREX in order to make it independent of Europa (allowing 3rd parties to integrate their own planner) and is also closer to the formal definition of the architecture (see [AAMAS paper|http://www.mbari.org/autonomy/Publications/aamas10.pdf])
{code:none}
% svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/branches/multisim
{code}


The two first branches rely on the same 3rd parties components and are fairly similar in the way they are compiled. The external tools needed are :
* *jam* ([http://www.perforce.com/jam/jam.html]) This is a make replacement utility used to compile TREX. The version used during development was jam 2.5
* *boost* ([http://www.boost.org/]) A set of libraries for advanced C++ programming. The version required is 1.36 and above.
* *Europa 2.1.1* ([http://babelfish.arc.nasa.gov/trac/europa]) This is an old version of a planner development at NASA-Ames. The easiest way to have this version is to copy the full Europa directory from dorado1 account on threadfish :
{code:none}
% scp -r dorado1@threadfish:coding/Europa .
{code} 
Europa have few extra dependencies that are given on [this  page|http://babelfish.arc.nasa.gov/trac/europa/wiki/EuropaInstallation]

The Europa independent branch do not depend on Europa and will future the latest version of it in the future. It still depends on boost (1.40.0 or above) and jam


h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
** PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h1. Mac specific : installing development tools

\\

You need to have administration rights on this computer&nbsp;

on the Finder : select menu Go > Connect to Server ...

on the invite type : cifs://tornado.shore.mbari.org and <OK>

enter your login and password &nbsp;

select AppsAND <OK>

under the directory Macs/DevelopperTools/XcodeTools select the version of xcode for the OS version of your computer (10.6 = Snow Leopard) and get the xcode*.dmg file

you can then eject tornado disk

double click on the xcode*.dmg to mount the file

and then on Xcode.mpkg to start the installation&nbsp;

h2. Building our old version of Europa/Plasma

&nbsp;To apply the patch and build Europa/Plasma with GCC 4.3:
{code:none}
% cd $PLASMA_HOME
% patch -p1 < plasma-gcc4.3.patch  #i.e. the attached patch file
% jam && jam
{code}
\\

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
To compile TREX libraries, first download the Boost C+\+ library ([http://www.boost.org/]) and install it following the instructions outlined in the site.  Then compile TREX in a similar manner as Europa:
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated via a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher.

&nbsp;Note that threadfish.shore has a *ready to go binary* for AUV-Linux. Log in as 'dorado1' and cd down to 'coding/auv-linux'.

h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% omniNames&
% notifd -c $OMNINOTIFY_HOME/channel.cfg&

% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] <nstep>
Use <nstep> = 50
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">14188552</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388211</id>
<property name="body"><![CDATA[Sept.&nbsp;9th&nbsp;Sea date: RC15 with auv-linux

\[P1, file bugs against auv-linux for changes needed for Sept sea date to insure publishing log files (McCann) is working).

Oct. 1st &nbsp;Sea date:

1) the head of TREX
\\

Priority:&nbsp; P1="must have", P2="should have", P3="nice to have"
\\

*Core T-REX issues:*

1. Merge front branch with mainline in SVN. \[P1\]
- The current state of T-REX is divided between the HEAD and the Front branches. There are aspects of the HEAD particularly Angel's 5 reactor configuration which should be folded in. Ideally we should merge the Front branch into the mainline and declare the Front branch dead.
-* Updates have been made to pull Front branch (RC15) to the head \[P1, Frederic, Done Jul 16\]
-* Test and Validation of the SVN head \[Frederic, Angel, in progress Jul 20, goal is to complete Jul 25\]

2. Move to Google/T-REX \[P2\] - (not crucial for MBARI, but should be done to insure clean tech transfer&nbsp;and efficient evolution in the future)
- move our code to Google \[P2\]
- clean up interface w/ EUROPA esp. for ESA project \[P2, Frederic, goal mid-Sept\]
-* Subtask: bring in latest EUROPA code to test the interface&nbsp;\[P2, Frederic&nbsp;\]

\\
- this is something long overdue and we need to work on primarily to ensure some bugs found in T-REX core and some key issues in EUROPA are incorporated. Plus not doing so incrementally and ever so often will lead to different trajectories of code base which might kill us later on. Specifically for the ESA project the last item needs to be undertaken anyway since APSI will need to replace EUROPA.

3. Improvements to PSim for AUV dynamics model (partially checked in to Front branch)
- this is to make the PSim reflect the uncertainty of the environment as well as to do a better job reflecting the dynamics of the AUV itself. This also ties in with the comment from Brent to patch the PSim to reflect the latency of execution of commands sent to the VCS. This should be managed by Brent or Thom as it is a relatively independent model and will still be a strong basis for testing purposes for further development of TREX.&nbsp;&nbsp; \[P1, Brent, Frederic to meet with Brent on Wednesday, needed by mid-August in order to be used by Sept. sea date\]

4. Cleaner separation of model (e.g rules.nddl)&nbsp; \[P3, time should be allocated in the schedule to allow refactoring, test plan is to use .valid files to verify model correctness.&nbsp;&nbsp; Goal would be to test at sea October or later\]
- this involves (along with #5 below) of cleanly separating the model elements needed for a specific mission and structuring the code base in a way that is more intuitive instead of lumping all the constraints in one file.

5. Better configuration mgmt. of files in T-REX \[P3 - plan for December, since build process changes are disruptive\]
- related to above, but more focused on the directory structure and build process of T-REX and moving away from the ctd2007 based directory structure.

6. Send more data from VCS to T-REX \[P1 - plan for October, low risk modification\]
- by putting the lat/long into state publisher which in turn gets put in vehicle state timeline, we will be able to use the log files directly for Google Earth visualization without doing convulsions as Alhayat needs to do now.

7. Modeling how to break up a survey or goal and continue/need for interruption \[Potentially high risk modification, will require re-engineering of top level models and potential modification of TREX.&nbsp;&nbsp;&nbsp;&nbsp; Volume survey presents an easier 'restart' manually, side note from Frederic:&nbsp; Volume survey demonstrates the capability of TREX more than front following.).&nbsp;&nbsp;&nbsp; Plan for November/December, will likely 3 or months of effort (simulator and sea dates).&nbsp;&nbsp; We may not want to do this in 2009.
- this is an important (hence in bold font) issue that needs to be tackled and also something we signed up to do this year. Namely to be able to interrupt a mission and then resume. It will show a clear demarcation with the existing Layered Control work and really demonstrate that we can use plan projection for tasks which are less reactive and interrupt driven. It primarily involves modeling and will require you to be involved. It might be a case study for more complex modeling where Brent/Thom can look over your shoulder. We should aim to do this task as soon as possible given its utility (including what Julio seems to have mentioned on Monday) and its demonstration of clear implication of our work, not to mention publication possibilities.

Angel:

8. Implementation of parametric functions for Gulper usage
- this is the effort Angel is focusing on now and will provide utility-estimate based means to figure out when to trigger gulpers. More importantly this could be used in conjunction with T-REX Jr. where no deliberation for nav/control will be necessary and the standard script based approach in concert with cluster based estimation and these functions drive how a light-weight version of T-REX can be used. I have made this in bold font also given it should be considered on the critical path.

9. Resource reasoning (i.e how many gulpers left for the remainder of the mission) with and without task interruption
- this task is tied in with #7 above as one starting point for resource reasoning albeit of a simpler variety. The objective would be to see if goals can be executed/dropped in the light of existing gulper availability at sea and to do simple resource reasoning. In the event that when our AUVs have 48 hour battery charge and can revisit the location in the bay after an initial survey, the need to do this simple kind of reasoning increases.

T-REX items for Brent/Thom for '09

10. Psim modeling latency
- this issue is directly related to #3 above. And would be a nice clean sub-task that Brent can work on.

11. VCS Config file (e.g ctd1 in devices. cfg)
- this should be wrapped up with #5 above to get an overall clean approach to dealing with varying configurations. Not only should the T-REX core be properly and systematically reconfigured, but so should the VCSServer. I suggest all file configuration issues (this and #5) be given to Thom.

12. Garbage collection of behaviors on stack (Tom?)
- an item for Brent and Thom to work on. More specifically this might be something Thom can use to dive into AUV code given he's not at all familiar with how it is sturcutred other than having skimmed it some time ago.

13. Failure tracking during development
- this item relates to code checked in partially by Conor which might need modification and used for development time tracking and fixing of bugs. It also relates to issues in identifying a cause of failure and to see how improvements/augmentation can be done.

14. Set up a notification mechanism of which behavior is currently running on the stack
- this is important so in the future T-REX can work around anomalies when lower level behaviors are superseded and T-REX needs to be contexually aware of vehicle state.

15. For a light weight VCS server (T-REX Jr) [see attachment to this email]
a. fire gulper without Layered Control
b. VCSServer has no expectation on T-REX activity (i.e there is no need to track pings anymore) and it is robust to the case where T-REX is dead; this property should also be checked and applied to the StatePublisher
c. VCSServer does not launch the Supervisor but is instead launched by it and reflects the nominal operation of the vehicle (ie what Hans does)
- this is an important (therefore in bold) part of our development to demonstrate this year and will make us more ubiquitous and possibly something Hans can use on his own provided for feature tracking the features are already encoded in the clusters that have been created.

16. Track multiple sensor signals for firing gulpers
(important and useful for T-REX Jr). Share task with Angel.
- we will definitely need this in the near term (therefore also in bold). However the way in which we need to put this development feature together is in a way that differentiates us from what Rob and Layered Control can do.

17. Connecting a synthetic ocean model to the Linux Sim
- current Sim (both QNX and its Linux port) are limited in not being able to model dynamic features in the ocean. Since T-REX is going after unstructured phenomenon in the ocean, we need a way to be able to model them on shore to test the system more robustly. Mike Godin has some kind of a connection with a ROMS model. We should connect with him to understand what has been done to date.

Sea dates mission targets:

18. We agreed that for the week of Sept 7th when AUV-Linux will be tested and if/when we get a chance to do a full days mission we will use RC14\+ (i.e RC14 with the temporal constraint fix from the July 1st mission). We do not want to have any other changes brought in even if this is a test of Linux and not T-REX.

19. For the Oct 1st mission we should target (subject to agreement with John) an INL survey but use the updated 5 reactor configuration from Angel.

20. I was under the impression from an earlier schedule from John that Oct 26th is an autonomy day. But Rev 8 of the Zephyr schedule does not show that. This needs to be worked out with Teresa/Chris Grech in addition to the two floater days we still have.

Plan visualization: (Alhayat)

Both the items are things we should get Alhayat to develop during his stay, and one which seems doable. However his approach thus far is not wholly satisfactory and we need a way to have interpolation of sensor data clearly visible within Google Earth or COVE. So this should be carefully supervised.

21. Visualize plans with track: show high-level tokens on the track with Google Earth (check on status of COVE and keep that engagement going)
- do with using KML files first.
22. Make the visualization dynamic so real-time evolution can be shown in GE.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355479</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004341</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a restFULL kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.
{note}

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "bar",
            "href": "/timeline/bar"
        },
        {
            "name": "baz",
            "href": "/timeline/baz"
        },
        {
            "name": "blop",
            "href": "/timeline/blop"
        },
        {
            "name": "foo",
            "href": "/timeline/foo"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
{panel}

{panel:title=current tick}
 * *input:* none
 * *output:* 
    The date (UTC) and value (an integer) of the current tick of trex

 This call may have a push based counterpart in the future. Indeed the current tick changes in trex as time advance. in my ODSS version I currently use a tick running at a 1 mn period 
{panel}

{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/timeline/\{name\}
 ** GET http://<host>/timeline/\{name\}/\{from\}
 ** GET http://<host>/timeline/\{name\}/\{from\}/\{to\}
 ** GET http://<host>/timeline/\{name\}//\{to\}
 * *input:*
 ** \{name\} the name of the timeline
 ** \{from\} lower bound of the time window of interest _(optional)_
 ** \{to\} upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/timeline/dorado/0/100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/goal
 ** *attachment:* A json file describing the goal
 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}
{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971573</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004342</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "bar",
            "href": "/timeline/bar"
        },
        {
            "name": "baz",
            "href": "/timeline/baz"
        },
        {
            "name": "blop",
            "href": "/timeline/blop"
        },
        {
            "name": "foo",
            "href": "/timeline/foo"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
{panel}

{panel:title=current tick}
 * *input:* none
 * *output:* 
    The date (UTC) and value (an integer) of the current tick of trex

 This call may have a push based counterpart in the future. Indeed the current tick changes in trex as time advance. in my ODSS version I currently use a tick running at a 1 mn period 
{panel}

{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/timeline/\{name\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/goal
 ** *attachment:* A json file describing the goal
 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}
{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971574</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004339</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a restFULL kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.
{note}

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "bar",
            "href": "/timeline/bar"
        },
        {
            "name": "baz",
            "href": "/timeline/baz"
        },
        {
            "name": "blop",
            "href": "/timeline/blop"
        },
        {
            "name": "foo",
            "href": "/timeline/foo"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
{panel}

{panel:title=current tick}
 * *input:* none
 * *output:* 
    The date (UTC) and value (an integer) of the current tick of trex

 This call may have a push based counterpart in the future. Indeed the current tick changes in trex as time advance. in my ODSS version I currently use a tick running at a 1 mn period 
{panel}

{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/timeline/\{name\}
 ** GET http://<host>/timeline/\{name\}/\{from\}
 ** GET http://<host>/timeline/\{name\}/\{from\}/\{to\}
 ** GET http://<host>/timeline/\{name\}//\{to\}
 * *input:*
 ** \{name\} the name of the timeline
 ** \{from\} lower bound of the time window of interest _(optional)_
 ** \{to\} upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/timeline/dorado/0/100 
{panel}

{panel:title=Post a new goal}
 * *input:*
 ** The json format of the goal
 * *output:*
 ** A simple binary feedback (OK/Invalid)

 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971571</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388178</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355446</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">14221364</id>
<property name="body"><![CDATA[Lessons Learned from June 29th-30th Drifter following Experiment

{panel:title=Developer Resources}
# Security
## [Securing GWT Clients|http://java.dzone.com/articles/securing-gwt-client-acris]
# Testing
## [GWT Testing Best Practices|http://www.softdevtube.com/2010/08/09/gwt-testing-best-practices/]
## [Testing Web Clients (Selenium)|http://weblogs.java.net/blog/johnsmart/archive/2010/08/09/selenium-2web-driver-land-where-page-objects-are-king]
{panel}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">14188597</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1212604</id>
<property name="body"><![CDATA[Just a note -- the tempbox gets zapped regularly, so it might be better to store it on a Research partition?]]></property>
<property name="content" class="Comment" package="com.atlassian.confluence.pages"><id name="id">1179838</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1212603</id>
<property name="body"><![CDATA[h2. AUV CTD GUI

h3. Documentation
* Download documentation

h3. About
From [~jgb]

{quote}If you are not interested in a graphical interface for easily plotting AUV data, or never use MATLAB, read no further...

Francois Cazenave, a summer student in my lab, has developed a nice GUI for selecting and plotting AUV data.  I think he did a nice job - certainly we are finding it useful, so I wanted to share it with the rest of you.  Please find attached his instructions for loading and using the GUI.  While he is still around, it would be great if folks could try it out and send us comments (especially if you encounter problems). 

This is intended as a tool for getting at and plotting ALL of the Dorado data, for those of you that might want to delve deeper than the standard plots.  There are some known issues - for example the AUV records some of its units incorrectly (e.g. degrees and radians) and since the GUI simply reflects the AUV data set, there are some places where the units are incorrect. 

I apologize to those of you who receive this multiple times - hopefully the various AUV lists are not too redundant.{quote}



]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179837</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">14221360</id>
<property name="body"><![CDATA[Lessons Learned from June 29th-30th Drifter following Experiment]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">14188593</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1212610</id>
<property name="body"><![CDATA[h2. AUV CTD GUI (a.k.a. ReviewGUI)

h3. About
From [~jgb]

{quote}If you are not interested in a graphical interface for easily plotting AUV data, or never use MATLAB, read no further...

Francois Cazenave, a summer student in my lab, has developed a nice GUI for selecting and plotting AUV data.  I think he did a nice job - certainly we are finding it useful, so I wanted to share it with the rest of you.  Please find attached his instructions for loading and using the GUI.  While he is still around, it would be great if folks could try it out and send us comments (especially if you encounter problems). 

This is intended as a tool for getting at and plotting ALL of the Dorado data, for those of you that might want to delve deeper than the standard plots.  There are some known issues - for example the AUV records some of its units incorrectly (e.g. degrees and radians) and since the GUI simply reflects the AUV data set, there are some places where the units are incorrect. 

I apologize to those of you who receive this multiple times - hopefully the various AUV lists are not too redundant.{quote}

h3. Documentation
* [Download documentation|^AUV-CTD-GUI.doc]

h3. Download
* Zip file


]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179844</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1212609</id>
<property name="body"><![CDATA[h2. AUV CTD GUI

h3. About
From [~jgb]

{quote}If you are not interested in a graphical interface for easily plotting AUV data, or never use MATLAB, read no further...

Francois Cazenave, a summer student in my lab, has developed a nice GUI for selecting and plotting AUV data.  I think he did a nice job - certainly we are finding it useful, so I wanted to share it with the rest of you.  Please find attached his instructions for loading and using the GUI.  While he is still around, it would be great if folks could try it out and send us comments (especially if you encounter problems). 

This is intended as a tool for getting at and plotting ALL of the Dorado data, for those of you that might want to delve deeper than the standard plots.  There are some known issues - for example the AUV records some of its units incorrectly (e.g. degrees and radians) and since the GUI simply reflects the AUV data set, there are some places where the units are incorrect. 

I apologize to those of you who receive this multiple times - hopefully the various AUV lists are not too redundant.{quote}

h3. Documentation
* [Download documentation|^AUV-CTD-GUI.doc]


]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179843</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">14221362</id>
<property name="body"><![CDATA[Lessons Learned from June 29th-30th Drifter following Experiment

{panel|title=Developer Resources}
# Security
## [Securing GWT Clients|http://java.dzone.com/articles/securing-gwt-client-acris]
# Testing
## [GWT Testing Best Practices|http://www.softdevtube.com/2010/08/09/gwt-testing-best-practices/]
## [Testing Web Clients (Selenium)|http://weblogs.java.net/blog/johnsmart/archive/2010/08/09/selenium-2web-driver-land-where-page-objects-are-king]
{panel}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">14188595</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1212608</id>
<property name="body"><![CDATA[h2. AUV CTD GUI

h3. About
From [~jgb]

{quote}If you are not interested in a graphical interface for easily plotting AUV data, or never use MATLAB, read no further...

Francois Cazenave, a summer student in my lab, has developed a nice GUI for selecting and plotting AUV data.  I think he did a nice job - certainly we are finding it useful, so I wanted to share it with the rest of you.  Please find attached his instructions for loading and using the GUI.  While he is still around, it would be great if folks could try it out and send us comments (especially if you encounter problems). 

This is intended as a tool for getting at and plotting ALL of the Dorado data, for those of you that might want to delve deeper than the standard plots.  There are some known issues - for example the AUV records some of its units incorrectly (e.g. degrees and radians) and since the GUI simply reflects the AUV data set, there are some places where the units are incorrect. 

I apologize to those of you who receive this multiple times - hopefully the various AUV lists are not too redundant.{quote}

h3. Documentation
* [Download documentation|^AUV-CTD-GUI.doc]
blab balbalbabhabab


]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179842</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1212607</id>
<property name="body"><![CDATA[h2. AUV CTD GUI

h3. About
From [~jgb]

{quote}If you are not interested in a graphical interface for easily plotting AUV data, or never use MATLAB, read no further...

Francois Cazenave, a summer student in my lab, has developed a nice GUI for selecting and plotting AUV data.  I think he did a nice job - certainly we are finding it useful, so I wanted to share it with the rest of you.  Please find attached his instructions for loading and using the GUI.  While he is still around, it would be great if folks could try it out and send us comments (especially if you encounter problems). 

This is intended as a tool for getting at and plotting ALL of the Dorado data, for those of you that might want to delve deeper than the standard plots.  There are some known issues - for example the AUV records some of its units incorrectly (e.g. degrees and radians) and since the GUI simply reflects the AUV data set, there are some places where the units are incorrect. 

I apologize to those of you who receive this multiple times - hopefully the various AUV lists are not too redundant.{quote}

h3. Documentation
* [Download documentation|^AUV-CTD-GUI.doc]



]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179841</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388183</id>
<property name="body"><![CDATA[*strong*Core T-REX issues*strong*:

1. Merge front branch with mainline in SVN. 
	- the current state of T-REX is divided between the HEAD and the Front branches. There are aspects of the HEAD particularly Angel's 5 reactor configuration which should be folded in. Ideally we should merge the Front branch into the mainline and declare the Front branch dead.

2. Move to Google/T-REX
	+ move our code to Google
	+ bring in latest EUROPA code
	+ clean up interface w/ EUROPA esp. for ESA project

	- this is something long overdue and we need to work on primarily to ensure some bugs found in T-REX core and some key issues in EUROPA are incorporated. Plus not doing so incrementally and ever so often will lead to different trajectories of code base which might kill us later on. Specifically for the ESA project the last item needs to be undertaken anyway since APSI will need to replace EUROPA.
	
3. Improvements to PSim for AUV dynamics model (partially checked in to Front branch)
	- this is to make the PSim reflect the uncertainty of the environment as well as to do a better job reflecting the dynamics of the AUV itself. This also ties in with the comment from Brent to patch the PSim to reflect the latency of execution of commands sent to the VCS. This should be managed by Brent or Thom as it is a relatively independent model and will still be a strong basis for testing purposes for further development of TREX.

4. Cleaner separation of model (e.g rules.nddl)
	- this involves (along with #5 below) of cleanly separating the model elements needed for a specific mission and structuring the code base in a way that is more intuitive instead of lumping all the constraints in one file.

5. Better configuration mgmt. of files in T-REX
	- related to above, but more focused on the directory structure and build process of T-REX and moving away from the ctd2007 based directory structure.

6. Send more data from VCS to T-REX
	- by putting the lat/long into state publisher which in turn gets put in vehicle state timeline, we will be able to use the log files directly for Google Earth visualization without doing convulsions as Alhayat needs to do now. 


7. Modeling how to break up a survey or goal and continue/need for interruption
	- this is an important (hence in bold font) issue that needs to be tackled and also something we signed up to do this year. Namely to be able to interrupt a mission and then resume. It will show a clear demarcation with the existing Layered Control work and really demonstrate that we can use plan projection for tasks which are less reactive and interrupt driven. It primarily involves modeling and will require you to be involved. It might be a case study for more complex modeling where Brent/Thom can look over your shoulder. We should aim to do this task as soon as possible given its utility (including what Julio seems to have mentioned on Monday) and its demonstration of clear implication of our work, not to mention publication possibilities.

Angel:

8. Implementation of parametric functions for Gulper usage
	- this is the effort Angel is focusing on now and will provide utility-estimate based means to figure out when to trigger gulpers. More importantly this could be used in conjunction with T-REX Jr. where no deliberation for nav/control will be necessary and the standard script based approach in concert with cluster based estimation and these functions drive how a light-weight version of T-REX can be used. I have made this in bold font also given it should be considered on the critical path.

9. Resource reasoning (i.e how many gulpers left  for the remainder of the mission) with and without task interruption
	- this task is tied in with #7 above as one starting point for resource reasoning albeit of a simpler variety. The objective would be to see if goals can be executed/dropped in the light of existing gulper availability at sea and to do simple resource reasoning. In the event that when our AUVs have 48 hour battery charge and can revisit the location in the bay after an initial survey, the need to do this simple kind of reasoning increases.


T-REX items for Brent/Thom for '09

10. Psim modeling latency
	- this issue is directly related to #3 above. And would be a nice clean sub-task that Brent can work on. 

11. VCS Config file (e.g ctd1 in devices. cfg)
	- this should be wrapped up with #5 above to get an overall clean approach to dealing with varying configurations. Not only should the T-REX core be properly and systematically reconfigured, but so should the VCSServer. I suggest all file configuration issues (this and #5) be given to Thom.

12. Garbage collection of behaviors on stack (Tom?)
	- an item for Brent and Thom to work on. More specifically this might be something Thom can use to dive into AUV code given he's not at all familiar with how it is sturcutred other than having skimmed it some time ago. 

13. Failure tracking during development
	- this item relates to code checked in partially by Conor which might need modification and used for development time tracking and fixing of bugs. It also relates to issues in identifying a cause of failure and to see how improvements/augmentation can be done.

14. Set up a notification mechanism of which behavior is currently running on the stack
	- this is important so in the future T-REX can work around anomalies when lower level behaviors are superseded and T-REX needs to be contexually aware of vehicle state.

15. For a light weight VCS server (T-REX Jr) [see attachment to this email]
	a. fire gulper without Layered Control
	b. VCSServer has no expectation on T-REX activity (i.e there is no need to track pings anymore) and it is robust to the case where T-REX is dead; this property should also be checked and applied to the StatePublisher 
	c. VCSServer does not launch the Supervisor but is instead launched by it and reflects the nominal operation of the vehicle (ie what Hans does)
 	- this is an important (therefore in bold) part of our development to demonstrate this year and will make us more ubiquitous and possibly something Hans can use on his own provided for feature tracking the features are already encoded in the clusters that have been created.

16. Track multiple sensor signals for firing gulpers
	(important and useful for T-REX Jr). Share task with Angel.
	- we will definitely need this in the near term (therefore also in bold). However the way in which we need to put this development feature together is in a way that differentiates us from what Rob and Layered Control can do.

17. Connecting a synthetic ocean model to the Linux Sim
	- current Sim (both QNX and its Linux port) are limited in not being able to model dynamic features in the ocean. Since T-REX is going after unstructured phenomenon in the ocean, we need a way to be able to model them on shore to test the system more robustly. Mike Godin has some kind of a connection with a ROMS model. We should connect with him to understand what has been done to date.

Sea dates mission targets:

18. We agreed that for the week of Sept 7th when AUV-Linux will be tested and if/when we get a chance to do a full days mission we will use RC14+ (i.e RC14 with the temporal constraint fix from the July 1st mission). We do not want to have any other changes brought in even if this is a test of Linux and not T-REX.

19. For the  Oct 1st mission we should target (subject to agreement with John) an  INL survey but use the updated 5  reactor configuration from Angel. 

20. I was under the impression from an earlier schedule from John that Oct 26th is an autonomy day. But Rev 8 of the Zephyr schedule does not show that. This needs to be worked out with Teresa/Chris Grech in addition to the two floater days we still have.

Plan visualization: (Alhayat)

Both the items are things we should get Alhayat to develop during his stay, and one which seems doable. However his approach thus far is not wholly satisfactory and we need a way to have interpolation of sensor data clearly visible within Google Earth or COVE. So this should be carefully supervised.

21. Visualize plans with track: show high-level tokens on the track with Google Earth (check on status of COVE and keep that engagement going)
	- do with using KML files first.
22. Make the visualization dynamic so real-time evolution can be shown in GE.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355451</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1212602</id>
<property name="body"><![CDATA[h2. AUV CTD GUI

From [~jgb]

{quote}If you are not interested in a graphical interface for easily plotting AUV data, or never use MATLAB, read no further...

Francois Cazenave, a summer student in my lab, has developed a nice GUI for selecting and plotting AUV data.  I think he did a nice job - certainly we are finding it useful, so I wanted to share it with the rest of you.  Please find attached his instructions for loading and using the GUI.  While he is still around, it would be great if folks could try it out and send us comments (especially if you encounter problems). 

This is intended as a tool for getting at and plotting ALL of the Dorado data, for those of you that might want to delve deeper than the standard plots.  There are some known issues - for example the AUV records some of its units incorrectly (e.g. degrees and radians) and since the GUI simply reflects the AUV data set, there are some places where the units are incorrect. 

I apologize to those of you who receive this multiple times - hopefully the various AUV lists are not too redundant.{quote}

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179836</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004337</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a restFULL kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.
{note}

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "bar",
            "href": "/timeline/bar"
        },
        {
            "name": "baz",
            "href": "/timeline/baz"
        },
        {
            "name": "blop",
            "href": "/timeline/blop"
        },
        {
            "name": "foo",
            "href": "/timeline/foo"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
{panel}

{panel:title=current tick}
 * *input:* none
 * *output:* 
    The date (UTC) and value (an integer) of the current tick of trex

 This call may have a push based counterpart in the future. Indeed the current tick changes in trex as time advance. in my ODSS version I currently use a tick running at a 1 mn period 
{panel}

{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/timeline/{name}
 ** GET http://<host>/timeline/{name}/{from}
 ** GET http://<host>/timeline/{name}/{from}/{to}
 ** GET http://<host>/timeline/{name}//{to}
 * *input:*
 ** {name} the name of the timeline
 ** {from} lower bound of the time window of interest _(optional)_
 ** {to} upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
{panel}

{panel:title=Post a new goal}
 * *input:*
 ** The json format of the goal
 * *output:*
 ** A simple binary feedback (OK/Invalid)

 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971569</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388179</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09] 

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355447</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1212600</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development
[Linux Port]
[Source Code]

h2. Meeting Minutes
[2007-03-26 Autonomy project|Minutes from 2007-03-26--Status meeting on AUV Deliberative Autonomy project]
[2007-03-19 Autonomy project|Minutes from 2007-03-19--Status meeting on AUV Deliberative Autonomy project]
[2007-03-05 Autonomy project|Minutes from 2007-03-05--Status meeting on AUV Deliberative Autonomy project]
[2007-02-20 Autonomy project|Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]


]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1179833</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004335</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a restFULL kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.
{note}

{panel:title=List of trex existing timelines}
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have
{panel}

{panel:title=current tick}
 * *input:* none
 * *output:* 
    The date (UTC) and value (an integer) of the current tick of trex

 This call may have a push based counterpart in the future. Indeed the current tick changes in trex as time advance. in my ODSS version I currently use a tick running at a 1 mn period 
{panel}

{panel:title=Content of a timeline}
 * *input:*
 ** A timeline name
 ** A time interval _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval
{panel}

{panel:title=Post a new goal}
 * *input:*
 ** The json format of the goal
 * *output:*
 ** A simple binary feedback (OK/Invalid)

 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20971567</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388181</id>
<property name="body"><![CDATA[Core T-REX issues:

1. Merge front branch with mainline in SVN. 
	- the current state of T-REX is divided between the HEAD and the Front branches. There are aspects of the HEAD particularly Angel's 5 reactor configuration which should be folded in. Ideally we should merge the Front branch into the mainline and declare the Front branch dead.

2. Move to Google/T-REX
	+ move our code to Google
	+ bring in latest EUROPA code
	+ clean up interface w/ EUROPA esp. for ESA project

	- this is something long overdue and we need to work on primarily to ensure some bugs found in T-REX core and some key issues in EUROPA are incorporated. Plus not doing so incrementally and ever so often will lead to different trajectories of code base which might kill us later on. Specifically for the ESA project the last item needs to be undertaken anyway since APSI will need to replace EUROPA.
	
3. Improvements to PSim for AUV dynamics model (partially checked in to Front branch)
	- this is to make the PSim reflect the uncertainty of the environment as well as to do a better job reflecting the dynamics of the AUV itself. This also ties in with the comment from Brent to patch the PSim to reflect the latency of execution of commands sent to the VCS. This should be managed by Brent or Thom as it is a relatively independent model and will still be a strong basis for testing purposes for further development of TREX.

4. Cleaner separation of model (e.g rules.nddl)
	- this involves (along with #5 below) of cleanly separating the model elements needed for a specific mission and structuring the code base in a way that is more intuitive instead of lumping all the constraints in one file.

5. Better configuration mgmt. of files in T-REX
	- related to above, but more focused on the directory structure and build process of T-REX and moving away from the ctd2007 based directory structure.

6. Send more data from VCS to T-REX
	- by putting the lat/long into state publisher which in turn gets put in vehicle state timeline, we will be able to use the log files directly for Google Earth visualization without doing convulsions as Alhayat needs to do now. 


7. Modeling how to break up a survey or goal and continue/need for interruption
	- this is an important (hence in bold font) issue that needs to be tackled and also something we signed up to do this year. Namely to be able to interrupt a mission and then resume. It will show a clear demarcation with the existing Layered Control work and really demonstrate that we can use plan projection for tasks which are less reactive and interrupt driven. It primarily involves modeling and will require you to be involved. It might be a case study for more complex modeling where Brent/Thom can look over your shoulder. We should aim to do this task as soon as possible given its utility (including what Julio seems to have mentioned on Monday) and its demonstration of clear implication of our work, not to mention publication possibilities.

Angel:

8. Implementation of parametric functions for Gulper usage
	- this is the effort Angel is focusing on now and will provide utility-estimate based means to figure out when to trigger gulpers. More importantly this could be used in conjunction with T-REX Jr. where no deliberation for nav/control will be necessary and the standard script based approach in concert with cluster based estimation and these functions drive how a light-weight version of T-REX can be used. I have made this in bold font also given it should be considered on the critical path.

9. Resource reasoning (i.e how many gulpers left  for the remainder of the mission) with and without task interruption
	- this task is tied in with #7 above as one starting point for resource reasoning albeit of a simpler variety. The objective would be to see if goals can be executed/dropped in the light of existing gulper availability at sea and to do simple resource reasoning. In the event that when our AUVs have 48 hour battery charge and can revisit the location in the bay after an initial survey, the need to do this simple kind of reasoning increases.


T-REX items for Brent/Thom for '09

10. Psim modeling latency
	- this issue is directly related to #3 above. And would be a nice clean sub-task that Brent can work on. 

11. VCS Config file (e.g ctd1 in devices. cfg)
	- this should be wrapped up with #5 above to get an overall clean approach to dealing with varying configurations. Not only should the T-REX core be properly and systematically reconfigured, but so should the VCSServer. I suggest all file configuration issues (this and #5) be given to Thom.

12. Garbage collection of behaviors on stack (Tom?)
	- an item for Brent and Thom to work on. More specifically this might be something Thom can use to dive into AUV code given he's not at all familiar with how it is sturcutred other than having skimmed it some time ago. 

13. Failure tracking during development
	- this item relates to code checked in partially by Conor which might need modification and used for development time tracking and fixing of bugs. It also relates to issues in identifying a cause of failure and to see how improvements/augmentation can be done.

14. Set up a notification mechanism of which behavior is currently running on the stack
	- this is important so in the future T-REX can work around anomalies when lower level behaviors are superseded and T-REX needs to be contexually aware of vehicle state.

15. For a light weight VCS server (T-REX Jr) [see attachment to this email]
	a. fire gulper without Layered Control
	b. VCSServer has no expectation on T-REX activity (i.e there is no need to track pings anymore) and it is robust to the case where T-REX is dead; this property should also be checked and applied to the StatePublisher 
	c. VCSServer does not launch the Supervisor but is instead launched by it and reflects the nominal operation of the vehicle (ie what Hans does)
 	- this is an important (therefore in bold) part of our development to demonstrate this year and will make us more ubiquitous and possibly something Hans can use on his own provided for feature tracking the features are already encoded in the clusters that have been created.

16. Track multiple sensor signals for firing gulpers
	(important and useful for T-REX Jr). Share task with Angel.
	- we will definitely need this in the near term (therefore also in bold). However the way in which we need to put this development feature together is in a way that differentiates us from what Rob and Layered Control can do.

17. Connecting a synthetic ocean model to the Linux Sim
	- current Sim (both QNX and its Linux port) are limited in not being able to model dynamic features in the ocean. Since T-REX is going after unstructured phenomenon in the ocean, we need a way to be able to model them on shore to test the system more robustly. Mike Godin has some kind of a connection with a ROMS model. We should connect with him to understand what has been done to date.

Sea dates mission targets:

18. We agreed that for the week of Sept 7th when AUV-Linux will be tested and if/when we get a chance to do a full days mission we will use RC14+ (i.e RC14 with the temporal constraint fix from the July 1st mission). We do not want to have any other changes brought in even if this is a test of Linux and not T-REX.

19. For the  Oct 1st mission we should target (subject to agreement with John) an  INL survey but use the updated 5  reactor configuration from Angel. 

20. I was under the impression from an earlier schedule from John that Oct 26th is an autonomy day. But Rev 8 of the Zephyr schedule does not show that. This needs to be worked out with Teresa/Chris Grech in addition to the two floater days we still have.

Plan visualization: (Alhayat)

Both the items are things we should get Alhayat to develop during his stay, and one which seems doable. However his approach thus far is not wholly satisfactory and we need a way to have interpolation of sensor data clearly visible within Google Earth or COVE. So this should be carefully supervised.

21. Visualize plans with track: show high-level tokens on the track with Google Earth (check on status of COVE and keep that engagement going)
	- do with using KML files first.
22. Make the visualization dynamic so real-time evolution can be shown in GE.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355449</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10388270</id>
<property name="body"><![CDATA[Sept.&nbsp;9th&nbsp;Sea date: RC15 with auv-linux
* RC15 with auv-linux, 2 CPU's.&nbsp;&nbsp;&nbsp; No change to TREX.&nbsp;&nbsp; Front Following
* PSIM (nightly PSIM + monte carlo), FSIM (flight code test 150x speed), LSIM (cycle accurate simulator, analogous to QSIM), VSIM (with Linux), HITL (with Linux)
** PSIM with latency modelling \[Brent\]&nbsp;
** LSIM \-&nbsp;'angus'.&nbsp;&nbsp; Substantial task to get test platform setup. \[Thom\].&nbsp; by Aug. 7
** Bit copy from DMO auv-linux hard drive
** QSIM needed for validation of TREX (LSIM should then work no problem).&nbsp;
** VSIM with linux harddisk (at least twice, preferrably 5 times)
** Task:&nbsp;&nbsp;examine \*.cfg files used with QNX and insure they are the same when used with AUV-Linux
** AUV-Linux 'check-in', are we testing with what is used by DMO.&nbsp;&nbsp; Hans indicated he would use the head of CVS.&nbsp;&nbsp;
* \[P1, file bugs against auv-linux for changes needed for Sept sea date to insure publishing log files (McCann) is working).
\\

Oct. 1st &nbsp;Sea date:
* the head of TREX, code&nbsp;freeze by August 21st.
* Changes:
** Merged updates from RC15 into the head.&nbsp;
** Volume Survey (TBD, per John Ryan or Bob V.).&nbsp;&nbsp;&nbsp; &nbsp;
** Improved Gulper resource management (major enhancement, Angel)
** Redistributed / new partition of the model.&nbsp;&nbsp; Adding robustness to the model with more flexible constraints.&nbsp;&nbsp;
*** Work will need to be done for front following (angle has already updated volume survey).
** Transect prediction enhancement (looks further into the volume survey to calculate the min/max transects which are dynamically update)&nbsp;
\\

Date Unknown: Smart Gulper - goal would be November timeframe \[Brent\]
* Using TREX to manage Gulper sampling during a classical scripted survey
* Transition to use Corba to collect sensor data to determine Gulper firing (retiring VCS server).&nbsp;&nbsp; First step towards testing the Corba transition.
* Could be a singe CPU deployment (two user processes)
* Customer: Bob Vrijenhoek, Julio Harvey
\\

2 days contingency sea time\\

Priority:&nbsp; P1="must have", P2="should have", P3="nice to have"
\\

*Core T-REX issues:*

1. Merge front branch with mainline in SVN. \[P1\]
- The current state of T-REX is divided between the HEAD and the Front branches. There are aspects of the HEAD particularly Angel's 5 reactor configuration which should be folded in. Ideally we should merge the Front branch into the mainline and declare the Front branch dead.
-* Updates have been made to pull Front branch (RC15) to the head \[P1, Frederic, Done Jul 16\]
-* Test and Validation of the SVN head \[Frederic, Angel, in progress Jul 20, goal is to complete Jul 25\]

2. Move to Google/T-REX \[P2\] - (not crucial for MBARI, but should be done to insure clean tech transfer&nbsp;and efficient evolution in the future)
- move our code to Google \[P2\]
- clean up interface w/ EUROPA esp. for ESA project \[P2, Frederic, goal mid-Sept\]
-* Subtask: bring in latest EUROPA code to test the interface&nbsp;\[P2, Frederic&nbsp;\]

\\
- this is something long overdue and we need to work on primarily to ensure some bugs found in T-REX core and some key issues in EUROPA are incorporated. Plus not doing so incrementally and ever so often will lead to different trajectories of code base which might kill us later on. Specifically for the ESA project the last item needs to be undertaken anyway since APSI will need to replace EUROPA.

3. Improvements to PSim for AUV dynamics model (partially checked in to Front branch)
- this is to make the PSim reflect the uncertainty of the environment as well as to do a better job reflecting the dynamics of the AUV itself. This also ties in with the comment from Brent to patch the PSim to reflect the latency of execution of commands sent to the VCS. This should be managed by Brent or Thom as it is a relatively independent model and will still be a strong basis for testing purposes for further development of TREX.&nbsp;&nbsp; \[P1, Brent, Frederic to meet with Brent on Wednesday, needed by mid-August in order to be used by Sept. sea date\]

4. Cleaner separation of model (e.g rules.nddl)&nbsp; \[P3, time should be allocated in the schedule to allow refactoring, test plan is to use .valid files to verify model correctness.&nbsp;&nbsp; Goal would be to test at sea October or later\]
- this involves (along with #5 below) of cleanly separating the model elements needed for a specific mission and structuring the code base in a way that is more intuitive instead of lumping all the constraints in one file.

5. Better configuration mgmt. of files in T-REX \[P3 - plan for December, since build process changes are disruptive\]
- related to above, but more focused on the directory structure and build process of T-REX and moving away from the ctd2007 based directory structure.

6. Send more data from VCS to T-REX \[P1 - plan for October, low risk modification\]
- by putting the lat/long into state publisher which in turn gets put in vehicle state timeline, we will be able to use the log files directly for Google Earth visualization without doing convulsions as Alhayat needs to do now.

7. Modeling how to break up a survey or goal and continue/need for interruption \[Potentially high risk modification, will require re-engineering of top level models and potential modification of TREX.&nbsp;&nbsp;&nbsp;&nbsp; Volume survey presents an easier 'restart' manually, side note from Frederic:&nbsp; Volume survey demonstrates the capability of TREX more than front following.).&nbsp;&nbsp;&nbsp; Plan for November/December, will likely 3 or months of effort (simulator and sea dates).&nbsp;&nbsp; We may not want to do this in 2009.
- this is an important (hence in bold font) issue that needs to be tackled and also something we signed up to do this year. Namely to be able to interrupt a mission and then resume. It will show a clear demarcation with the existing Layered Control work and really demonstrate that we can use plan projection for tasks which are less reactive and interrupt driven. It primarily involves modeling and will require you to be involved. It might be a case study for more complex modeling where Brent/Thom can look over your shoulder. We should aim to do this task as soon as possible given its utility (including what Julio seems to have mentioned on Monday) and its demonstration of clear implication of our work, not to mention publication possibilities.

Angel:

8. Implementation of parametric functions for Gulper usage \[P1 for Oct. 1\]
- this is the effort Angel is focusing on now and will provide utility-estimate based means to figure out when to trigger gulpers. More importantly this could be used in conjunction with T-REX Jr. where no deliberation for nav/control will be necessary and the standard script based approach in concert with cluster based estimation and these functions drive how a light-weight version of T-REX can be used. I have made this in bold font also given it should be considered on the critical path.

9. Resource reasoning (i.e how many gulpers left for the remainder of the mission) with and without task interruption.&nbsp; \[P2 since there are risk associated with the associated model changes, AND, Angel is gone end of Aug. not recommended for 2009\]
- this task is tied in with #7 above as one starting point for resource reasoning albeit of a simpler variety. The objective would be to see if goals can be executed/dropped in the light of existing gulper availability at sea and to do simple resource reasoning. In the event that when our AUVs have 48 hour battery charge and can revisit the location in the bay after an initial survey, the need to do this simple kind of reasoning increases.

T-REX items for Brent/Thom for '09

10. Psim modeling latency \[P1 Brent for Sept deployment, target is 2nd week in Aug\]
- this issue is directly related to #3 above. And would be a nice clean sub-task that Brent can work on.

11. VCS Config file (e.g ctd1 in devices. cfg)&nbsp; \[P3, this task may be elimated if we transition to Corba\]
- this should be wrapped up with #5 above to get an overall clean approach to dealing with varying configurations. Not only should the T-REX core be properly and systematically reconfigured, but so should the VCSServer. I suggest all file configuration issues (this and #5) be given to Thom.

12. Garbage collection of behaviors on stack (Tom O.)&nbsp;&nbsp; \[P3, Improves FSIM efficiency, November ?\]
* For longer missions, the stack size may be an issue (setpoint 0 inserted as IDLE instruction).&nbsp;&nbsp; Another option is to add an idle behaviour with a timeout and idle_stop behaviour to terminate idle.
* an item for Brent and Thom to work on. More specifically this might be something Thom can use to dive into AUV code given he's not at all familiar with how it is sturcutred other than having skimmed it some time ago.

13. Failure tracking during development&nbsp;and deployment&nbsp;\[P1\]
- this item relates to code checked in partially by Conor which might need modification and used for development time tracking and fixing of bugs. It also relates to issues in identifying a cause of failure and to see how improvements/augmentation can be done.
- Explaination:&nbsp; there is some instrumenting in TREX that facilitates debug, new developers need guidance on how to utilize the instrumentation output to understand what to fix/change. \[P1\]&nbsp;&nbsp;
-* Additional instrumentation or improvement to existing instrumentation \[P3\]
- Pre-deployment review&nbsp;with DMO of operation parameters (max speed, max depth, check-in frequency,&nbsp;localization (too&nbsp;close to shore)).&nbsp;&nbsp; Cruise plan with details (sensors, operational parms) \[P1\]&nbsp;
- Deployment results analysis for&nbsp;concise root cause on failures - deployment results report&nbsp;\[P1\]
\\

14. Set up a notification mechanism of which behavior is currently running on the stack (Tom)&nbsp; \[P3, November-December\]
- this is important so in the future T-REX can work around anomalies when lower level behaviors are superseded and T-REX needs to be contexually aware of vehicle state.

15. For a light weight VCS server (T-REX Jr) [see attachment to this email]&nbsp; \[P2 - date is TBD\]
- a. fire gulper without Layered Control
- b. VCSServer has no expectation on T-REX activity (i.e there is no need to track pings anymore) and it is robust to the case where T-REX is dead; this property should also be checked and applied to the StatePublisher
- c. VCSServer does not launch the Supervisor but is instead launched by it and reflects the nominal operation of the vehicle (ie what Hans does)
- this is an important (therefore in bold) part of our development to demonstrate this year and will make us more ubiquitous and possibly something Hans can use on his own provided for feature tracking the features are already encoded in the clusters that have been created.

16. Track multiple sensor signals for firing gulpers&nbsp;&nbsp; \[P2, follow-on to TREX-jr / SmartGulper, likely 2010\]
(important and useful for T-REX Jr). Share task with Angel.
- we will definitely need this in the near term (therefore also in bold). However the way in which we need to put this development feature together is in a way that differentiates us from what Rob and Layered Control can do.

17. Connecting a synthetic ocean model to the Linux Sim&nbsp; \[P2, Goal is November but could be 2010, Tom O.\]
- current Sim (both QNX and its Linux port) are limited in not being able to model dynamic features in the ocean. Since T-REX is going after unstructured phenomenon in the ocean, we need a way to be able to model them on shore to test the system more robustly. Mike Godin has some kind of a connection with a ROMS model. We should connect with him to understand what has been done to date.

Sea dates mission targets:

18. We agreed that for the week of Sept 7th when AUV-Linux will be tested and if/when we get a chance to do a full days mission we will use RC15 (i.e RC14 with the temporal constraint fix from the July 1st mission). We do not want to have any other changes brought in even if this is a test of Linux and not T-REX.

19. For the Oct 1st mission we should target (subject to agreement with John) an INL survey but use the updated 5 reactor configuration from Angel.

20. I was under the impression from an earlier schedule from John that Oct 26th is an autonomy day. But Rev 8 of the Zephyr schedule does not show that. This needs to be worked out with Teresa/Chris Grech in addition to the two floater days we still have.
\\

Plan visualization: (Alhayat)

Both the items are things we should get Alhayat to develop during his stay, and one which seems doable. However his approach thus far is not wholly satisfactory and we need a way to have interpolation of sensor data clearly visible within Google Earth or COVE. So this should be carefully supervised.&nbsp;&nbsp;&nbsp;
* Contact Google Earth team about missing features.

21. Visualize plans with track: show high-level tokens on the track with Google Earth (check on status of COVE and keep that engagement going)
- do with using KML files first. \[P1 - Done, Alhayat\]

22. Make the visualization dynamic so real-time evolution can be shown in GE (programmatic interface) (P2 - goal mid-Aug, Alhayat)
* Recommendation is javascript and GE as this seems far more stable and has a larger user base even for ocean based visualization.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355542</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004801</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "bar",
            "href": "/timeline/bar"
        },
        {
            "name": "baz",
            "href": "/timeline/baz"
        },
        {
            "name": "blop",
            "href": "/timeline/blop"
        },
        {
            "name": "foo",
            "href": "/timeline/foo"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
{panel}

{panel:title=current tick}
 * *input:* none
 * *output:* 
    The date (UTC) and value (an integer) of the current tick of trex

 This call may have a push based counterpart in the future. Indeed the current tick changes in trex as time advance. in my ODSS version I currently use a tick running at a 1 mn period 
{panel}

{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/timeline/\{name\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/goal
 ** *attachment:* A json file describing the goal
 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}
{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20972038</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3180061</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Useful Debian links

** www.google.com
** http://www.debianhelp.org
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114593</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3180064</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Useful Debian links

** www.google.com
** [http://www.debianhelp.org]
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj\\ \\

Notes from ConnectTech Support site for Xtreme104 Isolated 12 port serial card\\

&nbsp;Configuring the Kernel(2.6.x){color:black}The 2.6 kernel has support for the 8250/16650 UART in <src>/drivers/serial/8250.c. You should be able to run our ISA serial cards(Echo, DFlex, Xtreme/104) with this driver and the proper Kernel configuration.{color}{color:black}You'll need to edit your serial.h file in <src>/include/asm and add in the extra serial ports of the card.{color}{color:black}Here's what I added in red for a 4 port Xtreme/104 card at I/O 300 and IRQ 5. You can do the same with your card settings. If your card is using a higher clock than be sure to adjust your BAUD_BAUD value accordingly{color}

/\* Base baud for CTI boards. Default Max Baud = 115200 bps \*/

define CTI_BAUD (1843200 /16){color:black}define STD_SERIAL_PORT_DFNS \{color}{color:black}&nbsp;/\*{color} UARTCLKPORT{color:black}IRQ FLAGS \*/ \{color}{color:black}{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /\* ttyS0 \*/ \{color}{color:black}{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /\* ttyS1 \*/ \{color}{color:black}{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /\* ttyS2 \*/ \{color}{color:black}{ 0, BASE_BAUD, 0x2E8, 3, STD_COM_FLAGS }, /\* ttyS3 \*/ \{color}{color:red}{*}{ 0, CTI_BAUD, 0x300, 5, STD_COM_FLAGS }, /\* ttyS4 \*/ \{*}{color}{color:red}{*}{ 0, CTI_BAUD, 0x308, 5, STD_COM_FLAGS }, /\* ttyS5 \*/ \{*}{color}{color:red}{*}{ 0, CTI_BAUD, 0x310, 5, STD_COM_FLAGS }, /\* ttyS6 \*/ \{*}{color}{color:red}{*}{ 0, CTI_BAUD, 0x318, 5, STD_COM_FLAGS }, /\* ttyS7 \*/*{color}
If your board has a difference clock, be sure to change the CTI_BAUD value appropriately.\\

Re-Compiling the Kernel(Linux 2.6)

*\# cd {Linux}*

At this point, you have a choice of two configuration utilities that you can use to configure your kernel. One utility, named config, is text based, and the other, named menuconfig, has a simple GUI (Graphical User Interface). The menuconfig utility is easier to use than config, so unless you have specific reasons use the menuconfig utility.

To use the menuconfig / config utility:

*\# make menuconfig*
Or
*\# make config* Once the configuration utility you choose is running, make sure that the following options are selected. Below shows the setting that must be enabled using the menuconfig and config utilities.

config: CONFIG_PCI
menuconfig: (Bus Options \-> PCI Support)\\

config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> 8250/16550 and compatible serial support)
&nbsp;

config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Extended 8250/16550 serial driver options)

config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support more than 4 legacy serial ports)
&nbsp;

config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support for sharing serial interrupts)

After all of the options have been checked and enabled, select exit. You will be prompted to save the new kernel configuration. Select yes. After you have finished configuring your kernel, issue the two following commands:

*\# make clean*
*\# make bzImage*
*\# make modules*
*\# make modules_install{*}Building/Installing the Kernel
NOTE: These instructions are for Red Hat standard installs. If you use a different distribution, or have set up your own system, these instructions will likely not help you. In that case please contact Connect Tech support at support@connecttech.com

Copy the kernel and system map to the boot partition:

The "make bzImage" step created the kernel in the subdirectory {Linux}/arch//boot. If you don't know what CPU type you're using, you can find the new kernel by:

# ls -l {Linux}/arch/*/boot/bzImage

The < cpu type > is the "*" part of the pathname of the newest kernel.
/arch//boot will be referenced by {arch}.

# cp {Linux}/{arch}/bzImage /boot/vmlinuz-bh
# cp {Linux}/System.map /boot/System.map-bh

You may choose any postfix, -df is a handy one. The postfix merely distinguishes between the kernel you've just built and other kernels already installed. It has no other purpose.
 
Creating Nodes (Ports) For the Host Adapter
NOTE: Depending on your kernel distribution and configuration, nodes(ports) are often created automatically and you can skip this step. Check to see if they exist before proceeding.

Now that we have the new kernel in place capable of supporting the Blue Heat serial adapter we must create nodes, or ports, to allow the host adapter to communicate with other devices.

To begin, boot the new kernel. After the kernel has booted, open up the messages file using Vi, or your favorite text editor:

# vi {log_path}/messages
Where {log_path} is where the system logs are stored. Typically, {log_path} = /var/log but this may be different in some distributions/systems.

Go to the bottom of the file and search backwards for references to "ttySxx" where xx is a number. You should see ttyS0 and ttyS1 for the standard serial ports, as well as a ttySxx entrie for each installed Echo/Dflex port. In order to use the new ports, these ttySxx entries must exist in the /dev directory. If they do not exist (they aren't created automatically, but do persist after reboots) you must make them with the following command:

# mknod -m [mode] /dev/ttySxx c 4 yy
[mode] is the file mode (permissions) you wish the device to have. 600 is often good.
xx is the number associated with the device which you have seen in the messages file.
yy is just xx + 64

You may also wish to make the corresponding cuaxx devices, but they are being phased out:

# mknod -m {mode} /dev/cuaxx c 5 yy
xx and yy should match the xx and yy from the previous mknod command

Here is an example of what you would do to add the nodes to your /dev directory:
First I opened the Vi editor and search for ttyS*. The results of the search show me that I have ttyS00 and ttyS01 (the standard serial ports) entries, as well as four other entries: ttyS05, ttyS06, ttyS07 and ttyS08. These four entries correspond to the four new ports for my CTI host adapter. (Right now, we are assuming a four-port card. You may have fewer or more ports, depending on the type of card you have). I've written down the four entries on a sheet of paper, seeing how my memory is a little short. Now I would like to make the nodes. From the command line, I type in the four following entries:

# mknod -m 600 /dev/ttyS05 c 4 69
# mknod -m 600 /dev/ttyS06 c 4 70
# mknod -m 600 /dev/ttyS06 c 4 71
# mknod -m 600 /dev/ttyS07 c 4 72

and optionally execute:

# mknod -m 600 /dev/cua12 c 5 69
# mknod -m 600 /dev/cua13 c 5 70
# mknod -m 600 /dev/cua14 c 5 71
# mknod -m 600 /dev/cua15 c 5 72

With the nodes in place, this finishes off our installation
 
Multiport Support
NOTE: Multiport support is not necessary for your boards to operate properly. This may safely be skipped. It is only a performance tweak available for users with older systems. Newer PCs do not gain much performance from this tweak.

Check {log_path}/messages again. Each serial port will have a line; all the ports on each board will be listed in sequence. An eight port board might look like:

ttyS4 at port 0x300 (irq = 5) is a ST16654
ttyS5 at port 0x308 (irq = 5) is a ST16654
ttyS6 at port 0x310 (irq = 5) is a ST16654
ttyS7 at port 0x318 (irq = 5) is a ST16654
ttyS8 at port 0x320 (irq = 5) is a ST16654
ttyS9 at port 0x328 (irq = 5) is a ST16654
ttyS10 at port 0x330 (irq = 5) is a ST16654
ttyS11 at port 0x338 (irq = 5) is a ST16654

"port" in the above listing is really short for "port address". To avoid confusion, I will refer to the port address as the "address" instead.

Your board will have a table of the port addresses in the manual that came with it. You will need to look up the address that the board has been configured for; the line will also tell you what address the status port is at.

{mask} is determined by the following table:
Number of ports       {mask}             2         0x03             4         0x0f             8         0xffsetserial is used to inform the driver about the status port, in the following manner:
# setserial {port} set_multiport portX {status port address} maskX {mask} matchX 0x0
where {port} is any one port on a given board (using the first port is usually the best way), {status port address} is the address of the status port as determined above, {mask} is the appropriate mask value for the board from the table above, and X is a multiport setting number between 1 and 4.

The multiport setting number will usually be 1, but can be other values. There may be other multiport settings on the irq that your board is using, set by other boards in your system, including other Connect Tech boards.
# setserial {port} get_setserial
where {port} is a port on a board that you are going to use the status port on, will reveal if there are other multiport settings in effect already. If so, take care to choose X to be the lowest empty setting number.

This needs be done only once per board that you wish to have the status port used on.

Example:
You have two boards installed, an 8 port and a 2 port. The ports on each board are:
ttyS4 at port 0x300 (irq = 5) is a ST16654
.
.
ttyS11 at port 0x338 (irq = 5) is a ST16654
ttyS12 at port 0x200 (irq = 10) is a ST16654
ttyS13 at port 0x208 (irq = 10) is a ST16654

Check to see if any other multiport settings are already in use:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:       Port Monitor = 0x0       Port1 = 0x1bf, mask=0xf, match=0xf       Port2 = 0x0, mask=0x0, match=0x0       Port3 = 0x0, mask=0x0, match=0x0       Port4 = 0x0, mask=0x0, match=0x0One multiport setting is already in use by another board.

This works on a per irq basis, so each irq that is used by a board needs to be checked:
# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:       Port Monitor = 0x0       Port1 = 0x0, mask=0x0, match=0x0       Port2 = 0x0, mask=0x0, match=0x0       Port3 = 0x0, mask=0x0, match=0x0       Port4 = 0x0, mask=0x0, match=0x0No multiport settings are in use.

The commands to enable use of the status port on each board would be:
# setserial /dev/ttyS4 set_multiport port2 0x340 mask2 0xff match2 0x00
# setserial /dev/ttyS12 set_multiport port1 0x240 mask1 0x03 match1 0x00

Check that the settings are in place:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:       Port Monitor = 0x0       Port1 = 0x1bf, mask=0xf, match=0xf       Port2 = 0x340, mask=0xff, match=0x0       Port3 = 0x0, mask=0x0, match=0x0       Port4 = 0x0, mask=0x0, match=0x0# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:       Port Monitor = 0x0       Port1 = 0x240, mask=0x3, match=0x0       Port2 = 0x0, mask=0x0, match=0x0       Port3 = 0x0, mask=0x0, match=0x0       Port4 = 0x0, mask=0x0, match=0x0# man setserial

may be of help also.
 
RS-485 Line Modes Support
The utility set485 can be used to set the line mode interactively or from a startup script. Settings stick until changed or the system is rebooted.

The Linux header file ioctls.h now contains definitions for TIOCSER485GET and TIOCSER485SET. These ioctls can be used on Connect Tech 485 capable boards to set the line mode. The mode (passed as an integer) can be one of TIOCSER485FULLDUPLEX, TIOCSER485HALFDUPLEX or TIOCSER485SLAVEMULTIPLEX for full or half duplex or slave multidrop mode, respectively.
 
The Linux 2.6 standard serial driver does not have advanced RS485 mode support as of yet. If you require this functionality please contactsupport@connecttech.comfor the latest status of patches available.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114597</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3180069</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114602</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3180068</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114601</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3180073</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned setting up the auv embedded linux environment, Debian 4.0 was installed on the workstation to match the embedded platform.

\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status Summary

* Desktop Development Machine
** Acquired old&nbsp;HP workstation from IT&nbsp;
** Red Hat Enterprise 5 was&nbsp;installed for initial development.&nbsp;&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
*** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv
** Created Instructions for Auv Debian 4.0 Linux Install and configuration&nbsp;:&nbsp;[AUV Debian4 Linux Install]\\
* Setup Build Environment
** Worked thru the dependencies required for each 3rd party package.
** Created the auv-pkgs module in CVS to archive the versions of 3rd party packages for reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.\\
* Familiarization with software stack and Driver&nbsp;debug/validation on workstation
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of bugs in the driver
** Ran soak (6 hour) test\\
h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114606</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3180071</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

Status

\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114604</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3180077</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board&nbsp;&nbsp;
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status Summary

* Desktop Development Machine
** Acquired&nbsp;2Ghz&nbsp;HP x2100 workstation from IT
** Red Hat Enterprise 5 was&nbsp;installed for initial development.&nbsp;&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
** &nbsp;
* Setup Build Environment
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* Familiarization with software stack and Driver&nbsp;debug/validation on workstation
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP (mvc-debian), changed ethernet MAC address, etc.)
** Created Instructions for Auv Debian 4.0 Linux Install and configuration&nbsp;:&nbsp;[AUV Debian4 Linux Install]\\
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Device Emulation to insure regression test and code coverage of error handlers
\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114610</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3180075</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned setting up the auv embedded linux environment, Debian 4.0 was installed on the workstation to match the embedded platform.

\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board&nbsp;&nbsp;
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status Summary

* Desktop Development Machine
** Acquired&nbsp;2Ghz&nbsp;HP x2100 workstation from IT
** Red Hat Enterprise 5 was&nbsp;installed for initial development.&nbsp;&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
** &nbsp;
* Setup Build Environment
** Worked thru the dependencies required for each 3rd party package.
** Created the auv-pkgs module in CVS to archive the versions of 3rd party packages for reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* Familiarization with software stack and Driver&nbsp;debug/validation on workstation
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP (mvc-debian), changed ethernet MAC address, etc.)
** Created Instructions for Auv Debian 4.0 Linux Install and configuration&nbsp;:&nbsp;[AUV Debian4 Linux Install]\\
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption \\

Device Emulation to insure regression test and code coverage of error handlers
\\
h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114608</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3180079</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board&nbsp;&nbsp;
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status Summary

* Desktop Development Machine
** Acquired&nbsp;2Ghz&nbsp;HP x2100 workstation from IT
** Red Hat Enterprise 5 was&nbsp;installed for initial development.&nbsp;&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
** &nbsp;
* Setup Build Environment
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* Familiarization with software stack and Driver&nbsp;debug/validation on workstation
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP (mvc-debian), changed ethernet MAC address, etc.)
** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the serial ports for the AUV.
** Created Instructions for Auv Debian 4.0 Linux Install and configuration&nbsp;:&nbsp;[AUV Debian4 Linux Install]
** \\
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Device Emulation to insure regression test and code coverage of error handlers
\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114612</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3180080</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board&nbsp;&nbsp;
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status Summary

* Desktop Development Machine
** Acquired&nbsp;2Ghz&nbsp;HP x2100 workstation from IT
** Red Hat Enterprise 5 was&nbsp;installed for initial development.&nbsp;&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
** &nbsp;
* Setup Build Environment
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* Familiarization with software stack and Driver&nbsp;debug/validation on workstation
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP (mvc-debian), changed ethernet MAC address, etc.)
** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install and configuration&nbsp;:&nbsp;[AUV Debian4 Linux Install]
** TODO
*** Rerun install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe and configure linux.&nbsp;
*** Install Fan Card driver
*** Configure eth1 for wifi
\\
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
*** parosci&nbsp;&nbsp; Paroscientific pressure sensor
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Device Emulation to insure regression test and code coverage of error handlers
\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114613</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">17498190</id>
<property name="body"><![CDATA[Critical events for 2011. This is a living document and is also part of the Autonomy-Plans.

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17465423</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">17498197</id>
<property name="body"><![CDATA[This page will refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09
* [TREX Volume Survey Operations] procedure for operations group to start the TREX volume survey
* [Autonomy Deployment Log]

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [Monte-Carlo Testing guide|https://oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist-V13.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect
* [Autonomy Plans for 2010 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans10.pdf]
* [Autonomy Plans for 2011 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans11.pdf]
* [Autonomy Critical Events for 2011|https://oceana.mbari.org/confluence/download/attachments/8912901/Timeline-2011.jpg }
* [Decision Support for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/CANON.pdf]
* [TREX and DSS Communication Protocol for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Comm-strategy.pdf]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17465430</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">17498196</id>
<property name="body"><![CDATA[This page will refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09
* [TREX Volume Survey Operations] procedure for operations group to start the TREX volume survey
* [Autonomy Deployment Log]

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [Monte-Carlo Testing guide|https://oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist-V13.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect
* [Autonomy Plans for 2010 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans10.pdf]
* [Autonomy Plans for 2011 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans11.pdf]
* [Decision Support for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/CANON.pdf]
* [TREX and DSS Communication Protocol for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Comm-strategy.pdf]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17465429</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3180169</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board&nbsp;&nbsp;
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\
* Install Desktop Linux Development Environment
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* Setup Build Environment
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* Familiarization with software stack and Driver&nbsp;debug/validation on workstation
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP (mvc-debian), changed ethernet MAC address, etc.)
** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install and configuration&nbsp;:&nbsp;[AUV Debian4 Linux Install]
** TODO
*** Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** Install Fan Card driver
*** Configure eth1 for wifi
\\
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
*** parosci&nbsp;&nbsp; Paroscientific pressure sensor
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Device Emulation to insure regression test and code coverage of error handlers
\\ \\

Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;

Serial port infrastructure

SerTest test program

Code Review

Regression testing

PC104 stack with Xtreme104&nbsp;

Serial Device emulation for regression testing.\\ \\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114704</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9831019</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [|https://oceana.mbari.org/confluence/download/attachments//TREX-Checklist.pdf|Checklist for at-sea deployments][TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798266</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9831020</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window (Term 2), login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# \[dorado1@trex2 \~\]$ *cd amc*
# \[dorado1@trex2 amc\]$ *. config.amc*
# Check the Iridium Modem
## *% minicom iridium*&nbsp;&nbsp; (dev/ttyS0 9600 8N1)
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, switch back to Term1 (mvc-dmo1 qnx)
### bash-2.00$ *cd $AUV/bin*
### bash-2.00$ *reset_a3la*&nbsp;&nbsp; (toggle modem power)&nbsp;
## Switch back to Term2 (trex2)&nbsp;minicom session&nbsp;
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In Term 3:
### \[dorado1@trex2 amc\]$ *nal \-dev /dev/ttyS0*
### should see startup, and then:&nbsp; &nbsp;\[AuvApplication\] run() - just sleeps by default
## In Term 2:
### \[dorado1@trex2 amc\]$ *cd $AUV_HOME/onboard/devices/iridium/tests*
### \[dorado1@trex2 tests\]$ *storefwdclient \-f test-a3la.sbd*
### Observe the nal driver output in Term3 and also examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# in Term3 Start the nal driver for the vsim test
## \[dorado1@trex2 amc\]$ *nohup nal \-dev /dev/ttyS0 &*
## \[dorado1@trex2 amc\]$ *tail \-f nohup.out*&nbsp; &nbsp; (check the nal driver is running - look for \[AuvApplication\] run() - just sleeps by default)
# Test the modem with a text file
## \[dorado1@trex2 tests\]$ *storefwdclient&nbsp;&nbsp;*&nbsp;&nbsp; (enter a meaningful&nbsp;test message and then wait)
## tail \-f nohup.out in Term3 or tail \-f modem.log
## If the storefwdclient fails to send the message, start storefwdclient again with no messages (enter, enter)
## A successful message from Term2 (storefwdclient looks like:

{code}
"StoreAndForward.Downlink succeeded" payload: This is Thom running VSIM at 2:45 on 2 May 2009
Got StoreAndForward event: ConnectModem complete
Done.
terminate called after throwing an instance of 'omni_thread_fatal'
{code}
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# In Term2 (trex2), make sure the config&nbsp;file is correct for vsim&nbsp;
## % \[dorado1@trex2 tests\]$ *cd \~/amc/missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In Term1&nbsp;(mvc-dmo1), startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# In Term2 Move back to the T-REX stack to fire up the T-REX client
# \[dorado1@trex2 missions\]$ *nohup ../exec/amc_o_rt front.cfg&nbsp;&nbsp;&*&nbsp;&nbsp;&nbsp; (For the time being, mission file is front.cfg).&nbsp;&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
## in Term1, bash-2.00$ *ps \-a*

{code}
  PID  PGRP SID PRI STATE   BLK  SIZE COMMAND
   17     7   0 24f  RECV     0  632K (//9/bin/Dev32)
   22     7   0 10r  RECV     0  216K (//9/bin/Pipe)
   24     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   25     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   26     7   0 20r  RECV     0  300K (//9/bin/Dev.ctiser)
   27     7   0 20r  RECV     0  440K (//9/bin/Dev32.ansi)
   31     7   0  9o  RECV     0  148K (//9/bin/Dev32.par)
   32    17   0 20r  RECV     0  316K (//9/bin/Dev32.pty)
   36     4   0 10o  RECV     0 18272K (//9/bin/Fsys.floppy)
   37     7   0 10o  RECV     0   56K (//9/bin/Iso9660fsys)
   40     7   0 20o  RECV     0   20K (//9/bin/nameloc)
   41     7   0 20o REPLY     0   16K (//9/bin/nameloc)
   43     7   0 10o  RECV     0  120K (//9/bin/Dosfsys)
   45     7   0 23r  RECV     0  336K (//9/bin/Net)
   47     7   0 20r  RECV     0  348K (//9/bin/Net.ether82557)
   48     7   0 20r  RECV     0   56K (//9/bin/Net.ether1000)
   87     7   0 10o  WAIT    -1   28K (//9/bin/tinit)
   90     7   0 10o  RECV     0   20K (//9/bin/tinit)
   91     7   0 14o  RECV     0   68K (//9/bin/Mqueue)
28928 28123   2 10o REPLY     0   36K supervisor -plan AmcPlan.cfg -dyno
28942 28123   2 10o REPLY    22   16K tee -i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
28951 28123   2 10o  RECV     0   28K eventLogServer
28953 28123   2 18o  RECV     0   64K workSite
22812 28123   2 14o  RECV     0   72K vehicleConfigurationServer
28959 28123   2 10o  RECV     0   32K externalCommsServer
28963 28123   2 14o  RECV     0  112K navigationServer
22820 28123   2 10o  RECV 28983   32K externalComms
28968 28123   2 10o  RECV     0  140K layeredControl erver -dyno -plan AmcPlan.cfg -abort
28970 28123   2 18o  RECV     0  132K navigation
28972 28123   2 14o  RECV     0   56K dynamicControlServer
28973 28123   2 14o  RECV     0  176K layeredControl -dyno -plan AmcPlan.cfg -abort abortMplan.cfg
28985 28123   2 14o  RECV     0  148K simulator
22331 28123   2 14o  RECV     0   28K simTailCone
22333 28123   2 18o  RECV     0   32K simAhrs
28991 28123   2 18o  RECV     0   72K simGps
28993 28123   2 18o  RECV     0   28K simDepthSensor
 2375 28123   2 10o  RECV     0   60K seabirdServer -n CtdIFServer -dev tcp:sci1-dmo1:10001
22857 28123   2 10o  RECV     0   60K seabirdServer -n ctdDriver2 -dev tcp:sci1-dmo1:10002
29003 28123   2 10o  RECV 29009   92K seabirdDriver -n CtdIFServer -serial tcp:sci1-dmo1:10001,9600,8,n,1
29004 28123   2 10o  RECV 29010   92K seabirdDriver -n ctdDriver2 -serial tcp:sci1-dmo1:10002,9600,8,n,1
22862 28123   2 18o  RECV     0   48K simDvl
29011 28123   2 10o  RECV     0   48K dropWeightServer -dev /dev/ser13
22869 28123   2 10o  RECV     0   64K statePublisher
22872 28123   2 10o REPLY    17   52K dropWeight -serial /dev/ser13,9600,8,n,1
28125 28123   2 10o  RECV 28926   64K ./vcsServer -v
[1]+  Exit 221                nohup ./vcsServer -v


{code}

h1. Hardware-in-the-loop Test

Open 4 terminal sessions

h5. Term1:&nbsp;

*telnet mvc-dmo1*

bash-2.00$ *cd /home/dorado1/auv_autonomy*

bash-2.00$ *. configSrc*

bash-2.00$ *qtalk \-m /dev/ser13*
*\!a<enter>*&nbsp; (look for gulperFB=1), then *ctrl-a, x*
\\
\\

h5. Term2:&nbsp;&nbsp;

*ping trex2* (waiting for the boot)&nbsp;

*ssh trex2*

\[dorado1@trex2 dorado1\]$ *cd amc*&nbsp; (/home/dorado1/amc)

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 amc\]$ *cd missions*

\[dorado1@trex2 missions\]$ *cat vcs.cfg*
{code}
<!-- Configuration file used byt VCS/CORBA adapter and others to --
  -- declare the timelines which interface with the vehicle and other --
  -- parameters.
     Note : the remoteName should preferably be  by default (at least --
  -- on svn) mvc-dmo1 other attributes of the main tag ashould _not_ --
  -- be changed ! (except you know exactly what you are doing)
-->
<Config log="1" localPort="8002" remoteName="mvc-dmo1" remotePort="8004" missionStart="init.cfg">
        <Timeline name="vehicleState"  command="0" />
        <Timeline name="setpoint" class="Setpoint" command="1" />
        <Timeline name="descend"  class="Descend" command="1" />
        <Timeline name="ascend"   class="Ascend" command="1" />
        <Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
        <Timeline name="getgps" class="GPS" command="1" />
        <Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
\[dorado1@trex2 missions\]$
\\
\[dorado1@trex2 missions\]$ *cat amc.cfg*
{code}
<!-- This file is the basic configuration for:
     - connecting to the auv (QNX or Linux)
     - and send/receive messages through the iridium modem.
     As fo now the connect is set to 1 by default as this file should
     be used on "real" conditions.
-->
<Config>
        <!- Use this component when running onboard ->
        <TeleoReactor name="vcs" component="VCSAdapter"/>         <TeleoReactor name="exec" component="DeliberativeReactor"
                lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>
        <TeleoReactor name="downlink" component="Downlink" lookAhead="1" latency="0" log="1" connect="1" config="downlink.cfg"/>
        <!- Skipper has 10 Hour lookahead. ->
        <TeleoReactor name="skipper" component="DeliberativeReactor"
                lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg"/>
</Config>
{code}

h5.


h5. Term3:

*slogin trex2*&nbsp;&nbsp;&nbsp; (or ssh trex2)

\[dorado1@trex2 amc\]$ *cd amc*

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 \~\]$ *minicom iridium*
Then type "*AT*" and look for "OK" (no quotes)

If the vehicle has just been powered up, there is no response so you'll need to enable the A3LA modem power

h5. Term1:

Switch back to Term1 (QNX mvc-dmo1) to toggle the modem power

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *reset_a3la*

h5. Term3:&nbsp;

Switch back to Term3 where minicom is running and type "AT", sometimes it says ERROR, just type AT again

Here's a sample of the minicom session:
{code}
Welcome to minicom 2.1
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jul 26 2006, 06:38:09.
Press CTRL-A Z for help on special keys
ERROR
OK
+SBDI: 0, 1602, 0, 0, 0, 0
OK
{code}
type ctrl-a, then x to leave minicom
\\

h5. Term4 (trex2):

\[dorado1@trex2 \~\]$ *cd amc*
\[dorado1@trex2 amc\]$ *. config.amc*
\[dorado1@trex2 amc\]$ *cd $AUV_HOME/onboard/bin*
\[dorado1@trex2 auv-linux\]$ *pwd*
/home/dorado1/auv-linux/onboard/bin

\[dorado1@trex2 bin\]$ *nohup ./nal \-dev /dev/ttyS0 &*
{code}
[1] 1968
[dorado1@trex2 bin]$ nohup: appending output to `nohup.out'
{code}
\[dorado1@trex2 bin\]$ *tail \-f nohup.out*
\\
{code}
terminate called after throwing an instance of 'omni_thread_fatal'
Reading log4cxx configuration file "/home/dorado1/auv-linux/onboard//sampleConfig/log4cxx.cfg"
14:20:15.598 DEBUG [NALDriver] read +GCMI response
14:20:15.623 INFO [NALDriver] manufacturer:
OK
14:20:15.623 INFO [NALDriver] initialize() complete
IOR:010000001a00000049444c3a6175762f53746f7265416e6446776449463a312e300<snip>000
14:20:15.643 DEBUG [NALApp] Leaving NALApp.initialize()
14:20:15.644 INFO [AuvApplication] run() - just sleeps by default
{code}
Then tail the modem.log

\[dorado1@trex2 bin\]$ *cd $AUV_LOG_DIR*
\[dorado1@trex2 logs\]$ *tail \-f modem.log*

\\
&nbsp;

h5. In Term3:

&nbsp;\[dorado1@trex2 bin\]$ *storefwdclient*&nbsp;&nbsp;&nbsp; (type in a descriptive test string like "This is the vehicle on the zephyr hardware in the loop test by Thom")

Check to see that the email arrived, \[auvsbd\] SBD Msg From Unit: 300003000227440, with an \*.sbd as attachment.&nbsp;&nbsp; Open the attachment with a text editor to verify the message
\\

h5. In Term1:

bash-2.00$ *cd $AUV_CONFIG_DIR*&nbsp;

bash-2.00$ *cp devices.test.cfg devices.cfg*

h5. In Term2 (trex2 in missions dir)

Verify the settings in init.cfg

\[dorado1@trex2 missions\]$ *pwd*
/home/dorado1/amc/missions
\[dorado1@trex2 missions\]$ *cat init.cfg*
\\
{code}
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
{code}

h5. In Term1 (mvc-dmo1):

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *nohup ./vcsServer \-v &*
\[1\] 8344
bash-2.00$ *ps \-a*
{code}
 8346  8344   2 10o REPLY    82   64K ./vcsServer -v
[1]+  Exit 154                nohup ./vcsServer -v
bash-2.00$ cd $AUV_LOG_DIR
bash-2.00$ ls
2009.117.00/              2009.119.00/              latest@
2009.118.00/              2009.119.01/              nov.13th.vcs.tar
2009.118.05/              CVS/                      testLogs/
2009.118.06/              VcsServer.log.0
{code}
bash-2.00$ *cd ../logs*

bash-2.00$ *tail \-f VcsServer.log.0*

h5. In Term2:

\[dorado1@trex2 missions\]$ *nohup ../exec/amc_o_rt msg.timing.1.cfg &*
\[dorado1@trex2 missions\]$ *cd ../log/*
\[dorado1@trex2 log\]$ *tail \-f latest/TREX.log*
\\

bash-2.00$ *tail \-f VcsServer.log.0*
\\
{code}
62940673.813,
######################### Wed Apr 29 21:31:13 2009
62940673.943, VcsServer -- configuration:
        Port = 8004 ms
62940673.943, VcsServer: Socket created on fd 6
62940673.993, VcsServer - running
62940853.801, VcsServer: Connected to client on 134.89.32.39
62940853.801, VcsServer[t=0, delta=0]: Grabbing data
62940853.981, VcsServer:initMission:
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
}
62940854.331, VcsServer::initMission() - starting supervisor
62940855.371, VcsServer::openLC() - created IF with LayeredControl
62940855.671, VcsServer[t=1.86987, delta=1.86987]: Grabbing data
62940891.739, VcsServer: ack - STARTED:0
62940952.044, VcsServer::handleLCMessages() - AMC mission started
62940952.044, VcsServer: ack - FINISHED:0
62941028.259, VcsServer: ack - FINISHED:5167
62941033.779, VcsServer: handling insertBehavior
62941034.039, VcsServer: ack - STARTED:6226
62941037.969, VcsServer[t=184.167, delta=0.43997]: Grabbing data
<snip> 
62941045.198, VcsServer: ack - FINISHED:6226
62941052.248, VcsServer: No ping received for 7 of up to 12 seconds
62941053.058, VcsServer: No ping received for 8 of up to 12 seconds
62941054.137, VcsServer: No ping received for 9 of up to 12 seconds
62941055.217, VcsServer: No ping received for 10 of up to 12 seconds
62941055.697, VcsServer::recvString - received 0 bytes when expected 4 (uint32_t) !!!
62941055.697, Received a NULL message : should no happen.
{code}\\
\\
\\
\\
\\
\\

bash-2.00$ ps \-a
{code}
  PID  PGRP SID PRI STATE   BLK  SIZE COMMAND
 8707  8344   2 14o  RECV     0   60K dynamicControlServer
   17     7   0 24f  RECV     0  632K (//9/bin/Dev32)
 8726  8344   2 14o  RECV     0  176K layeredControl -dyno -plan AmcPlan.cfg -abort abortMplan.cfg
   23     7   0 10r  RECV     0   32K (//9/bin/Pipe)
   24     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   25     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   26     7   0 20r  RECV     0  300K (//9/bin/Dev.ctiser)
   27     7   0 20r  RECV     0  440K (//9/bin/Dev32.ansi)
   31     7   0  9o  RECV     0  148K (//9/bin/Dev32.par)
   32    17   0 20r  RECV     0  316K (//9/bin/Dev32.pty)
   36     4   0 10o  RECV     0 18272K (//9/bin/Fsys.floppy)
   37     7   0 10o  RECV     0   56K (//9/bin/Iso9660fsys)
   40     7   0 20o  RECV     0   20K (//9/bin/nameloc)
   41     7   0 20o REPLY     0   16K (//9/bin/nameloc)
   43     7   0 10o  RECV     0  120K (//9/bin/Dosfsys)
   45     7   0 23r  RECV     0  336K (//9/bin/Net)
   47     7   0 20r  RECV     0  348K (//9/bin/Net.ether82557)
   48     7   0 20r  RECV     0   56K (//9/bin/Net.ether1000)
 8754  8344   2 18o  RECV     0  132K navigation
 8756  8344   2 14o  RECV     0   64K newTailConeServer -dev /dev/ser3
 8758  8344   2 18o  RECV     0   60K m3dmgx1Server -dev /dev/ser12 -useForNav
 8761  8344   2 19o REPLY     0   96K newTailConeDriver -dev /dev/ser3,9600,8,n,1
 8762  8344   2 18o  RECV     0   48K gpsServer -r ashtech -dev /dev/ser7
 8766  8344   2 10o  RECV     0   88K m3dmgx1 -serial /dev/ser12,9600,8,n,1
 8767  8344   2 10o  RECV     0   60K parosciServer -dev /dev/ser5
 8772  8344   2 10o  RECV  8791   60K ashtechDriver -serial /dev/ser7,9600,8,n,1
 8773  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver -dev tcp:sci1-dmo1:10001
 8774  8344   2 19o REPLY    17   84K parosci -serial /dev/ser5,9600,8,n,1
 8778  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver2 -dev tcp:sci1-dmo1:10002
 8779  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver -serial tcp:sci1-dmo1:10001,9600,8,n,1
 8782  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver2 -serial tcp:sci1-dmo1:10002,9600,8,n,1
 8793  8344   2 10o  RECV     0   52K bluefinBattServer -dev /dev/ser10
 8796  8344   2 18o  RECV     0   52K dvlServer -dev /dev/ser6
   94     7   0 10o  WAIT    -1   28K (//9/bin/tinit)
 8799  8344   2 10o REPLY     0   68K bluefinBattDriver -dev /dev/ser10
   98     7   0 10o  RECV     0   20K (//9/bin/tinit)
   99     7   0 14o  RECV     0   68K (//9/bin/Mqueue)
 8804  8344   2 10o REPLY    17   80K dvl -serial /dev/ser6,9600,8,n,1
 8806  8344   2 10o  RECV     0   48K dropWeightServer -dev /dev/ser13
 8814  8344   2 10o  RECV     0   64K statePublisher
 8818  8344   2 10o READY         52K dropWeight -serial /dev/ser13,9600,8,n,1
 8346  8344   2 10o REPLY     0   64K ./vcsServer -v
 8658  8344   2 10o REPLY     0   36K supervisor -plan AmcPlan.cfg -dyno
 8667  8344   2 10o REPLY    23   16K tee -i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
 8675  8344   2 10o  RECV     0   28K eventLogServer
 8677  8344   2 18o  RECV     0   64K workSite
 8679  8344   2 18o  RECV     0   72K vehicleConfigurationServer
 8682  8344   2 10o  RECV     0   32K externalCommsServer
 8686  8344   2 14o  RECV     0  112K navigationServer
 8688  8344   2 10o  RECV  8760   32K externalComms
 8690  8344   2 10o  RECV     0  140K layeredControl erver -dyno -plan AmcPlan.cfg -abort
{code}
bash-2.00$ *slay supervisor*
bash-2.00$ *ps \-a&nbsp;&nbsp;*

h5. In Term2 (trex2):

Verify that amc_o_rt has terminated

\[dorado1@trex2 log\]$ *ps \-elf \| grep amc*
0 R dorado1&nbsp;&nbsp; 2040&nbsp; 1761&nbsp; 0&nbsp; 78&nbsp;&nbsp; 0 \-&nbsp;&nbsp; 975 \-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14:45 pts/0&nbsp;&nbsp;&nbsp; 00:00:00 grep amc

Verify that TREX did not have a problem (relax in the log is BAD)
\\
\[dorado1@trex2 log\]$ *grep relax latest/TREX.log*
\[dorado1@trex2 log\]$
\\

Before turning off the power to the&nbsp;vehicle,&nbsp;shutdown the OS on TREX2 and mvc-dmo1 to prep for power off

\[dorado1@trex2 logs\]$ su root
Password:
\[root@trex2 logs\]# /sbin/shutdown now

Broadcast message from root (pts/2) (Wed Apr 29 14:48:07 2009):

The system is going down to maintenance mode NOW\!
\[root@trex2 logs\]#

In Term1:

bash-2.00$ su root
bash-2.00# shutdown \-b]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798267</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9831022</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window (Term 2), login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# \[dorado1@trex2 \~\]$ *cd amc*
# \[dorado1@trex2 amc\]$ *. config.amc*
# Check the Iridium Modem
## *% minicom iridium*&nbsp;&nbsp; (dev/ttyS0 9600 8N1)
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, switch back to Term1 (mvc-dmo1 qnx)
### bash-2.00$ *cd $AUV/bin*
### bash-2.00$ *reset_a3la*&nbsp;&nbsp; (toggle modem power)&nbsp;
## Switch back to Term2 (trex2)&nbsp;minicom session&nbsp;
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In Term 3:
### \[dorado1@trex2 amc\]$ *nal \-dev /dev/ttyS0*
### should see startup, and then:&nbsp; &nbsp;\[AuvApplication\] run() - just sleeps by default
## In Term 2:
### \[dorado1@trex2 amc\]$ *cd $AUV_HOME/onboard/devices/iridium/tests*
### \[dorado1@trex2 tests\]$ *storefwdclient \-f test-a3la.sbd*
### Observe the nal driver output in Term3 and also examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# in Term3 Start the nal driver for the vsim test
## \[dorado1@trex2 amc\]$ *nohup nal \-dev /dev/ttyS0 &*
## \[dorado1@trex2 amc\]$ *tail \-f nohup.out*&nbsp; &nbsp; (check the nal driver is running - look for \[AuvApplication\] run() - just sleeps by default)
# Test the modem with a text file
## \[dorado1@trex2 tests\]$ *storefwdclient&nbsp;&nbsp;*&nbsp;&nbsp; (enter a meaningful&nbsp;test message and then wait)
## tail \-f nohup.out in Term3 or tail \-f modem.log
## If the storefwdclient fails to send the message, start storefwdclient again with no messages (enter, enter)
## A successful message from Term2 (storefwdclient looks like:

{code}
"StoreAndForward.Downlink succeeded" payload: This is Thom running VSIM at 2:45 on 2 May 2009
Got StoreAndForward event: ConnectModem complete
Done.
terminate called after throwing an instance of 'omni_thread_fatal'
{code}
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# In Term2 (trex2), make sure the config&nbsp;file is correct for vsim&nbsp;
## % \[dorado1@trex2 tests\]$ *cd \~/amc/missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In Term1&nbsp;(mvc-dmo1), startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# In Term2 Move back to the T-REX stack to fire up the T-REX client
# \[dorado1@trex2 missions\]$ *nohup ../exec/amc_o_rt front.cfg&nbsp;&nbsp;&*&nbsp;&nbsp;&nbsp; (For the time being, mission file is front.cfg).&nbsp;&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
## in Term1, bash-2.00$ *ps \-a*

{code}
  PID  PGRP SID PRI STATE   BLK  SIZE COMMAND
   17     7   0 24f  RECV     0  632K (//9/bin/Dev32)
   22     7   0 10r  RECV     0  216K (//9/bin/Pipe)
   24     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   25     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   26     7   0 20r  RECV     0  300K (//9/bin/Dev.ctiser)
   27     7   0 20r  RECV     0  440K (//9/bin/Dev32.ansi)
   31     7   0  9o  RECV     0  148K (//9/bin/Dev32.par)
   32    17   0 20r  RECV     0  316K (//9/bin/Dev32.pty)
   36     4   0 10o  RECV     0 18272K (//9/bin/Fsys.floppy)
   37     7   0 10o  RECV     0   56K (//9/bin/Iso9660fsys)
   40     7   0 20o  RECV     0   20K (//9/bin/nameloc)
   41     7   0 20o REPLY     0   16K (//9/bin/nameloc)
   43     7   0 10o  RECV     0  120K (//9/bin/Dosfsys)
   45     7   0 23r  RECV     0  336K (//9/bin/Net)
   47     7   0 20r  RECV     0  348K (//9/bin/Net.ether82557)
   48     7   0 20r  RECV     0   56K (//9/bin/Net.ether1000)
   87     7   0 10o  WAIT    -1   28K (//9/bin/tinit)
   90     7   0 10o  RECV     0   20K (//9/bin/tinit)
   91     7   0 14o  RECV     0   68K (//9/bin/Mqueue)
28928 28123   2 10o REPLY     0   36K supervisor -plan AmcPlan.cfg -dyno
28942 28123   2 10o REPLY    22   16K tee -i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
28951 28123   2 10o  RECV     0   28K eventLogServer
28953 28123   2 18o  RECV     0   64K workSite
22812 28123   2 14o  RECV     0   72K vehicleConfigurationServer
28959 28123   2 10o  RECV     0   32K externalCommsServer
28963 28123   2 14o  RECV     0  112K navigationServer
22820 28123   2 10o  RECV 28983   32K externalComms
28968 28123   2 10o  RECV     0  140K layeredControl erver -dyno -plan AmcPlan.cfg -abort
28970 28123   2 18o  RECV     0  132K navigation
28972 28123   2 14o  RECV     0   56K dynamicControlServer
28973 28123   2 14o  RECV     0  176K layeredControl -dyno -plan AmcPlan.cfg -abort abortMplan.cfg
28985 28123   2 14o  RECV     0  148K simulator
22331 28123   2 14o  RECV     0   28K simTailCone
22333 28123   2 18o  RECV     0   32K simAhrs
28991 28123   2 18o  RECV     0   72K simGps
28993 28123   2 18o  RECV     0   28K simDepthSensor
 2375 28123   2 10o  RECV     0   60K seabirdServer -n CtdIFServer -dev tcp:sci1-dmo1:10001
22857 28123   2 10o  RECV     0   60K seabirdServer -n ctdDriver2 -dev tcp:sci1-dmo1:10002
29003 28123   2 10o  RECV 29009   92K seabirdDriver -n CtdIFServer -serial tcp:sci1-dmo1:10001,9600,8,n,1
29004 28123   2 10o  RECV 29010   92K seabirdDriver -n ctdDriver2 -serial tcp:sci1-dmo1:10002,9600,8,n,1
22862 28123   2 18o  RECV     0   48K simDvl
29011 28123   2 10o  RECV     0   48K dropWeightServer -dev /dev/ser13
22869 28123   2 10o  RECV     0   64K statePublisher
22872 28123   2 10o REPLY    17   52K dropWeight -serial /dev/ser13,9600,8,n,1
28125 28123   2 10o  RECV 28926   64K ./vcsServer -v
[1]+  Exit 221                nohup ./vcsServer -v


{code}

h1. Hardware-in-the-loop Test

Open 4 terminal sessions

h5. Term1:&nbsp;

*telnet mvc-dmo1*

bash-2.00$ *cd /home/dorado1/auv_autonomy*

bash-2.00$ *. configSrc*

bash-2.00$ *qtalk \-m /dev/ser13*
*\!a<enter>*&nbsp; (look for gulperFB=1), then *ctrl-a, x*
\\
\\

h5. Term2:&nbsp;&nbsp;

*ping trex2* (waiting for the boot)&nbsp;

*ssh trex2*

\[dorado1@trex2 dorado1\]$ *cd amc*&nbsp; (/home/dorado1/amc)

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 amc\]$ *cd missions*

\[dorado1@trex2 missions\]$ *cat vcs.cfg*
{code}
<!-- Configuration file used byt VCS/CORBA adapter and others to --
  -- declare the timelines which interface with the vehicle and other --
  -- parameters.
     Note : the remoteName should preferably be  by default (at least --
  -- on svn) mvc-dmo1 other attributes of the main tag ashould _not_ --
  -- be changed ! (except you know exactly what you are doing)
-->
<Config log="1" localPort="8002" remoteName="mvc-dmo1" remotePort="8004" missionStart="init.cfg">
        <Timeline name="vehicleState"  command="0" />
        <Timeline name="setpoint" class="Setpoint" command="1" />
        <Timeline name="descend"  class="Descend" command="1" />
        <Timeline name="ascend"   class="Ascend" command="1" />
        <Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
        <Timeline name="getgps" class="GPS" command="1" />
        <Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
\[dorado1@trex2 missions\]$
\\
\[dorado1@trex2 missions\]$ *cat amc.cfg*
{code}
<!-- This file is the basic configuration for:
     - connecting to the auv (QNX or Linux)
     - and send/receive messages through the iridium modem.
     As fo now the connect is set to 1 by default as this file should
     be used on "real" conditions.
-->
<Config>
        <!- Use this component when running onboard ->
        <TeleoReactor name="vcs" component="VCSAdapter"/>         <TeleoReactor name="exec" component="DeliberativeReactor"
                lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>
        <TeleoReactor name="downlink" component="Downlink" lookAhead="1" latency="0" log="1" connect="1" config="downlink.cfg"/>
        <!- Skipper has 10 Hour lookahead. ->
        <TeleoReactor name="skipper" component="DeliberativeReactor"
                lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg"/>
</Config>
{code}

h5.


h5. Term3:

*slogin trex2*&nbsp;&nbsp;&nbsp; (or ssh trex2)

\[dorado1@trex2 amc\]$ *cd amc*

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 \~\]$ *minicom iridium*
Then type "*AT*" and look for "OK" (no quotes)

If the vehicle has just been powered up, there is no response so you'll need to enable the A3LA modem power

h5. Term1:

Switch back to Term1 (QNX mvc-dmo1) to toggle the modem power

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *reset_a3la*

h5. Term3:&nbsp;

Switch back to Term3 where minicom is running and type "AT", sometimes it says ERROR, just type AT again

Here's a sample of the minicom session:
{code}
Welcome to minicom 2.1
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jul 26 2006, 06:38:09.
Press CTRL-A Z for help on special keys
ERROR
OK
+SBDI: 0, 1602, 0, 0, 0, 0
OK
{code}
type ctrl-a, then x to leave minicom
\\

h5. Term4 (trex2):

\[dorado1@trex2 \~\]$ *cd amc*
\[dorado1@trex2 amc\]$ *. config.amc*
\[dorado1@trex2 amc\]$ *cd $AUV_HOME/onboard/bin*
\[dorado1@trex2 auv-linux\]$ *pwd*
/home/dorado1/auv-linux/onboard/bin

\[dorado1@trex2 bin\]$ *nohup ./nal \-dev /dev/ttyS0 &*
{code}
[1] 1968
[dorado1@trex2 bin]$ nohup: appending output to `nohup.out'
{code}
\[dorado1@trex2 bin\]$ *tail \-f nohup.out*
\\
{code}
terminate called after throwing an instance of 'omni_thread_fatal'
Reading log4cxx configuration file "/home/dorado1/auv-linux/onboard//sampleConfig/log4cxx.cfg"
14:20:15.598 DEBUG [NALDriver] read +GCMI response
14:20:15.623 INFO [NALDriver] manufacturer:
OK
14:20:15.623 INFO [NALDriver] initialize() complete
IOR:010000001a00000049444c3a6175762f53746f7265416e6446776449463a312e300<snip>000
14:20:15.643 DEBUG [NALApp] Leaving NALApp.initialize()
14:20:15.644 INFO [AuvApplication] run() - just sleeps by default
{code}
Then tail the modem.log

\[dorado1@trex2 bin\]$ *cd $AUV_LOG_DIR*
\[dorado1@trex2 logs\]$ *tail \-f modem.log*

\\
&nbsp;

h5. In Term3:

&nbsp;\[dorado1@trex2 bin\]$ *storefwdclient*&nbsp;&nbsp;&nbsp; (type in a descriptive test string like "This is the vehicle on the zephyr hardware in the loop test by Thom")

Check to see that the email arrived, \[auvsbd\] SBD Msg From Unit: 300003000227440, with an \*.sbd as attachment.&nbsp;&nbsp; Open the attachment with a text editor to verify the message
\\

h5. In Term1:

bash-2.00$ *cd $AUV_CONFIG_DIR*&nbsp;

bash-2.00$ *cp devices.test.cfg devices.cfg*

h5. In Term2 (trex2 in missions dir)

Verify the settings in init.cfg

\[dorado1@trex2 missions\]$ *pwd*
/home/dorado1/amc/missions
\[dorado1@trex2 missions\]$ *cat init.cfg*
\\
{code}
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
{code}

h5. In Term1 (mvc-dmo1):

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *nohup ./vcsServer \-v &*
\[1\] 8344
bash-2.00$ *ps \-a*
{code}
 8346  8344   2 10o REPLY    82   64K ./vcsServer -v
[1]+  Exit 154                nohup ./vcsServer -v
bash-2.00$ cd $AUV_LOG_DIR
bash-2.00$ ls
2009.117.00/              2009.119.00/              latest@
2009.118.00/              2009.119.01/              nov.13th.vcs.tar
2009.118.05/              CVS/                      testLogs/
2009.118.06/              VcsServer.log.0
{code}
bash-2.00$ *cd ../logs*

bash-2.00$ *tail \-f VcsServer.log.0*

h5. In Term2:

\[dorado1@trex2 missions\]$ *nohup ../exec/amc_o_rt msg.timing.1.cfg &*
\[dorado1@trex2 missions\]$ *cd ../log/*
\[dorado1@trex2 log\]$ *tail \-f latest/TREX.log*
\\

bash-2.00$ *tail \-f VcsServer.log.0*
\\
{code}
62940673.813,
######################### Wed Apr 29 21:31:13 2009
62940673.943, VcsServer -- configuration:
        Port = 8004 ms
62940673.943, VcsServer: Socket created on fd 6
62940673.993, VcsServer - running
62940853.801, VcsServer: Connected to client on 134.89.32.39
62940853.801, VcsServer[t=0, delta=0]: Grabbing data
62940853.981, VcsServer:initMission:
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
}
62940854.331, VcsServer::initMission() - starting supervisor
62940855.371, VcsServer::openLC() - created IF with LayeredControl
62940855.671, VcsServer[t=1.86987, delta=1.86987]: Grabbing data
62940891.739, VcsServer: ack - STARTED:0
62940952.044, VcsServer::handleLCMessages() - AMC mission started
62940952.044, VcsServer: ack - FINISHED:0
62941028.259, VcsServer: ack - FINISHED:5167
62941033.779, VcsServer: handling insertBehavior
62941034.039, VcsServer: ack - STARTED:6226
62941037.969, VcsServer[t=184.167, delta=0.43997]: Grabbing data
<snip> 
62941045.198, VcsServer: ack - FINISHED:6226
62941052.248, VcsServer: No ping received for 7 of up to 12 seconds
62941053.058, VcsServer: No ping received for 8 of up to 12 seconds
62941054.137, VcsServer: No ping received for 9 of up to 12 seconds
62941055.217, VcsServer: No ping received for 10 of up to 12 seconds
62941055.697, VcsServer::recvString - received 0 bytes when expected 4 (uint32_t) !!!
62941055.697, Received a NULL message : should no happen.
{code}\\
\\
\\
\\
\\
\\

bash-2.00$ ps \-a
{code}
  PID  PGRP SID PRI STATE   BLK  SIZE COMMAND
 8707  8344   2 14o  RECV     0   60K dynamicControlServer
   17     7   0 24f  RECV     0  632K (//9/bin/Dev32)
 8726  8344   2 14o  RECV     0  176K layeredControl -dyno -plan AmcPlan.cfg -abort abortMplan.cfg
   23     7   0 10r  RECV     0   32K (//9/bin/Pipe)
   24     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   25     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   26     7   0 20r  RECV     0  300K (//9/bin/Dev.ctiser)
   27     7   0 20r  RECV     0  440K (//9/bin/Dev32.ansi)
   31     7   0  9o  RECV     0  148K (//9/bin/Dev32.par)
   32    17   0 20r  RECV     0  316K (//9/bin/Dev32.pty)
   36     4   0 10o  RECV     0 18272K (//9/bin/Fsys.floppy)
   37     7   0 10o  RECV     0   56K (//9/bin/Iso9660fsys)
   40     7   0 20o  RECV     0   20K (//9/bin/nameloc)
   41     7   0 20o REPLY     0   16K (//9/bin/nameloc)
   43     7   0 10o  RECV     0  120K (//9/bin/Dosfsys)
   45     7   0 23r  RECV     0  336K (//9/bin/Net)
   47     7   0 20r  RECV     0  348K (//9/bin/Net.ether82557)
   48     7   0 20r  RECV     0   56K (//9/bin/Net.ether1000)
 8754  8344   2 18o  RECV     0  132K navigation
 8756  8344   2 14o  RECV     0   64K newTailConeServer -dev /dev/ser3
 8758  8344   2 18o  RECV     0   60K m3dmgx1Server -dev /dev/ser12 -useForNav
 8761  8344   2 19o REPLY     0   96K newTailConeDriver -dev /dev/ser3,9600,8,n,1
 8762  8344   2 18o  RECV     0   48K gpsServer -r ashtech -dev /dev/ser7
 8766  8344   2 10o  RECV     0   88K m3dmgx1 -serial /dev/ser12,9600,8,n,1
 8767  8344   2 10o  RECV     0   60K parosciServer -dev /dev/ser5
 8772  8344   2 10o  RECV  8791   60K ashtechDriver -serial /dev/ser7,9600,8,n,1
 8773  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver -dev tcp:sci1-dmo1:10001
 8774  8344   2 19o REPLY    17   84K parosci -serial /dev/ser5,9600,8,n,1
 8778  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver2 -dev tcp:sci1-dmo1:10002
 8779  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver -serial tcp:sci1-dmo1:10001,9600,8,n,1
 8782  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver2 -serial tcp:sci1-dmo1:10002,9600,8,n,1
 8793  8344   2 10o  RECV     0   52K bluefinBattServer -dev /dev/ser10
 8796  8344   2 18o  RECV     0   52K dvlServer -dev /dev/ser6
   94     7   0 10o  WAIT    -1   28K (//9/bin/tinit)
 8799  8344   2 10o REPLY     0   68K bluefinBattDriver -dev /dev/ser10
   98     7   0 10o  RECV     0   20K (//9/bin/tinit)
   99     7   0 14o  RECV     0   68K (//9/bin/Mqueue)
 8804  8344   2 10o REPLY    17   80K dvl -serial /dev/ser6,9600,8,n,1
 8806  8344   2 10o  RECV     0   48K dropWeightServer -dev /dev/ser13
 8814  8344   2 10o  RECV     0   64K statePublisher
 8818  8344   2 10o READY         52K dropWeight -serial /dev/ser13,9600,8,n,1
 8346  8344   2 10o REPLY     0   64K ./vcsServer -v
 8658  8344   2 10o REPLY     0   36K supervisor -plan AmcPlan.cfg -dyno
 8667  8344   2 10o REPLY    23   16K tee -i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
 8675  8344   2 10o  RECV     0   28K eventLogServer
 8677  8344   2 18o  RECV     0   64K workSite
 8679  8344   2 18o  RECV     0   72K vehicleConfigurationServer
 8682  8344   2 10o  RECV     0   32K externalCommsServer
 8686  8344   2 14o  RECV     0  112K navigationServer
 8688  8344   2 10o  RECV  8760   32K externalComms
 8690  8344   2 10o  RECV     0  140K layeredControl erver -dyno -plan AmcPlan.cfg -abort
{code}
bash-2.00$ *slay supervisor*
bash-2.00$ *ps \-a&nbsp;&nbsp;*

h5. In Term2 (trex2):

Verify that amc_o_rt has terminated

\[dorado1@trex2 log\]$ *ps \-elf \| grep amc*
0 R dorado1&nbsp;&nbsp; 2040&nbsp; 1761&nbsp; 0&nbsp; 78&nbsp;&nbsp; 0 \-&nbsp;&nbsp; 975 \-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14:45 pts/0&nbsp;&nbsp;&nbsp; 00:00:00 grep amc

Verify that TREX did not have a problem (relax in the log is BAD)
\\
\[dorado1@trex2 log\]$ *grep relax latest/TREX.log*
\[dorado1@trex2 log\]$
\\

Before turning off the power to the&nbsp;vehicle,&nbsp;shutdown the OS on TREX2 and mvc-dmo1 to prep for power off

\[dorado1@trex2 logs\]$ su root
Password:
\[root@trex2 logs\]# /sbin/shutdown now

Broadcast message from root (pts/2) (Wed Apr 29 14:48:07 2009):

The system is going down to maintenance mode NOW\!
\[root@trex2 logs\]#

In Term1:

bash-2.00$ su root
bash-2.00# shutdown \-b

h4. Testing goal posting through iridium

starts the mission  msg.timing.1.cfg

\[dorado1@trex2 missions\]$ *../exec/amc_o_rt msg.timing.1.cfg*

look for the creation of the pipe on TREX.log

\[dorado1@trex2 missions\]$ *tail -f ../log/latest/TREX.log | grep listening*
[downlink] listening to "msg.timing.1.downlink" (fid=<a number>)

The pipe msg.timing.1.downlink (naming convention is <name of the mission>.downlink) has been created in the directory where TREX has been started (in this case ~/amc/missions). You can then send the goal through this pipe. Create a file goal.sbd with following content :
{code}
<Goal on="front" predicate="Front.Info">
 <Assert name="depth"><value type="float" name="17"/></Assert>
 <Assert name="temperature"><value type="float" name="1.520000e+01"/></Assert>
 <Assert name="mapDepth"><value type="float" name="30"/></Assert>
</Goal>
{code}
And send it in the pipe :
\[dorado1@trex2 missions\] *cat goal.sbd > msg.timing.1.cfg

{note}
this has to be done relatively quickly to avoid to miss the only communication window in msg.timing.1
{note}

then check that the goal has been correctly collected and dispatched before the end of the mission. You should see a message similar to this in TREX.log

[downlink][<number>]Dispatching Front.Info(<a number>)
[exec][<number>]Request received: ON front REQ Front.Info(<a number>)...




]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798269</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10945091</id>
<property name="body"><![CDATA[This page will refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09
* [Autonomy Deployment Log]

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [Monte-Carlo Testing guide|https://oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect
* [Autonomy Plans for 2010 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans10.pdf]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10912344</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9831018</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments//TREX-Checklist.pdf|Checklist for at-sea deployments]: Checklist for at-sea deployment procedures on CTD AUV
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798265</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5407483</id>
<property name="body"><![CDATA[*Auv Driver Portnig Links*
* *[AUV Linux - Driver Port and Validation]*
* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
\\
\\

h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}
\\
\\
\\
*Status details:*
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00

E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080

007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF468

19F04C10088000000000000000000000000010A0031004400008000800080008000800080008000800

08000800080008000800080008000800080008000800080008000800080008000800080008000800080

00800080008000800080008000800080008000800080008000800080008000800080008000800080008

00080008000800080008000800080008000800080008000800080008000800080008000800080008000

80008000800080008000800080008000800080008000800080008000800080008000800080008000800

080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C06

0E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090

306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F45393

5362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B

2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B

2625272B2625272B2625282B2625282B00046400000000006400000064000000640000006400000064

00000064000000640000006400000064000000640000006400000064000000640000006400000064000

00064000000640000006400000064000000640000006400000064000000640000006400000601000000

DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A

0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5374753</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11829565</id>
<property name="body"><![CDATA[\\

Open two terminal shells:
\\

&nbsp;In Terminal 1
# telnet mvc-dmo1-rf (dorado1 user and pass)
# cd auv-qnx
# . configSrc
# echo $AUV (verify quv-qnx)
# qtalk \-m /dev/ser13
## \!a<enter>&nbsp;&nbsp; (to turn on TREX2 cpu)
## ctrl-a x&nbsp;&nbsp; (to exit)
# cd $AUV/bin
# < pause> and follow procedure in Terminal 2 below
# nohup ./vcsServer \-v &
# ps \-a&nbsp;
# Go to terminal 2 and launch amc_o_rt
# ps-a (after amc_o_rt starts, you should see the processes of auv-qnx spawned.
# to terminate by force:&nbsp;&nbsp; slay supervisor&nbsp;&nbsp; slay vcsServer
\\

In Terminal 2
# slogin dorado1@trex2
# cd amc
# . config.amc
# cd mission
# cat init.cfg (check depth envelop, check mission time in seconds)
# <Pause and Go to Terminal 1 and launch vcsServer>
# nohup ../exec/amc_o_rt science4.cfg &
# cd \~/amc/log/latest
# tail \-f TREX.log&nbsp;&nbsp; ( it takes about 30 seconds or so to start and then lots of activity, should be no error or 'relax' in the stream of log messages)
# go to terminal 1
# to terminate by force:&nbsp;&nbsp; killall amc_o_rt

when the vehicle has surfaced, to&nbsp;check for gulpers (not required, but if you are bored and want to see)
# slogin dorado1@trex2
# cd amc
# . config.amc&nbsp;
# ./bin/signal_process.hsh&nbsp; (returns how many gulpers have fired, how far it is in transect, if signal is below 0.045 then it will be low res transect of 1Km, if above 0.12 it is high res 500m separation, if in between 750m)\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11796808</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5407470</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
* [Driver Porting Details]&nbsp;
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to develop termios serial driver and validate 12 port serial card kernel driver.&nbsp;&nbsp;Tune hardware
* Recommend build-up of a test PC104 (Lippert board) + Xtreme104 12 port serial card with harddisk.

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;

\\

h6. Skill Requirements for Tasks:&nbsp;

C++, Linux, Termios, Familiarity with Navigation and Science Sensors and Debian Linux
\\

h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass). \\
**** crossbow AHRS compass - Hans requested focus on this driver first (July 2008), however it will likely not be on a deployed vehicle since 3dmgx1 is preferred.
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.&nbsp;
\\
\\
\\
\\
&nbsp;

h4. \\


h3.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5374740</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5407468</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
* [Driver Porting Details]&nbsp;
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to develop termios serial driver and validate 12 port serial card kernel driver.&nbsp;&nbsp;Tune hardware
* Recommend build-up of a test PC104 (Lippert board) + Xtreme104 12 port serial card with harddisk.

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;
\\

h6. Skill Requirements for Tasks:&nbsp;

C++, Linux, Termios, Familiarity with Navigation and Science Sensors and Debian Linux\\

h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.&nbsp;
\\
\\
\\
\\
&nbsp;

h4. \\


h3.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5374738</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5865553</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.
\\

Xtreme104 Serial Setup
\\

serial.conf looks like

mvc-debian4:/proc# cat /etc/serial.conf
/dev/ttyS1 uart 16450 port 0x2F8 irq 3

\#Xtreme card
\# Group A
/dev/ttyS2 uart 16850 port 0x380 irq 9&nbsp; baud_base 1500000
/dev/ttyS3 uart 16850 port 0x388 irq 9&nbsp; baud_base 1500000
/dev/ttyS4 uart 16850 port 0x390 irq 9&nbsp; baud_base 1500000
/dev/ttyS5 uart 16850 port 0x398 irq 9&nbsp; baud_base 1500000

\# Group B
/dev/ttyS6 uart 16850 port 0x300 irq 9&nbsp; baud_base 1500000
/dev/ttyS7 uart 16850 port 0x308 irq 9&nbsp; baud_base 1500000
/dev/ttyS8 uart 16850 port 0x310 irq 9&nbsp; baud_base 1500000
/dev/ttyS9 uart 16850 port 0x318 irq 9&nbsp; baud_base 1500000

\# Group C
/dev/ttyS10 uart 16850 port 0x150 irq 9 baud_base 1500000
/dev/ttyS11 uart 16850 port 0x158 irq 9 baud_base 1500000
/dev/ttyS12 uart 16850 port 0x160 irq 9 baud_base 1500000
/dev/ttyS13 uart 16850 port 0x168 irq 9 baud_base 1500000
&nbsp;
\\

mvc-debian4:/proc# cat /proc/interrupts
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU0
&nbsp; 0:&nbsp;&nbsp; 45634199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; timer
&nbsp; 1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; i8042
&nbsp; 2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; cascade
&nbsp; 6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; floppy
&nbsp; 7:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; parport0
&nbsp; 8:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; rtc
&nbsp; 9:&nbsp;&nbsp; 67591801&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; serial
&nbsp;11:&nbsp;&nbsp;&nbsp;&nbsp; 865812&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; eth0
&nbsp;14:&nbsp;&nbsp;&nbsp;&nbsp; 153327&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; ide0
NMI:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
LOC:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
ERR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
MIS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
mvc-debian4:/proc# setserial \-g /dev/ttyS5
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
mvc-debian4:/proc# setserial \-g /dev/ttyS\*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16450, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: 16850, Port: 0x0150, IRQ: 2
/dev/ttyS11, UART: 16850, Port: 0x0158, IRQ: 2
/dev/ttyS2, UART: 16850, Port: 0x0380, IRQ: 2
/dev/ttyS3, UART: 16850, Port: 0x0388, IRQ: 2
/dev/ttyS4, UART: 16850, Port: 0x0390, IRQ: 2
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
/dev/ttyS6, UART: 16850, Port: 0x0300, IRQ: 2
/dev/ttyS7, UART: 16850, Port: 0x0308, IRQ: 2
/dev/ttyS8, UART: 16850, Port: 0x0310, IRQ: 2
/dev/ttyS9, UART: 16850, Port: 0x0318, IRQ: 2
&nbsp;

&nbsp;mvc-debian4:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0150-0157 : serial
0158-015f : serial
01f0-01f7 : ide0
02f8-02ff : serial
0300-0307 : serial
0308-030f : serial
0310-0317 : serial
0318-031f : serial
0378-037a : parport0
037b-037f : parport0
0380-0387 : serial
0388-038f : serial
0390-0397 : serial
0398-039f : serial
03c0-03df : vga\+
03f2-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-03ff : serial
0cf8-0cff : PCI conf1
e000-e03f : 0000:00:11.0
&nbsp; e000-e03f : e100
f000-f00f : 0000:00:12.2
&nbsp; f000-f007 : ide0
&nbsp; f008-f00f : ide1
\\

h4. Useful Debian links

** www.google.com
** [http://www.debianhelp.org]
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\
\\

Notes from ConnectTech Support site for Xtreme104 Isolated 12 port serial card
\\

&nbsp;Configuring the Kernel(2.6.x){color:black}The 2.6 kernel has support for the 8250/16650 UART in <src>/drivers/serial/8250.c. You should be able to run our ISA serial cards(Echo, DFlex, Xtreme/104) with this driver and the proper Kernel configuration.{color}{color:black}You'll need to edit your serial.h file in <src>/include/asm and add in the extra serial ports of the card.{color}{color:black}Here's what I added in red for a 4 port Xtreme/104 card at I/O 300 and IRQ 5. You can do the same with your card settings. If your card is using a higher clock than be sure to adjust your BAUD_BAUD value accordingly{color}

/\* Base baud for CTI boards. Default Max Baud = 115200 bps \*/

define CTI_BAUD (1843200 /16){color:black}define STD_SERIAL_PORT_DFNS \{color}{color}{color:black}&nbsp;/\*{color} UARTCLKPORT{color:black}IRQ FLAGS \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS0 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS1 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS2 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS3 \*/ \{color}{color}
{ 0, CTI_BAUD, 0x300, 5, STD_COM_FLAGS }{color:black}, /\* ttyS4 \*/ \{}{color}
{ 0, CTI_BAUD, 0x308, 5, STD_COM_FLAGS }{color:red}, /\* ttyS5 \*/ \{}{color}
{ 0, CTI_BAUD, 0x310, 5, STD_COM_FLAGS }{color:red}, /\* ttyS6 \*/ \{}{color}
{ 0, CTI_BAUD, 0x318, 5, STD_COM_FLAGS }{color:red}, /\* ttyS7 \*/{color}
If your board has a difference clock, be sure to change the CTI_BAUD value appropriately.
\\
\\
\\
\\

Re-Compiling the Kernel(Linux 2.6)

\*# cd
{Linux}*

At this point, you have a choice of two configuration utilities that you can use to configure your kernel. One utility, named config, is text based, and the other, named menuconfig, has a simple GUI (Graphical User Interface). The menuconfig utility is easier to use than config, so unless you have specific reasons use the menuconfig utility.

To use the menuconfig / config utility:

*\# make menuconfig*
Or
*\# make config* Once the configuration utility you choose is running, make sure that the following options are selected. Below shows the setting that must be enabled using the menuconfig and config utilities.

config: CONFIG_PCI
menuconfig: (Bus Options \-> PCI Support)\\

config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> 8250/16550 and compatible serial support)
 

config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Extended 8250/16550 serial driver options)

config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support more than 4 legacy serial ports)
 

config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support for sharing serial interrupts)

After all of the options have been checked and enabled, select exit. You will be prompted to save the new kernel configuration. Select yes. After you have finished configuring your kernel, issue the two following commands:

*\# make clean*
*\# make bzImage*
*\# make modules*
*\# make modules_install{*}Building/Installing the Kernel
NOTE: These instructions are for Red Hat standard installs. If you use a different distribution, or have set up your own system, these instructions will likely not help you. In that case please contact Connect Tech support at support@connecttech.com

Copy the kernel and system map to the boot partition:

The "make bzImage" step created the kernel in the subdirectory {Linux}
/arch//boot. If you don't know what CPU type you're using, you can find the new kernel by:
\\
# ls \-l
{Linux}/arch/*/boot/bzImage

The < cpu type > is the "*" part of the pathname of the newest kernel.
/arch//boot will be referenced by {arch}.

# cp {Linux}
/
{arch}
/bzImage /boot/vmlinuz-bh
# cp
{Linux}
/System.map /boot/System.map-bh

You may choose any postfix, \-df is a handy one. The postfix merely distinguishes between the kernel you've just built and other kernels already installed. It has no other purpose.
&nbsp;
Creating Nodes (Ports) For the Host Adapter
NOTE: Depending on your kernel distribution and configuration, nodes(ports) are often created automatically and you can skip this step. Check to see if they exist before proceeding.

Now that we have the new kernel in place capable of supporting the Blue Heat serial adapter we must create nodes, or ports, to allow the host adapter to communicate with other devices.

To begin, boot the new kernel. After the kernel has booted, open up the messages file using Vi, or your favorite text editor:
# vi
{log_path}/messages
Where {log_path}
is where the system logs are stored. Typically,
{log_path} = /var/log but this may be different in some distributions/systems.

Go to the bottom of the file and search backwards for references to "ttySxx" where xx is a number. You should see ttyS0 and ttyS1 for the standard serial ports, as well as a ttySxx entrie for each installed Echo/Dflex port. In order to use the new ports, these ttySxx entries must exist in the /dev directory. If they do not exist (they aren't created automatically, but do persist after reboots) you must make them with the following command:

# mknod -m [mode] /dev/ttySxx c 4 yy
[mode] is the file mode (permissions) you wish the device to have. 600 is often good.
xx is the number associated with the device which you have seen in the messages file.
yy is just xx + 64

You may also wish to make the corresponding cuaxx devices, but they are being phased out:

# mknod -m {mode} /dev/cuaxx c 5 yy
xx and yy should match the xx and yy from the previous mknod command

Here is an example of what you would do to add the nodes to your /dev directory:
First I opened the Vi editor and search for ttyS*. The results of the search show me that I have ttyS00 and ttyS01 (the standard serial ports) entries, as well as four other entries: ttyS05, ttyS06, ttyS07 and ttyS08. These four entries correspond to the four new ports for my CTI host adapter. (Right now, we are assuming a four-port card. You may have fewer or more ports, depending on the type of card you have). I've written down the four entries on a sheet of paper, seeing how my memory is a little short. Now I would like to make the nodes. From the command line, I type in the four following entries:

# mknod -m 600 /dev/ttyS05 c 4 69
# mknod -m 600 /dev/ttyS06 c 4 70
# mknod -m 600 /dev/ttyS06 c 4 71
# mknod -m 600 /dev/ttyS07 c 4 72

and optionally execute:

# mknod -m 600 /dev/cua12 c 5 69
# mknod -m 600 /dev/cua13 c 5 70
# mknod -m 600 /dev/cua14 c 5 71
# mknod -m 600 /dev/cua15 c 5 72

With the nodes in place, this finishes off our installation
 
Multiport Support
NOTE: Multiport support is not necessary for your boards to operate properly. This may safely be skipped. It is only a performance tweak available for users with older systems. Newer PCs do not gain much performance from this tweak.

Check {log_path}
/messages again. Each serial port will have a line; all the ports on each board will be listed in sequence. An eight port board might look like:

ttyS4 at port 0x300 (irq = 5) is a ST16654
ttyS5 at port 0x308 (irq = 5) is a ST16654
ttyS6 at port 0x310 (irq = 5) is a ST16654
ttyS7 at port 0x318 (irq = 5) is a ST16654
ttyS8 at port 0x320 (irq = 5) is a ST16654
ttyS9 at port 0x328 (irq = 5) is a ST16654
ttyS10 at port 0x330 (irq = 5) is a ST16654
ttyS11 at port 0x338 (irq = 5) is a ST16654

"port" in the above listing is really short for "port address". To avoid confusion, I will refer to the port address as the "address" instead.

Your board will have a table of the port addresses in the manual that came with it. You will need to look up the address that the board has been configured for; the line will also tell you what address the status port is at.
{mask} is determined by the following table:
Number of ports       {mask}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffsetserial is used to inform the driver about the status port, in the following manner:
\\
# setserial
{port} set_multiport portX {status port address} maskX {mask} matchX 0x0
where {port}
is any one port on a given board (using the first port is usually the best way),
{status port address}
is the address of the status port as determined above,
{mask}
is the appropriate mask value for the board from the table above, and X is a multiport setting number between 1 and 4.

The multiport setting number will usually be 1, but can be other values. There may be other multiport settings on the irq that your board is using, set by other boards in your system, including other Connect Tech boards.
# setserial
{port} get_setserial
where {port}
is a port on a board that you are going to use the status port on, will reveal if there are other multiport settings in effect already. If so, take care to choose X to be the lowest empty setting number.

This needs be done only once per board that you wish to have the status port used on.

Example:
You have two boards installed, an 8 port and a 2 port. The ports on each board are:
ttyS4 at port 0x300 (irq = 5) is a ST16654
.
.
ttyS11 at port 0x338 (irq = 5) is a ST16654
ttyS12 at port 0x200 (irq = 10) is a ST16654
ttyS13 at port 0x208 (irq = 10) is a ST16654

Check to see if any other multiport settings are already in use:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0One multiport setting is already in use by another board.

This works on a per irq basis, so each irq that is used by a board needs to be checked:
# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0No multiport settings are in use.

The commands to enable use of the status port on each board would be:
# setserial /dev/ttyS4 set_multiport port2 0x340 mask2 0xff match2 0x00
# setserial /dev/ttyS12 set_multiport port1 0x240 mask1 0x03 match1 0x00

Check that the settings are in place:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x340, mask=0xff, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x240, mask=0x3, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# man setserial

may be of help also.
&nbsp;
RS-485 Line Modes Support
The utility set485 can be used to set the line mode interactively or from a startup script. Settings stick until changed or the system is rebooted.

The Linux header file ioctls.h now contains definitions for TIOCSER485GET and TIOCSER485SET. These ioctls can be used on Connect Tech 485 capable boards to set the line mode. The mode (passed as an integer) can be one of TIOCSER485FULLDUPLEX, TIOCSER485HALFDUPLEX or TIOCSER485SLAVEMULTIPLEX for full or half duplex or slave multidrop mode, respectively.
&nbsp;
The Linux 2.6 standard serial driver does not have advanced RS485 mode support as of yet. If you require this functionality please contactsupport@connecttech.comfor the latest status of patches available.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5832789</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5865552</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
* [Driver Porting Details]&nbsp;
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to develop termios serial driver and validate 12 port serial card kernel driver.&nbsp;&nbsp;Tune hardware
* Recommend build-up of a test PC104 (Lippert board) + Xtreme104 12 port serial card with harddisk.

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;

\\

h6. Skill Requirements for Tasks:&nbsp;

C++, Linux, Termios, Familiarity with Navigation and Science Sensors and Debian Linux
\\

h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
**** crossbow AHRS compass - Hans requested focus on this driver first (July 2008), however it will likely not be on a deployed vehicle since 3dmgx1 is preferred.
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.&nbsp;&nbsp;
\\
\\
\\
&nbsp;

h4. \\


h3.

Thom's Notes:

Time on AUV was 1999.&nbsp;&nbsp;&nbsp;

Fresh checkout from cvs, build failed.
gcc \-o uplinkQserver uplinkQueuerServer.o&nbsp; /home/auv/prj/auv-linux/onboard//utils/auvUtils.a /home/auv/prj/auv-shared/lib/libAuvShared.a \-L/opt/omniOrb/omniORB-4.1.0/build/lib/ \-L/usr/local/apr/lib \-lgctpc \-lpthread \-llog4cxx \-lnetcdf \-lnewmat&nbsp; \-lapr-1 \-laprutil-1 \-lrt
uplinkQueuerServer.o: In function `main':
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:9: undefined reference to `mbari::Logger::configure(char const*)'
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:17: undefined reference to `MsgQueuerServer::MsgQueuerServer(char const*, long, long, unsigned char, int)'
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:26: undefined reference to `MsgQueuerServer::run()'
collect2: ld returned 1 exit status
make\[1\]: \**\* \[uplinkQserver\] Error 1
make\[1\]: Leaving directory `/home/auv/prj/auv-linux/onboard/tools'
make failed
make: \**\* \[all\] Error 2
\\

The build got far enough to enable teledyne and crossbow builds.&nbsp;&nbsp;&nbsp; Teledyne would not run without creating 'latest' directory in onboard/logs though I seem to remember there was a link involved (talk to Tom O.).]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5832788</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5865551</id>
<property name="body"><![CDATA[*Auv Driver Portnig Links*
* *[AUV Linux - Driver Port and Validation]*
* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
\\
\\

h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
*** July 9:&nbsp; Hans has made the docking vehicle available to finish the porting / validation.&nbsp;&nbsp; The 3dmgx1 is not on the vehicle, but rather the Crossbow DMU
**** The DMU baud rate can be changed per the following procedure:
**** 1. Start with the DMU connected to the serial interface, with your software set to the default baud rate of 38400.
**** 2. Send the ASCII character "b" (0x62 hex) to the DMU. In a terminal program&nbsp;like minicom simply type the letter "b". The DMU is case sensitive. The DMU will respond "B" (0x42 hex).
**** 3. Now change the baud rate of your terminal software.&nbsp;
**** 4. Send the ASCII character "a" (61 hex). The DMU will detect the character and automatically match the baud rate your software is using. Upon successful operation, the DMU will return the character "A" (0x41 hex) at the new baud rate.
**** 5. You can now use the DMU at the new baud rate. The new baud rate setting is not permanent; therefore, this process must be repeated after any power reset.
**** Sanity check the Crossbow\* *Command* *Query DMU Version,* *Character(s) Sent* v, *Response* ASCII string\* &nbsp;*Command* Query DMU Serial Number, *Character(s) Sent S*, *Response* Binary serial number data packet that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.
** Fixed a bug in checkChecksum.&nbsp;&nbsp; The struct overlay on the record was reading testPacket->Checksum as zero.&nbsp;&nbsp; There were two many castings, so rewrote the routine to operate directly on the char record - BUG FIXED.
\\
parosci \-&nbsp; Paroscientific pressure sensor
* devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
* ./parosci \-dev /dev/ttyS4
** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
* Actions:
** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
** Have obtained manual - parosci is unresponsive to serial commands via minicom
** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
*** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
*** No response to \*9900VR
*** No response to \*0100SN
** Write a simple serial program to make sure the correct byte string is sent to parosci.
*** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
** \*0100P3<0x0d><0x0a> responds with \*000116.02
** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>, (ctrl-m, ctrl-j is 0x0d, 0x0a in minicom)
* Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
* With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
** Found a problem
** &nbsp;Protocol Notes:
*** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
* Status (+)
** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
** Fixed bug in baud set
** Fixed bug in read serial number (sscanf and retries)
** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
*** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
sonardyne usbl
* No test executable available
\\
tailcone
* changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
* ./tailcone \-dev /dev/ttyS2
* Cautions:
** Recommend running tailcone tests while observing the tailcone
** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
* Status (/)
** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
Teledyne dvl - Doppler Velocity Log
* changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
* Actions
** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
*** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
*** In progress Reading up on termio and analyzing termio setup...
*** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
*** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
* Status (/)
** In progress...&nbsp;&nbsp;
** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
*** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
*** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
*** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
*** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
*** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
*** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
*** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
*** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
*** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\
h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}
\\
\\
\\
*Status details:*
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* \[9 July 2008\] Crossbow
Table 4. CrossBow AHRS300CA Data Packet Format
| Byte | VG Mode | Scaled Sensor Mode | Voltage Mode |
| 0 | Header (255) | Header (255) | Header (255) |
| 1 | Roll Angle (MSB) | Roll Angular Rate (MSB) | Roll Gyro Voltage (MSB) |
| 2 | Roll Angle (LSB) | Roll Angular Rate (LSB) | Roll Gyro Voltage (LSB) |
| 3 | Pitch Angle (MSB) | Pitch Angular Rate (MSB) | Pitch Gyro Voltage (MSB) |
| 4 | Pitch Angle (LSB) | Pitch Angular Rate (LSB) | Pitch Gyro Voltage (LSB) |
| 5 | Heading Angle (MSB) | Yaw Angular Rate (MSB) | Yaw Gyro Voltage (MSB) |
| 6 | Heading Angle (LSB) | Yaw Angular Rate (LSB) | Yaw Gyro Voltage (LSB) |
| 7 | Roll Angular Rate (MSB) | X-Axis Acceleration (MSB) | X-Axis Accel Voltage (MSB) |
| 8 | Roll Angular Rate (LSB) | X-Axis Acceleration (LSB) | X-Axis Accel Voltage (LSB) |
| 9 | Pitch Angular Rate (MSB) | Y-Axis Acceleration (MSB) | Y-Axis Accel Voltage (MSB) |
| 10 | Pitch Angular Rate (LSB) | Y-Axis Acceleration (LSB) | Y-Axis Accel Voltage (LSB) |
| 11 | Yaw Angular Rate (MSB) | Z-Axis Acceleration (MSB) | Z-Axis Accel Voltage (MSB) |
| 12 | Yaw Angular Rate (LSB) | Z-Axis Acceleration (LSB) | Z-Axis Accel Voltage (LSB) |
| 13 | X-Axis Acceleration (MSB) | X-Axis Magnetic Field (MSB) | X-Axis Mag Voltage (MSB) |
| 14 | X-Axis Acceleration (LSB) | X-Axis Magnetic Field (LSB) | X-Axis Mag Voltage (LSB) |
| 15 | Y-Axis Acceleration (MSB) | Y-Axis Magnetic Field (MSB) | Y-Axis Mag Voltage (MSB) |
| 16 | Y-Axis Acceleration (LSB) | Y-Axis Magnetic Field (LSB) | Y-Axis Mag Voltage (LSB) |
| 17 | Z-Axis Acceleration (MSB) | Z-Axis Magnetic Field (MSB) | Z-Axis Mag Voltage (MSB) |
| 18 | Z-Axis Acceleration (LSB) | Z-Axis Magnetic Field (LSB) | Z-Axis Mag Voltage (LSB) |
| 19 | X-Axis Magnetic Field (MSB) | Temp Sensor Voltage (MSB) | Temp Sensor Voltage (MSB) |
| 20 | X-Axis Magnetic Field (LSB) | Temp Sensor Voltage (LSB) | Temp Sensor Voltage (LSB) |
| 21 | Y-Axis Magnetic Field (MSB) | Time (MSB) | Time (MSB) |
| 22 | Y-Axis Magnetic Field (LSB) | Time (LSB) | Time (LSB) |
| 23 | Z-Axis Magnetic Field (MSB) | Checksum | Checksum |
| 24 | Z-Axis Magnetic Field (LSB) | | |
| 25 | Temp Sensor Voltage (MSB) | | |
| 26 | Temp Sensor Voltage (LSB) | | |
| 27 | Time (MSB) | | |
| 28 | Time (LSB) | | |
| 29 | Checksum | | |
*** \[Bug - build\] Top level build fails, though enough is built to enable&nbsp;driver development
*** \[Bug - blocking\] Fixed bug in 'checkChecksum that was blocking processRecord.&nbsp;&nbsp;&nbsp;Due to&nbsp;unpacked data (code is not compiled to pack on byte boundary, pragma pack(1))&nbsp;struct overly on serial byte stream (testPacket->checksum was zero, yet the proper checksum is in the 'record' byte buf).&nbsp;&nbsp; Changed checkChecksum to operate on byte stream with fixed offset for checksum location.
*** Output looks wrong after fixing checksum problem.&nbsp;&nbsp;&nbsp; Confirmed to be the&nbsp;'pack' problem.&nbsp;&nbsp; Bug fixed by building the data structure from the bytes, rather than overlaying and byte swapping.
*** Here's the output&nbsp;showing raw data stability but bad data (before bug fix).
**** 13:40:00.467 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=047a, HdgA=1d89
13:40:00.469 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 171.58 : P = \-167.32 : Y =&nbsp;&nbsp;&nbsp; 7.19
13:40:01.471 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0472, HdgA=1d86
13:40:01.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 160.33 : P = \-171.54 : Y =&nbsp;&nbsp;&nbsp; 1.57
13:40:02.471 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0475, HdgA=1d94
13:40:02.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp; \-84.22
13:40:03.476 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0475, HdgA=1d94
13:40:03.477 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp;&nbsp;&nbsp; 5.78
13:40:04.479 INFO \[Crossbow\] Hdr=ff, RolA=035d, PitA=0475, HdgA=1d89
13:40:04.481 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-167.32 : Y =&nbsp;&nbsp; \-5.47
13:40:05.483 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0475, HdgA=1d87
13:40:05.485 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-170.13 : Y =&nbsp;&nbsp; 17.03
13:40:06.488 INFO \[Crossbow\] Hdr=ff, RolA=035b, PitA=0476, HdgA=1d86
13:40:06.489 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 165.95 : P = \-171.54 : Y =&nbsp;&nbsp; \-5.47
13:40:07.492 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0477, HdgA=1d93
**** Here's the data after the bug fix.
14:16:37.203 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=0478, HdgA=1d97
14:16:37.204 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
14:16:38.206 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0479, HdgA=1d96
14:16:38.207 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.29 : Y =&nbsp;&nbsp; 41.61
14:16:39.210 INFO \[Crossbow\] Hdr=ff, RolA=0356, PitA=0476, HdgA=1d93
14:16:39.211 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 41.59
14:16:40.214 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0478, HdgA=1d94
14:16:40.215 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.59
14:16:41.218 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=047a, HdgA=1d94
14:16:41.219 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.30 : Y =&nbsp;&nbsp; 41.59
14:16:42.223 INFO \[Crossbow\] Hdr=ff, RolA=0356, PitA=0477, HdgA=1d96
14:16:42.223 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
14:16:43.227 INFO \[Crossbow\] Hdr=ff, RolA=035f, PitA=0474, HdgA=1d96
14:16:43.227 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.74 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 41.61
14:16:44.231 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0473, HdgA=1d96
14:16:44.232 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 41.61
14:16:45.235 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0476, HdgA=1d96
14:16:45.235 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 41.61
14:16:46.239 INFO \[Crossbow\] Hdr=ff, RolA=0360, PitA=0478, HdgA=1d96
14:16:46.240 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.75 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
\\
** \[Bug - minor\] Serial number is read incorrectly.&nbsp;&nbsp; NOT FIXED as it does not block tank test on July 17&nbsp;
*** 12:54:51.390 INFO \[Crossbow\] Serial Number: ff000043
*** 12:54:51.393 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 4278190147 (ff000043)&nbsp; <<-\- 4278190147 looks incorrect.
*** According to the Manual: &nbsp;\* The DMU will respond with a serial number datapacket that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.&nbsp; The serial number bytes should be interpreted as a 32-bit unsigned integer. For example, the serial number 9911750 would be sent as the four bytes 00 97 3D C6.
** \[Bug - minor\] termios set baud failure.&nbsp;&nbsp; Port is operational at 38400, but attempts to set it fail.&nbsp;&nbsp; This will be pushed off until after tank test.
*** 14:56:03.785 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
14:56:03.785 ERROR \[SerialDevice\] cfsetospeed() failed
*** &nbsp;
* \[11 July 2008\] Parosci on docking AUV
** \[Bug - Blocking with workaround\] Bad read of serial number is preventing the driver test from executing.&nbsp;&nbsp;&nbsp; Looks like the Serial number is requested, but the Parosci is busy streaming pressure readings (*000130.13829)
*** 15:05:42.226 DEBUG \[ParosciApp\] Leaving ParosciApp.initialize()
15:05:42.227 INFO \[AuvApplication\] run() - just sleeps by default
15:05:42.341 DEBUG \[Parosci\] writeCommand \*0100SN
*** 15:05:42.358 DEBUG \[Parosci\] Serial Number response: \*000130.13829
15:05:42.358 ERROR \[Parosci\] sscanf ret 0, incorrect serial number format
15:05:42.360 ERROR \[AuvService\] Read incorrect serial number format
*** Went into minicom and got the parosci to stop streaming (actually, just opening minicom showed a series of pressure readings with the last output being the serial number).&nbsp;&nbsp; Maybe a flush in the right place is needed.
** Ran the test again, starting with a 'non-streaming' parosci.
*** 15:15:58.779 INFO \[Parosci\] Paroscientific configured.
15:15:58.850 DEBUG \[StreamSerialDriver\] run() - start main loop
15:15:58.851 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:15:58.985 DEBUG \[Parosci\] reply with value is 30.13823^M
15:15:58.986 INFO \[Parosci\] depth is: 1146999941
*** Changed format character for depth from int to float
*** 15:50:02.429 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.430 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.431 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.434 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:02.610 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.611 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.611 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.614 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:02.790 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.790 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.791 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.794 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:02.969 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.970 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.971 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.974 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:03.153 DEBUG \[Parosci\] reply with value is 30.13807
15:50:03.155 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:03.155 DEBUG \[Parosci\] 1 bytes buffered now
15:50:03.158 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:03.244 DEBUG \[Parosci\] getting temp period
15:50:03.356 DEBUG \[Parosci\] writeCommand \*0100Q1
*** 15:50:03.484 DEBUG \[Parosci\] writeCommand \*0100Q1
*** 15:50:03.593 DEBUG \[Parosci\] reply with value is 5.840225
15:50:03.704 DEBUG \[Parosci\] writeCommand \*0100P2
*** 15:50:03.719 INFO \[Parosci\] tempPeriod is: \-247390116
15:50:03.720 DEBUG \[Parosci\] 0 bytes buffered now
15:50:03.723 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:03.925 DEBUG \[Parosci\] reply with value is 30.13809
15:50:03.926 INFO \[Parosci\] depth is:&nbsp; \-0.1744
15:50:03.927 DEBUG \[Parosci\] 1 bytes buffered now
15:50:03.930 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:04.105 DEBUG \[Parosci\] reply with value is 30.13807
15:50:04.107 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:04.107 DEBUG \[Parosci\] 1 bytes buffered now
15:50:04.110 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:04.285 DEBUG \[Parosci\] reply with value is 30.13809
15:50:04.286 INFO \[Parosci\] depth is:&nbsp; \-0.1744
15:50:04.287 DEBUG \[Parosci\] 1 bytes buffered now
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D* \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00

E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080

007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF468

19F04C10088000000000000000000000000010A0031004400008000800080008000800080008000800

08000800080008000800080008000800080008000800080008000800080008000800080008000800080

00800080008000800080008000800080008000800080008000800080008000800080008000800080008

00080008000800080008000800080008000800080008000800080008000800080008000800080008000

80008000800080008000800080008000800080008000800080008000800080008000800080008000800

080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C06

0E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090

306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F45393

5362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B

2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B

2625272B2625272B2625282B2625282B00046400000000006400000064000000640000006400000064

00000064000000640000006400000064000000640000006400000064000000640000006400000064000

00064000000640000006400000064000000640000006400000064000000640000006400000601000000

DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A

0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

CrossBow Output

auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
14:56:03.622 DEBUG \[CorbaUtils\] get ORB:
14:56:03.642 DEBUG \[CorbaUtils\] get POA:
14:56:03.664 DEBUG \[CorbaUtils\] Looking for event channel "EventChannel" in name service:

14:56:03.669 DEBUG \[CorbaUtils\] Found event channel "EventChannel"

14:56:03.675 DEBUG \[CorbaUtils\] Create provider servant

14:56:03.693 DEBUG \[CorbaUtils\] Create consumer servant

14:56:03.701 DEBUG \[parseComplex\] isIdentifier \-\- I've been asked to test the word crossbowPeriod
14:56:03.701 DEBUG \[parseComplex\] isIdentifier \-\- I've been asked to test the word 100
14:56:03.702 DEBUG \[parseComplex\] Parsing attribute crossbowPeriod = 100
14:56:03.703 DEBUG \[parseComplex\] No current item .. using the provided attributes CrossbowConstants
14:56:03.704 DEBUG \[Attributes\] Attributes::parse() - size=3

14:56:03.705 DEBUG \[Attributes\] Attributes::parse() - compare attribute name crossbowPeriod to input name crossbowPeriod

14:56:03.706 DEBUG \[Attributes\] Attributes::parse() \-\- Found value for crossbowPeriod
14:56:03.706 DEBUG \[Attributes\] Attributes::parse() \-\- crossbowPeriod is set
14:56:03.708 DEBUG \[Attributes\] Attribute crossbowPeriod is hasDefault = true, isSet = true
14:56:03.708 DEBUG \[Attributes\] Attribute debug is hasDefault = true, isSet = false
14:56:03.709 DEBUG \[Attributes\] Attribute dumpHex is hasDefault = true, isSet = false
14:56:03.710 DEBUG \[Attributes\] Attributes::verify() \-\- Attribute set CrossbowConstants is done
14:56:03.730 DEBUG \[CrossbowApp\] Launch instrument driver thread
IOR:010000001300000049444c3a6175762f4168727349463a312e300000010000000000000064000000010102000d0000003133342e38392e33322e31360000750e0e000000fef3d6774800001553000000000200000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
14:56:03.734 DEBUG \[CorbaUtils\] Ahrs already active...
14:56:03.737 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for Ahrs
14:56:03.746 DEBUG \[CorbaUtils\] context already bound
14:56:03.749 DEBUG \[CorbaUtils\] call bind() for Ahrs
14:56:03.759 DEBUG \[CorbaUtils\] call rebind() for Ahrs
14:56:03.763 DEBUG \[CorbaUtils\] invoke prepareToRun()

14:56:03.764 DEBUG \[CorbaUtils\] Activate POA manager
14:56:03.765 DEBUG \[CorbaUtils\] Run the ORB in a new thread
14:56:03.766 DEBUG \[CorbaUtils\] return from registerService()

14:56:03.767 DEBUG \[CrossbowApp\] Leaving CrossbowApp.initialize()
14:56:03.781 INFO \[AuvApplication\] run() - just sleeps by default
14:56:03.768 DEBUG \[Crossbow\] Crossbow::initialize : Initializing Crossbow driver
14:56:03.785 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
14:56:03.785 ERROR \[SerialDevice\] cfsetospeed() failed
14:56:03.786 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.789 DEBUG \[Crossbow\] Crossbow::initialize :&nbsp;&nbsp;&nbsp;&nbsp; ...done\!
14:56:03.789 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.790 DEBUG \[Crossbow\] Crossbow.cc: In getSerialNumber()
AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec14:56:03.816 INFO \[Crossbow\] Crossbow.cc: device->read succeeded
14:56:03.818 INFO \[Crossbow\] Crossbow.cc: The serial number is 4278190147 (ff000043)
14:56:03.821 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.860 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.16
14:56:04.852 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.13
14:56:05.856 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.12
14:56:06.860 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.11
14:56:07.864 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.73 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.12
14:56:08.868 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.25 : Y =&nbsp;&nbsp; 43.21
14:56:09.872 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.19
14:56:10.876 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.13
14:56:11.880 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.29 : Y =&nbsp;&nbsp; 43.11
14:56:12.884 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.11
14:56:13.888 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.10
14:56:14.893 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.23
14:56:15.896 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.17
&nbsp;

\\
&nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5832787</id>
</property>
</object>
<object class="Labelling" package="com.atlassian.confluence.labels">
<id name="id">13828101</id>
<property name="label" class="Label" package="com.atlassian.confluence.labels"><id name="id">13795329</id>
</property>
<property name="content" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">750</id>
</property>
<property name="spaceKey"><![CDATA[AUV]]></property>
<property name="user"><![CDATA[bgarau]]></property>
<property name="creationDate">2010-06-14 22:01:04.193</property>
<property name="lastModificationDate">2010-06-14 22:01:04.193</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5865550</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.
\\

Xtreme104 Serial Setup
\\

serial.conf looks like

mvc-debian4:/proc# cat /etc/serial.conf
/dev/ttyS1 uart 16450 port 0x2F8 irq 3

\#Xtreme card
\# Group A
/dev/ttyS2 uart 16850 port 0x380 irq 9&nbsp; baud_base 1500000
/dev/ttyS3 uart 16850 port 0x388 irq 9&nbsp; baud_base 1500000
/dev/ttyS4 uart 16850 port 0x390 irq 9&nbsp; baud_base 1500000
/dev/ttyS5 uart 16850 port 0x398 irq 9&nbsp; baud_base 1500000

\# Group B
/dev/ttyS6 uart 16850 port 0x300 irq 9&nbsp; baud_base 1500000
/dev/ttyS7 uart 16850 port 0x308 irq 9&nbsp; baud_base 1500000
/dev/ttyS8 uart 16850 port 0x310 irq 9&nbsp; baud_base 1500000
/dev/ttyS9 uart 16850 port 0x318 irq 9&nbsp; baud_base 1500000

\# Group C
/dev/ttyS10 uart 16850 port 0x150 irq 9 baud_base 1500000
/dev/ttyS11 uart 16850 port 0x158 irq 9 baud_base 1500000
/dev/ttyS12 uart 16850 port 0x160 irq 9 baud_base 1500000
/dev/ttyS13 uart 16850 port 0x168 irq 9 baud_base 1500000
&nbsp;
\\

mvc-debian4:/proc# cat /proc/interrupts
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU0
&nbsp; 0:&nbsp;&nbsp; 45634199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; timer
&nbsp; 1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; i8042
&nbsp; 2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; cascade
&nbsp; 6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; floppy
&nbsp; 7:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; parport0
&nbsp; 8:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; rtc
&nbsp; 9:&nbsp;&nbsp; 67591801&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; serial
&nbsp;11:&nbsp;&nbsp;&nbsp;&nbsp; 865812&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; eth0
&nbsp;14:&nbsp;&nbsp;&nbsp;&nbsp; 153327&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; ide0
NMI:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
LOC:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
ERR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
MIS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
mvc-debian4:/proc# setserial \-g /dev/ttyS5
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
mvc-debian4:/proc# setserial \-g /dev/ttyS\*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16450, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: 16850, Port: 0x0150, IRQ: 2
/dev/ttyS11, UART: 16850, Port: 0x0158, IRQ: 2
/dev/ttyS2, UART: 16850, Port: 0x0380, IRQ: 2
/dev/ttyS3, UART: 16850, Port: 0x0388, IRQ: 2
/dev/ttyS4, UART: 16850, Port: 0x0390, IRQ: 2
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
/dev/ttyS6, UART: 16850, Port: 0x0300, IRQ: 2
/dev/ttyS7, UART: 16850, Port: 0x0308, IRQ: 2
/dev/ttyS8, UART: 16850, Port: 0x0310, IRQ: 2
/dev/ttyS9, UART: 16850, Port: 0x0318, IRQ: 2
&nbsp;

&nbsp;mvc-debian4:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0150-0157 : serial
0158-015f : serial
01f0-01f7 : ide0
02f8-02ff : serial
0300-0307 : serial
0308-030f : serial
0310-0317 : serial
0318-031f : serial
0378-037a : parport0
037b-037f : parport0
0380-0387 : serial
0388-038f : serial
0390-0397 : serial
0398-039f : serial
03c0-03df : vga\+
03f2-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-03ff : serial
0cf8-0cff : PCI conf1
e000-e03f : 0000:00:11.0
&nbsp; e000-e03f : e100
f000-f00f : 0000:00:12.2
&nbsp; f000-f007 : ide0
&nbsp; f008-f00f : ide1
\\

h4. Useful Debian links

** www.google.com
** [http://www.debianhelp.org]
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\
\\

Notes from ConnectTech Support site for Xtreme104 Isolated 12 port serial card
\\

&nbsp;Configuring the Kernel(2.6.x){color:black}The 2.6 kernel has support for the 8250/16650 UART in <src>/drivers/serial/8250.c. You should be able to run our ISA serial cards(Echo, DFlex, Xtreme/104) with this driver and the proper Kernel configuration.{color}{color:black}You'll need to edit your serial.h file in <src>/include/asm and add in the extra serial ports of the card.{color}{color:black}Here's what I added in red for a 4 port Xtreme/104 card at I/O 300 and IRQ 5. You can do the same with your card settings. If your card is using a higher clock than be sure to adjust your BAUD_BAUD value accordingly{color}

/\* Base baud for CTI boards. Default Max Baud = 115200 bps \*/

define CTI_BAUD (1843200 /16){color:black}define STD_SERIAL_PORT_DFNS \{color}{color}{color:black}&nbsp;/\*{color} UARTCLKPORT{color:black}IRQ FLAGS \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS0 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS1 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS2 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS3 \*/ \{color}{color}
{ 0, CTI_BAUD, 0x300, 5, STD_COM_FLAGS }{color:black}, /\* ttyS4 \*/ \{}{color}
{ 0, CTI_BAUD, 0x308, 5, STD_COM_FLAGS }{color:red}, /\* ttyS5 \*/ \{}{color}
{ 0, CTI_BAUD, 0x310, 5, STD_COM_FLAGS }{color:red}, /\* ttyS6 \*/ \{}{color}
{ 0, CTI_BAUD, 0x318, 5, STD_COM_FLAGS }{color:red}, /\* ttyS7 \*/{color}
If your board has a difference clock, be sure to change the CTI_BAUD value appropriately.
\\
\\
\\

Re-Compiling the Kernel(Linux 2.6)

\*# cd
{Linux}*

At this point, you have a choice of two configuration utilities that you can use to configure your kernel. One utility, named config, is text based, and the other, named menuconfig, has a simple GUI (Graphical User Interface). The menuconfig utility is easier to use than config, so unless you have specific reasons use the menuconfig utility.

To use the menuconfig / config utility:

*\# make menuconfig*
Or
*\# make config* Once the configuration utility you choose is running, make sure that the following options are selected. Below shows the setting that must be enabled using the menuconfig and config utilities.

config: CONFIG_PCI
menuconfig: (Bus Options \-> PCI Support)\\

config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> 8250/16550 and compatible serial support)
 

config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Extended 8250/16550 serial driver options)

config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support more than 4 legacy serial ports)
 

config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support for sharing serial interrupts)

After all of the options have been checked and enabled, select exit. You will be prompted to save the new kernel configuration. Select yes. After you have finished configuring your kernel, issue the two following commands:

*\# make clean*
*\# make bzImage*
*\# make modules*
*\# make modules_install{*}Building/Installing the Kernel
NOTE: These instructions are for Red Hat standard installs. If you use a different distribution, or have set up your own system, these instructions will likely not help you. In that case please contact Connect Tech support at support@connecttech.com

Copy the kernel and system map to the boot partition:

The "make bzImage" step created the kernel in the subdirectory {Linux}
/arch//boot. If you don't know what CPU type you're using, you can find the new kernel by:
\\
# ls \-l
{Linux}/arch/*/boot/bzImage

The < cpu type > is the "*" part of the pathname of the newest kernel.
/arch//boot will be referenced by {arch}.

# cp {Linux}
/
{arch}
/bzImage /boot/vmlinuz-bh
# cp
{Linux}
/System.map /boot/System.map-bh

You may choose any postfix, \-df is a handy one. The postfix merely distinguishes between the kernel you've just built and other kernels already installed. It has no other purpose.
&nbsp;
Creating Nodes (Ports) For the Host Adapter
NOTE: Depending on your kernel distribution and configuration, nodes(ports) are often created automatically and you can skip this step. Check to see if they exist before proceeding.

Now that we have the new kernel in place capable of supporting the Blue Heat serial adapter we must create nodes, or ports, to allow the host adapter to communicate with other devices.

To begin, boot the new kernel. After the kernel has booted, open up the messages file using Vi, or your favorite text editor:
# vi
{log_path}/messages
Where {log_path}
is where the system logs are stored. Typically,
{log_path} = /var/log but this may be different in some distributions/systems.

Go to the bottom of the file and search backwards for references to "ttySxx" where xx is a number. You should see ttyS0 and ttyS1 for the standard serial ports, as well as a ttySxx entrie for each installed Echo/Dflex port. In order to use the new ports, these ttySxx entries must exist in the /dev directory. If they do not exist (they aren't created automatically, but do persist after reboots) you must make them with the following command:

# mknod -m [mode] /dev/ttySxx c 4 yy
[mode] is the file mode (permissions) you wish the device to have. 600 is often good.
xx is the number associated with the device which you have seen in the messages file.
yy is just xx + 64

You may also wish to make the corresponding cuaxx devices, but they are being phased out:

# mknod -m {mode} /dev/cuaxx c 5 yy
xx and yy should match the xx and yy from the previous mknod command

Here is an example of what you would do to add the nodes to your /dev directory:
First I opened the Vi editor and search for ttyS*. The results of the search show me that I have ttyS00 and ttyS01 (the standard serial ports) entries, as well as four other entries: ttyS05, ttyS06, ttyS07 and ttyS08. These four entries correspond to the four new ports for my CTI host adapter. (Right now, we are assuming a four-port card. You may have fewer or more ports, depending on the type of card you have). I've written down the four entries on a sheet of paper, seeing how my memory is a little short. Now I would like to make the nodes. From the command line, I type in the four following entries:

# mknod -m 600 /dev/ttyS05 c 4 69
# mknod -m 600 /dev/ttyS06 c 4 70
# mknod -m 600 /dev/ttyS06 c 4 71
# mknod -m 600 /dev/ttyS07 c 4 72

and optionally execute:

# mknod -m 600 /dev/cua12 c 5 69
# mknod -m 600 /dev/cua13 c 5 70
# mknod -m 600 /dev/cua14 c 5 71
# mknod -m 600 /dev/cua15 c 5 72

With the nodes in place, this finishes off our installation
 
Multiport Support
NOTE: Multiport support is not necessary for your boards to operate properly. This may safely be skipped. It is only a performance tweak available for users with older systems. Newer PCs do not gain much performance from this tweak.

Check {log_path}
/messages again. Each serial port will have a line; all the ports on each board will be listed in sequence. An eight port board might look like:

ttyS4 at port 0x300 (irq = 5) is a ST16654
ttyS5 at port 0x308 (irq = 5) is a ST16654
ttyS6 at port 0x310 (irq = 5) is a ST16654
ttyS7 at port 0x318 (irq = 5) is a ST16654
ttyS8 at port 0x320 (irq = 5) is a ST16654
ttyS9 at port 0x328 (irq = 5) is a ST16654
ttyS10 at port 0x330 (irq = 5) is a ST16654
ttyS11 at port 0x338 (irq = 5) is a ST16654

"port" in the above listing is really short for "port address". To avoid confusion, I will refer to the port address as the "address" instead.

Your board will have a table of the port addresses in the manual that came with it. You will need to look up the address that the board has been configured for; the line will also tell you what address the status port is at.
{mask} is determined by the following table:
Number of ports       {mask}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffsetserial is used to inform the driver about the status port, in the following manner:
\\
# setserial
{port} set_multiport portX {status port address} maskX {mask} matchX 0x0
where {port}
is any one port on a given board (using the first port is usually the best way),
{status port address}
is the address of the status port as determined above,
{mask}
is the appropriate mask value for the board from the table above, and X is a multiport setting number between 1 and 4.

The multiport setting number will usually be 1, but can be other values. There may be other multiport settings on the irq that your board is using, set by other boards in your system, including other Connect Tech boards.
# setserial
{port} get_setserial
where {port}
is a port on a board that you are going to use the status port on, will reveal if there are other multiport settings in effect already. If so, take care to choose X to be the lowest empty setting number.

This needs be done only once per board that you wish to have the status port used on.

Example:
You have two boards installed, an 8 port and a 2 port. The ports on each board are:
ttyS4 at port 0x300 (irq = 5) is a ST16654
.
.
ttyS11 at port 0x338 (irq = 5) is a ST16654
ttyS12 at port 0x200 (irq = 10) is a ST16654
ttyS13 at port 0x208 (irq = 10) is a ST16654

Check to see if any other multiport settings are already in use:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0One multiport setting is already in use by another board.

This works on a per irq basis, so each irq that is used by a board needs to be checked:
# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0No multiport settings are in use.

The commands to enable use of the status port on each board would be:
# setserial /dev/ttyS4 set_multiport port2 0x340 mask2 0xff match2 0x00
# setserial /dev/ttyS12 set_multiport port1 0x240 mask1 0x03 match1 0x00

Check that the settings are in place:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x340, mask=0xff, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x240, mask=0x3, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# man setserial

may be of help also.
&nbsp;
RS-485 Line Modes Support
The utility set485 can be used to set the line mode interactively or from a startup script. Settings stick until changed or the system is rebooted.

The Linux header file ioctls.h now contains definitions for TIOCSER485GET and TIOCSER485SET. These ioctls can be used on Connect Tech 485 capable boards to set the line mode. The mode (passed as an integer) can be one of TIOCSER485FULLDUPLEX, TIOCSER485HALFDUPLEX or TIOCSER485SLAVEMULTIPLEX for full or half duplex or slave multidrop mode, respectively.
&nbsp;
The Linux 2.6 standard serial driver does not have advanced RS485 mode support as of yet. If you require this functionality please contactsupport@connecttech.comfor the latest status of patches available.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5832786</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">15663144</id>
<property name="body"><![CDATA[{section}
{column:width=75%}
[Lessons Learned from June 29th-30th Drifter following Experiment|AUV:Lessons Learned Drifter Following Expt June'10]
{column}
{column:width=25%}
{panel:title=Developer Resources}
# Client Frameworks
## Comparisons
## [Java Posse Rundown|http://javaposse.com/java_posse_320_roundup_10_rich_client_vs_web]
## Google Web Toolkit
### [GWT and HTML5 - Google I/O|http://www.java-tv.com/2010/08/11/gwt-html5-can-do-what/]
## Messaging Frameworks (think events)
### [Lightweight AMQP|http://soa.dzone.com/articles/lightweight-alternative]
# Security
## [Securing GWT Clients|http://java.dzone.com/articles/securing-gwt-client-acris]
# Testing
## [GWT Testing Best Practices|http://www.softdevtube.com/2010/08/09/gwt-testing-best-practices/]
## [Testing Web Clients (Selenium)|http://weblogs.java.net/blog/johnsmart/archive/2010/08/09/selenium-2web-driver-land-where-page-objects-are-king]
{panel}
{column}
{section}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">15630379</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5865555</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux and auv-pkgs Install, build]*
* *[Termios Dev Info]*
* [Driver Porting Details]&nbsp;
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to develop termios serial driver and validate 12 port serial card kernel driver.&nbsp;&nbsp;Tune hardware
* Recommend build-up of a test PC104 (Lippert board) + Xtreme104 12 port serial card with harddisk.

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;

\\

h6. Skill Requirements for Tasks:&nbsp;

C++, Linux, Termios, Familiarity with Navigation and Science Sensors and Debian Linux
\\

h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux and auv-pkgs Install, build]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
**** crossbow AHRS compass - Hans requested focus on this driver first (July 2008), however it will likely not be on a deployed vehicle since 3dmgx1 is preferred.
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.&nbsp;&nbsp;
\\
\\
\\
&nbsp;

h4. \\


h3.

Thom's Notes:

Time on AUV was 1999.&nbsp;&nbsp;&nbsp;

Fresh checkout from cvs, build failed.
gcc \-o uplinkQserver uplinkQueuerServer.o&nbsp; /home/auv/prj/auv-linux/onboard//utils/auvUtils.a /home/auv/prj/auv-shared/lib/libAuvShared.a \-L/opt/omniOrb/omniORB-4.1.0/build/lib/ \-L/usr/local/apr/lib \-lgctpc \-lpthread \-llog4cxx \-lnetcdf \-lnewmat&nbsp; \-lapr-1 \-laprutil-1 \-lrt
uplinkQueuerServer.o: In function `main':
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:9: undefined reference to `mbari::Logger::configure(char const*)'
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:17: undefined reference to `MsgQueuerServer::MsgQueuerServer(char const*, long, long, unsigned char, int)'
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:26: undefined reference to `MsgQueuerServer::run()'
collect2: ld returned 1 exit status
make\[1\]: \**\* \[uplinkQserver\] Error 1
make\[1\]: Leaving directory `/home/auv/prj/auv-linux/onboard/tools'
make failed
make: \**\* \[all\] Error 2
\\

The build got far enough to enable teledyne and crossbow builds.&nbsp;&nbsp;&nbsp; Teledyne would not run without creating 'latest' directory in onboard/logs though I seem to remember there was a link involved (talk to Tom O.).]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5832791</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5865556</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux and auv-pkgs Install, build]*
* *[Termios Dev Info]*
* *[Driver Porting Details]*
* *[Running and Testing AUV Linux]
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to develop termios serial driver and validate 12 port serial card kernel driver.&nbsp;&nbsp;Tune hardware
* Recommend build-up of a test PC104 (Lippert board) + Xtreme104 12 port serial card with harddisk.

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;

\\

h6. Skill Requirements for Tasks:&nbsp;

C++, Linux, Termios, Familiarity with Navigation and Science Sensors and Debian Linux
\\

h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux and auv-pkgs Install, build]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
**** crossbow AHRS compass - Hans requested focus on this driver first (July 2008), however it will likely not be on a deployed vehicle since 3dmgx1 is preferred.
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.&nbsp;&nbsp;
\\
\\
\\
&nbsp;

h4. \\


h3.

Thom's Notes:

Time on AUV was 1999.&nbsp;&nbsp;&nbsp;

Fresh checkout from cvs, build failed.
gcc \-o uplinkQserver uplinkQueuerServer.o&nbsp; /home/auv/prj/auv-linux/onboard//utils/auvUtils.a /home/auv/prj/auv-shared/lib/libAuvShared.a \-L/opt/omniOrb/omniORB-4.1.0/build/lib/ \-L/usr/local/apr/lib \-lgctpc \-lpthread \-llog4cxx \-lnetcdf \-lnewmat&nbsp; \-lapr-1 \-laprutil-1 \-lrt
uplinkQueuerServer.o: In function `main':
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:9: undefined reference to `mbari::Logger::configure(char const*)'
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:17: undefined reference to `MsgQueuerServer::MsgQueuerServer(char const*, long, long, unsigned char, int)'
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:26: undefined reference to `MsgQueuerServer::run()'
collect2: ld returned 1 exit status
make\[1\]: \**\* \[uplinkQserver\] Error 1
make\[1\]: Leaving directory `/home/auv/prj/auv-linux/onboard/tools'
make failed
make: \**\* \[all\] Error 2
\\

The build got far enough to enable teledyne and crossbow builds.&nbsp;&nbsp;&nbsp; Teledyne would not run without creating 'latest' directory in onboard/logs though I seem to remember there was a link involved (talk to Tom O.).]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5832792</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9404640</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet

h2. Plan 
{anchor:top}
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX 
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation 

h2. Directory structure
{anchor:dir}

For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
* PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h2. Initializing TREX environment variables
{anchor:env}

The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of 
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
The compilation of TREX core libraries is done similarly
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc 
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal. 
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX
{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
  ** amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
  ** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
  ** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
  ** amc.play.cfg: used to replay a mission for debugging purpose.
  ** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* *.solver.cfg: Europa configuration to tweak the plan solver for the given reactor. 
* *.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings *.exec.nddl *.skipper.nddl *.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_  on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
 Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the *processes.cfg to see if it starts correct processes including statePublisher

h2. Starting a mission
{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.

{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* -v for being verbose
* -sim when in simulation (ie no HW in the loop)
{info} 

{code:none|title=On Linux}
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* -proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* -fastsim indicates to vcsServer that it will run into linux fast simulation  
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info} 

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] [<nstep>]
{code}

{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}

{info:title=flags information}
* -fast indicates that the clock used would connect to auv-linux fast simulation clock
* -sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on -fast or -sim mode. 
{info} 

You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log

{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log 
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
> 
{code}

You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/! are used to manipulate how much data you want  on the Debug.log starting from now. 
{info:title=note about sim}
  One can note that, as opposed to amc, sim does not have the flag -fast. It is due to the fact that by default sim uses the fast clock. 
  You can change it by adding the flag -sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}



]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9371891</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9404642</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
* PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
The compilation of TREX core libraries is done similarly
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher

h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] [<nstep>]
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Not that if you do not spcify <nstep> in this case TREX will try to go as fast as linux go. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9371893</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9404650</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
* PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
The compilation of TREX core libraries is done similarly
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher

h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] [<nstep>]
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9371901</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5865478</id>
<property name="body"><![CDATA[*Auv Driver Portnig Links*
* *[AUV Linux - Driver Port and Validation]*
* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
\\
\\

h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
*** July 9:&nbsp; Hans has made the docking vehicle available to finish the porting / validation.&nbsp;&nbsp; The 3dmgx1 is not on the vehicle, but rather the Crossbow DMU
**** The DMU baud rate can be changed per the following procedure:
**** 1. Start with the DMU connected to the serial interface, with your software set to the default baud rate of 38400.
**** 2. Send the ASCII character "b" (0x62 hex) to the DMU. In a terminal program&nbsp;like minicom simply type the letter "b". The DMU is case sensitive. The DMU will respond "B" (0x42 hex).
**** 3. Now change the baud rate of your terminal software.&nbsp;
**** 4. Send the ASCII character "a" (61 hex). The DMU will detect the character and automatically match the baud rate your software is using. Upon successful operation, the DMU will return the character "A" (0x41 hex) at the new baud rate.
**** 5. You can now use the DMU at the new baud rate. The new baud rate setting is not permanent; therefore, this process must be repeated after any power reset.
**** Sanity check the Crossbow\* *Command* *Query DMU Version,* *Character(s) Sent* v, *Response* ASCII string\* &nbsp;*Command* Query DMU Serial Number, *Character(s) Sent S*, *Response* Binary serial number data packet that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.
** Fixed a bug in checkChecksum.&nbsp;&nbsp; The struct overlay on the record was reading testPacket->Checksum as zero.&nbsp;&nbsp; There were two many castings, so rewrote the routine to operate directly on the char record - BUG FIXED.
\\
parosci \-&nbsp; Paroscientific pressure sensor
* devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
* ./parosci \-dev /dev/ttyS4
** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
* Actions:
** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
** Have obtained manual - parosci is unresponsive to serial commands via minicom
** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
*** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
*** No response to \*9900VR
*** No response to \*0100SN
** Write a simple serial program to make sure the correct byte string is sent to parosci.
*** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
** \*0100P3<0x0d><0x0a> responds with \*000116.02
** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
* Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
* With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
** &nbsp;Protocol Notes:
*** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
* Status (+)
** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
** Fixed bug in baud set
** Fixed bug in read serial number (sscanf and retries)
** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
*** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
sonardyne usbl
* No test executable available
\\
tailcone
* changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
* ./tailcone \-dev /dev/ttyS2
* Cautions:
** Recommend running tailcone tests while observing the tailcone
** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
* Status (/)
** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
Teledyne dvl - Doppler Velocity Log
* changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
* Actions
** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
*** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
*** In progress Reading up on termio and analyzing termio setup...
*** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
*** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
* Status (/)
** In progress...&nbsp;&nbsp;
** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
*** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
*** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
*** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
*** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
*** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
*** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
*** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
*** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
*** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\
h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}
\\
\\
\\
*Status details:*
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* \[9 July 2008\] Crossbow
Table 4. CrossBow AHRS300CA Data Packet Format
| Byte | VG Mode | Scaled Sensor Mode | Voltage Mode |
| 0 | Header (255) | Header (255) | Header (255) |
| 1 | Roll Angle (MSB) | Roll Angular Rate (MSB) | Roll Gyro Voltage (MSB) |
| 2 | Roll Angle (LSB) | Roll Angular Rate (LSB) | Roll Gyro Voltage (LSB) |
| 3 | Pitch Angle (MSB) | Pitch Angular Rate (MSB) | Pitch Gyro Voltage (MSB) |
| 4 | Pitch Angle (LSB) | Pitch Angular Rate (LSB) | Pitch Gyro Voltage (LSB) |
| 5 | Heading Angle (MSB) | Yaw Angular Rate (MSB) | Yaw Gyro Voltage (MSB) |
| 6 | Heading Angle (LSB) | Yaw Angular Rate (LSB) | Yaw Gyro Voltage (LSB) |
| 7 | Roll Angular Rate (MSB) | X-Axis Acceleration (MSB) | X-Axis Accel Voltage (MSB) |
| 8 | Roll Angular Rate (LSB) | X-Axis Acceleration (LSB) | X-Axis Accel Voltage (LSB) |
| 9 | Pitch Angular Rate (MSB) | Y-Axis Acceleration (MSB) | Y-Axis Accel Voltage (MSB) |
| 10 | Pitch Angular Rate (LSB) | Y-Axis Acceleration (LSB) | Y-Axis Accel Voltage (LSB) |
| 11 | Yaw Angular Rate (MSB) | Z-Axis Acceleration (MSB) | Z-Axis Accel Voltage (MSB) |
| 12 | Yaw Angular Rate (LSB) | Z-Axis Acceleration (LSB) | Z-Axis Accel Voltage (LSB) |
| 13 | X-Axis Acceleration (MSB) | X-Axis Magnetic Field (MSB) | X-Axis Mag Voltage (MSB) |
| 14 | X-Axis Acceleration (LSB) | X-Axis Magnetic Field (LSB) | X-Axis Mag Voltage (LSB) |
| 15 | Y-Axis Acceleration (MSB) | Y-Axis Magnetic Field (MSB) | Y-Axis Mag Voltage (MSB) |
| 16 | Y-Axis Acceleration (LSB) | Y-Axis Magnetic Field (LSB) | Y-Axis Mag Voltage (LSB) |
| 17 | Z-Axis Acceleration (MSB) | Z-Axis Magnetic Field (MSB) | Z-Axis Mag Voltage (MSB) |
| 18 | Z-Axis Acceleration (LSB) | Z-Axis Magnetic Field (LSB) | Z-Axis Mag Voltage (LSB) |
| 19 | X-Axis Magnetic Field (MSB) | Temp Sensor Voltage (MSB) | Temp Sensor Voltage (MSB) |
| 20 | X-Axis Magnetic Field (LSB) | Temp Sensor Voltage (LSB) | Temp Sensor Voltage (LSB) |
| 21 | Y-Axis Magnetic Field (MSB) | Time (MSB) | Time (MSB) |
| 22 | Y-Axis Magnetic Field (LSB) | Time (LSB) | Time (LSB) |
| 23 | Z-Axis Magnetic Field (MSB) | Checksum | Checksum |
| 24 | Z-Axis Magnetic Field (LSB) | | |
| 25 | Temp Sensor Voltage (MSB) | | |
| 26 | Temp Sensor Voltage (LSB) | | |
| 27 | Time (MSB) | | |
| 28 | Time (LSB) | | |
| 29 | Checksum | | |
*** \[Bug - build\] Top level build fails, though enough is built to enable&nbsp;driver development
*** \[Bug - blocking\] Fixed bug in 'checkChecksum that was blocking processRecord.&nbsp;&nbsp;&nbsp;Due to&nbsp;unpacked data (code is not compiled to pack on byte boundary, pragma pack(1))&nbsp;struct overly on serial byte stream (testPacket->checksum was zero, yet the proper checksum is in the 'record' byte buf).&nbsp;&nbsp; Changed checkChecksum to operate on byte stream with fixed offset for checksum location.
*** Output looks wrong after fixing checksum problem.&nbsp;&nbsp;&nbsp; Confirmed to be the&nbsp;'pack' problem.&nbsp;&nbsp; Bug fixed by building the data structure from the bytes, rather than overlaying and byte swapping.
*** Here's the output&nbsp;showing raw data stability but bad data (before bug fix).
**** 13:40:00.467 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=047a, HdgA=1d89
13:40:00.469 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 171.58 : P = \-167.32 : Y =&nbsp;&nbsp;&nbsp; 7.19
13:40:01.471 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0472, HdgA=1d86
13:40:01.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 160.33 : P = \-171.54 : Y =&nbsp;&nbsp;&nbsp; 1.57
13:40:02.471 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0475, HdgA=1d94
13:40:02.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp; \-84.22
13:40:03.476 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0475, HdgA=1d94
13:40:03.477 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp;&nbsp;&nbsp; 5.78
13:40:04.479 INFO \[Crossbow\] Hdr=ff, RolA=035d, PitA=0475, HdgA=1d89
13:40:04.481 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-167.32 : Y =&nbsp;&nbsp; \-5.47
13:40:05.483 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0475, HdgA=1d87
13:40:05.485 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-170.13 : Y =&nbsp;&nbsp; 17.03
13:40:06.488 INFO \[Crossbow\] Hdr=ff, RolA=035b, PitA=0476, HdgA=1d86
13:40:06.489 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 165.95 : P = \-171.54 : Y =&nbsp;&nbsp; \-5.47
13:40:07.492 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0477, HdgA=1d93
**** Here's the data after the bug fix.
14:16:37.203 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=0478, HdgA=1d97
14:16:37.204 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
14:16:38.206 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0479, HdgA=1d96
14:16:38.207 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.29 : Y =&nbsp;&nbsp; 41.61
14:16:39.210 INFO \[Crossbow\] Hdr=ff, RolA=0356, PitA=0476, HdgA=1d93
14:16:39.211 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 41.59
14:16:40.214 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0478, HdgA=1d94
14:16:40.215 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.59
14:16:41.218 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=047a, HdgA=1d94
14:16:41.219 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.30 : Y =&nbsp;&nbsp; 41.59
14:16:42.223 INFO \[Crossbow\] Hdr=ff, RolA=0356, PitA=0477, HdgA=1d96
14:16:42.223 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
14:16:43.227 INFO \[Crossbow\] Hdr=ff, RolA=035f, PitA=0474, HdgA=1d96
14:16:43.227 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.74 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 41.61
14:16:44.231 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0473, HdgA=1d96
14:16:44.232 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 41.61
14:16:45.235 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0476, HdgA=1d96
14:16:45.235 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 41.61
14:16:46.239 INFO \[Crossbow\] Hdr=ff, RolA=0360, PitA=0478, HdgA=1d96
14:16:46.240 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.75 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
\\
** \[Bug - minor\] Serial number is read incorrectly.&nbsp;&nbsp; NOT FIXED as it does not block tank test on July 17&nbsp;
*** 12:54:51.390 INFO \[Crossbow\] Serial Number: ff000043
*** 12:54:51.393 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 4278190147 (ff000043)&nbsp; <<-\- 4278190147 looks incorrect.
*** According to the Manual: &nbsp;\* The DMU will respond with a serial number datapacket that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.&nbsp; The serial number bytes should be interpreted as a 32-bit unsigned integer. For example, the serial number 9911750 would be sent as the four bytes 00 97 3D C6.
** \[Bug - minor\] termios set baud failure.&nbsp;&nbsp; Port is operational at 38400, but attempts to set it fail.&nbsp;&nbsp; This will be pushed off until after tank test.
*** 14:56:03.785 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
14:56:03.785 ERROR \[SerialDevice\] cfsetospeed() failed
*** &nbsp;
* \[11 July 2008\] Parosci on docking AUV
** \[Bug - Blocking with workaround\] Bad read of serial number is preventing the driver test from executing.&nbsp;&nbsp;&nbsp; Looks like the Serial number is requested, but the Parosci is busy streaming pressure readings (*000130.13829)
*** 15:05:42.226 DEBUG \[ParosciApp\] Leaving ParosciApp.initialize()
15:05:42.227 INFO \[AuvApplication\] run() - just sleeps by default
15:05:42.341 DEBUG \[Parosci\] writeCommand \*0100SN
*** 15:05:42.358 DEBUG \[Parosci\] Serial Number response: \*000130.13829
15:05:42.358 ERROR \[Parosci\] sscanf ret 0, incorrect serial number format
15:05:42.360 ERROR \[AuvService\] Read incorrect serial number format
*** Went into minicom and got the parosci to stop streaming (actually, just opening minicom showed a series of pressure readings with the last output being the serial number).&nbsp;&nbsp; Maybe a flush in the right place is needed.
** Ran the test again, starting with a 'non-streaming' parosci.
*** 15:15:58.779 INFO \[Parosci\] Paroscientific configured.
15:15:58.850 DEBUG \[StreamSerialDriver\] run() - start main loop
15:15:58.851 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:15:58.985 DEBUG \[Parosci\] reply with value is 30.13823^M
15:15:58.986 INFO \[Parosci\] depth is: 1146999941
*** Changed format character for depth from int to float
*** 15:50:02.429 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.430 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.431 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.434 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:02.610 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.611 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.611 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.614 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:02.790 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.790 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.791 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.794 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:02.969 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.970 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.971 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.974 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:03.153 DEBUG \[Parosci\] reply with value is 30.13807
15:50:03.155 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:03.155 DEBUG \[Parosci\] 1 bytes buffered now
15:50:03.158 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:03.244 DEBUG \[Parosci\] getting temp period
15:50:03.356 DEBUG \[Parosci\] writeCommand \*0100Q1
*** 15:50:03.484 DEBUG \[Parosci\] writeCommand \*0100Q1
*** 15:50:03.593 DEBUG \[Parosci\] reply with value is 5.840225
15:50:03.704 DEBUG \[Parosci\] writeCommand \*0100P2
*** 15:50:03.719 INFO \[Parosci\] tempPeriod is: \-247390116
15:50:03.720 DEBUG \[Parosci\] 0 bytes buffered now
15:50:03.723 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:03.925 DEBUG \[Parosci\] reply with value is 30.13809
15:50:03.926 INFO \[Parosci\] depth is:&nbsp; \-0.1744
15:50:03.927 DEBUG \[Parosci\] 1 bytes buffered now
15:50:03.930 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:04.105 DEBUG \[Parosci\] reply with value is 30.13807
15:50:04.107 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:04.107 DEBUG \[Parosci\] 1 bytes buffered now
15:50:04.110 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:04.285 DEBUG \[Parosci\] reply with value is 30.13809
15:50:04.286 INFO \[Parosci\] depth is:&nbsp; \-0.1744
15:50:04.287 DEBUG \[Parosci\] 1 bytes buffered now
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00

E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080

007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF468

19F04C10088000000000000000000000000010A0031004400008000800080008000800080008000800

08000800080008000800080008000800080008000800080008000800080008000800080008000800080

00800080008000800080008000800080008000800080008000800080008000800080008000800080008

00080008000800080008000800080008000800080008000800080008000800080008000800080008000

80008000800080008000800080008000800080008000800080008000800080008000800080008000800

080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C06

0E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090

306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F45393

5362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B

2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B

2625272B2625272B2625282B2625282B00046400000000006400000064000000640000006400000064

00000064000000640000006400000064000000640000006400000064000000640000006400000064000

00064000000640000006400000064000000640000006400000064000000640000006400000601000000

DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A

0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

CrossBow Output

auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
14:56:03.622 DEBUG \[CorbaUtils\] get ORB:
14:56:03.642 DEBUG \[CorbaUtils\] get POA:
14:56:03.664 DEBUG \[CorbaUtils\] Looking for event channel "EventChannel" in name service:

14:56:03.669 DEBUG \[CorbaUtils\] Found event channel "EventChannel"

14:56:03.675 DEBUG \[CorbaUtils\] Create provider servant

14:56:03.693 DEBUG \[CorbaUtils\] Create consumer servant

14:56:03.701 DEBUG \[parseComplex\] isIdentifier \-\- I've been asked to test the word crossbowPeriod
14:56:03.701 DEBUG \[parseComplex\] isIdentifier \-\- I've been asked to test the word 100
14:56:03.702 DEBUG \[parseComplex\] Parsing attribute crossbowPeriod = 100
14:56:03.703 DEBUG \[parseComplex\] No current item .. using the provided attributes CrossbowConstants
14:56:03.704 DEBUG \[Attributes\] Attributes::parse() - size=3

14:56:03.705 DEBUG \[Attributes\] Attributes::parse() - compare attribute name crossbowPeriod to input name crossbowPeriod

14:56:03.706 DEBUG \[Attributes\] Attributes::parse() \-\- Found value for crossbowPeriod
14:56:03.706 DEBUG \[Attributes\] Attributes::parse() \-\- crossbowPeriod is set
14:56:03.708 DEBUG \[Attributes\] Attribute crossbowPeriod is hasDefault = true, isSet = true
14:56:03.708 DEBUG \[Attributes\] Attribute debug is hasDefault = true, isSet = false
14:56:03.709 DEBUG \[Attributes\] Attribute dumpHex is hasDefault = true, isSet = false
14:56:03.710 DEBUG \[Attributes\] Attributes::verify() \-\- Attribute set CrossbowConstants is done
14:56:03.730 DEBUG \[CrossbowApp\] Launch instrument driver thread
IOR:010000001300000049444c3a6175762f4168727349463a312e300000010000000000000064000000010102000d0000003133342e38392e33322e31360000750e0e000000fef3d6774800001553000000000200000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
14:56:03.734 DEBUG \[CorbaUtils\] Ahrs already active...
14:56:03.737 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for Ahrs
14:56:03.746 DEBUG \[CorbaUtils\] context already bound
14:56:03.749 DEBUG \[CorbaUtils\] call bind() for Ahrs
14:56:03.759 DEBUG \[CorbaUtils\] call rebind() for Ahrs
14:56:03.763 DEBUG \[CorbaUtils\] invoke prepareToRun()

14:56:03.764 DEBUG \[CorbaUtils\] Activate POA manager
14:56:03.765 DEBUG \[CorbaUtils\] Run the ORB in a new thread
14:56:03.766 DEBUG \[CorbaUtils\] return from registerService()

14:56:03.767 DEBUG \[CrossbowApp\] Leaving CrossbowApp.initialize()
14:56:03.781 INFO \[AuvApplication\] run() - just sleeps by default
14:56:03.768 DEBUG \[Crossbow\] Crossbow::initialize : Initializing Crossbow driver
14:56:03.785 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
14:56:03.785 ERROR \[SerialDevice\] cfsetospeed() failed
14:56:03.786 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.789 DEBUG \[Crossbow\] Crossbow::initialize :&nbsp;&nbsp;&nbsp;&nbsp; ...done\!
14:56:03.789 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.790 DEBUG \[Crossbow\] Crossbow.cc: In getSerialNumber()
AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec14:56:03.816 INFO \[Crossbow\] Crossbow.cc: device->read succeeded
14:56:03.818 INFO \[Crossbow\] Crossbow.cc: The serial number is 4278190147 (ff000043)
14:56:03.821 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.860 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.16
14:56:04.852 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.13
14:56:05.856 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.12
14:56:06.860 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.11
14:56:07.864 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.73 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.12
14:56:08.868 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.25 : Y =&nbsp;&nbsp; 43.21
14:56:09.872 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.19
14:56:10.876 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.13
14:56:11.880 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.29 : Y =&nbsp;&nbsp; 43.11
14:56:12.884 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.11
14:56:13.888 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.10
14:56:14.893 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.23
14:56:15.896 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.17
&nbsp;

\\
&nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5832711</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9404654</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
* PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
The compilation of TREX core libraries is done similarly
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated via a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher

h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% omniNames&
% notifd -c $OMNINOTIFY_HOME/channel.cfg&

% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] <nstep>
Use <nstep> = 50
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9371905</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8388852</id>
<property name="body"><![CDATA[h1. AUV Wiki


h2. Development

[Linux Port]
[Source Code]
[AUV Linux - Driver Port and Validation]

h2. Meeting Minutes

[2007-03-26 Autonomy project|Minutes from 2007-03-26--Status meeting on AUV Deliberative Autonomy project]
[2007-03-19 Autonomy project|Minutes from 2007-03-19--Status meeting on AUV Deliberative Autonomy project]
[2007-03-05 Autonomy project|Minutes from 2007-03-05--Status meeting on AUV Deliberative Autonomy project]
[2007-02-20 Autonomy project|Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]

h2. Miscellaneous

[MATLAB Tools]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356096</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9404652</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
* PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
The compilation of TREX core libraries is done similarly
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated via a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher

h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] <nstep>
Use <nstep> = 50
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9371903</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">14549000</id>
<property name="body"><![CDATA[{section}
{column:width=75%}
[Lessons Learned from June 29th-30th Drifter following Experiment|AUV:Lessons Learned Drifter Following Expt June'10]
{column}
{column:width=25%}
{panel:title=Developer Resources}
# Client Frameworks
## Google Web Toolkit
### [GWT and HTML5 - Google I/O|http://www.java-tv.com/2010/08/11/gwt-html5-can-do-what/]
## Messaging Frameworks (think events)
### [Lightweight AMQP|http://soa.dzone.com/articles/lightweight-alternative]
# Security
## [Securing GWT Clients|http://java.dzone.com/articles/securing-gwt-client-acris]
# Testing
## [GWT Testing Best Practices|http://www.softdevtube.com/2010/08/09/gwt-testing-best-practices/]
## [Testing Web Clients (Selenium)|http://weblogs.java.net/blog/johnsmart/archive/2010/08/09/selenium-2web-driver-land-where-page-objects-are-king]
{panel}
{column}
{section}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">14516232</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5865668</id>
<property name="body"><![CDATA[*Auv Driver Portnig Links*
* *[AUV Linux - Driver Port and Validation]*
* *[AUV Debian4 Linux and auv-pkgs Install, build]*
* *[Termios Dev Info]*
\\
\\

h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
*** July 9:&nbsp; Hans has made the docking vehicle available to finish the porting / validation.&nbsp;&nbsp; The 3dmgx1 is not on the vehicle, but rather the Crossbow DMU
**** The DMU baud rate can be changed per the following procedure:
**** 1. Start with the DMU connected to the serial interface, with your software set to the default baud rate of 38400.
**** 2. Send the ASCII character "b" (0x62 hex) to the DMU. In a terminal program&nbsp;like minicom simply type the letter "b". The DMU is case sensitive. The DMU will respond "B" (0x42 hex).
**** 3. Now change the baud rate of your terminal software.&nbsp;
**** 4. Send the ASCII character "a" (61 hex). The DMU will detect the character and automatically match the baud rate your software is using. Upon successful operation, the DMU will return the character "A" (0x41 hex) at the new baud rate.
**** 5. You can now use the DMU at the new baud rate. The new baud rate setting is not permanent; therefore, this process must be repeated after any power reset.
**** Sanity check the Crossbow\* *Command* *Query DMU Version,* *Character(s) Sent* v, *Response* ASCII string\* &nbsp;*Command* Query DMU Serial Number, *Character(s) Sent S*, *Response* Binary serial number data packet that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.
** Fixed a bug in checkChecksum.&nbsp;&nbsp; The struct overlay on the record was reading testPacket->Checksum as zero.&nbsp;&nbsp; There were two many castings, so rewrote the routine to operate directly on the char record - BUG FIXED.
\\
parosci \-&nbsp; Paroscientific pressure sensor
* devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
* ./parosci \-dev /dev/ttyS4
** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
* Actions:
** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
** Have obtained manual - parosci is unresponsive to serial commands via minicom
** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
*** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
*** No response to \*9900VR
*** No response to \*0100SN
** Write a simple serial program to make sure the correct byte string is sent to parosci.
*** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
** \*0100P3<0x0d><0x0a> responds with \*000116.02
** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>, (ctrl-m, ctrl-j is 0x0d, 0x0a in minicom)
* Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
* With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
** Found a problem
** &nbsp;Protocol Notes:
*** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
* Status (+)
** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
** Fixed bug in baud set
** Fixed bug in read serial number (sscanf and retries)
** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
*** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
sonardyne usbl
* No test executable available
\\
tailcone
* changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
* ./tailcone \-dev /dev/ttyS2
* Cautions:
** Recommend running tailcone tests while observing the tailcone
** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
* Status (/)
** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
Teledyne dvl - Doppler Velocity Log
* changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
* Actions
** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
*** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
*** In progress Reading up on termio and analyzing termio setup...
*** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
*** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
* Status (/)
** In progress...&nbsp;&nbsp;
** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
*** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
*** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
*** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
*** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
*** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
*** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
*** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
*** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
*** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\
h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}
\\
\\
\\
*Status details:*
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* \[9 July 2008\] Crossbow
Table 4. CrossBow AHRS300CA Data Packet Format
| Byte | VG Mode | Scaled Sensor Mode | Voltage Mode |
| 0 | Header (255) | Header (255) | Header (255) |
| 1 | Roll Angle (MSB) | Roll Angular Rate (MSB) | Roll Gyro Voltage (MSB) |
| 2 | Roll Angle (LSB) | Roll Angular Rate (LSB) | Roll Gyro Voltage (LSB) |
| 3 | Pitch Angle (MSB) | Pitch Angular Rate (MSB) | Pitch Gyro Voltage (MSB) |
| 4 | Pitch Angle (LSB) | Pitch Angular Rate (LSB) | Pitch Gyro Voltage (LSB) |
| 5 | Heading Angle (MSB) | Yaw Angular Rate (MSB) | Yaw Gyro Voltage (MSB) |
| 6 | Heading Angle (LSB) | Yaw Angular Rate (LSB) | Yaw Gyro Voltage (LSB) |
| 7 | Roll Angular Rate (MSB) | X-Axis Acceleration (MSB) | X-Axis Accel Voltage (MSB) |
| 8 | Roll Angular Rate (LSB) | X-Axis Acceleration (LSB) | X-Axis Accel Voltage (LSB) |
| 9 | Pitch Angular Rate (MSB) | Y-Axis Acceleration (MSB) | Y-Axis Accel Voltage (MSB) |
| 10 | Pitch Angular Rate (LSB) | Y-Axis Acceleration (LSB) | Y-Axis Accel Voltage (LSB) |
| 11 | Yaw Angular Rate (MSB) | Z-Axis Acceleration (MSB) | Z-Axis Accel Voltage (MSB) |
| 12 | Yaw Angular Rate (LSB) | Z-Axis Acceleration (LSB) | Z-Axis Accel Voltage (LSB) |
| 13 | X-Axis Acceleration (MSB) | X-Axis Magnetic Field (MSB) | X-Axis Mag Voltage (MSB) |
| 14 | X-Axis Acceleration (LSB) | X-Axis Magnetic Field (LSB) | X-Axis Mag Voltage (LSB) |
| 15 | Y-Axis Acceleration (MSB) | Y-Axis Magnetic Field (MSB) | Y-Axis Mag Voltage (MSB) |
| 16 | Y-Axis Acceleration (LSB) | Y-Axis Magnetic Field (LSB) | Y-Axis Mag Voltage (LSB) |
| 17 | Z-Axis Acceleration (MSB) | Z-Axis Magnetic Field (MSB) | Z-Axis Mag Voltage (MSB) |
| 18 | Z-Axis Acceleration (LSB) | Z-Axis Magnetic Field (LSB) | Z-Axis Mag Voltage (LSB) |
| 19 | X-Axis Magnetic Field (MSB) | Temp Sensor Voltage (MSB) | Temp Sensor Voltage (MSB) |
| 20 | X-Axis Magnetic Field (LSB) | Temp Sensor Voltage (LSB) | Temp Sensor Voltage (LSB) |
| 21 | Y-Axis Magnetic Field (MSB) | Time (MSB) | Time (MSB) |
| 22 | Y-Axis Magnetic Field (LSB) | Time (LSB) | Time (LSB) |
| 23 | Z-Axis Magnetic Field (MSB) | Checksum | Checksum |
| 24 | Z-Axis Magnetic Field (LSB) | | |
| 25 | Temp Sensor Voltage (MSB) | | |
| 26 | Temp Sensor Voltage (LSB) | | |
| 27 | Time (MSB) | | |
| 28 | Time (LSB) | | |
| 29 | Checksum | | |
*** \[Bug - build\] Top level build fails, though enough is built to enable&nbsp;driver development
*** \[Bug - blocking\] Fixed bug in 'checkChecksum that was blocking processRecord.&nbsp;&nbsp;&nbsp;Due to&nbsp;unpacked data (code is not compiled to pack on byte boundary, pragma pack(1))&nbsp;struct overly on serial byte stream (testPacket->checksum was zero, yet the proper checksum is in the 'record' byte buf).&nbsp;&nbsp; Changed checkChecksum to operate on byte stream with fixed offset for checksum location.
*** Output looks wrong after fixing checksum problem.&nbsp;&nbsp;&nbsp; Confirmed to be the&nbsp;'pack' problem.&nbsp;&nbsp; Bug fixed by building the data structure from the bytes, rather than overlaying and byte swapping.
*** Here's the output&nbsp;showing raw data stability but bad data (before bug fix).
**** 13:40:00.467 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=047a, HdgA=1d89
13:40:00.469 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 171.58 : P = \-167.32 : Y =&nbsp;&nbsp;&nbsp; 7.19
13:40:01.471 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0472, HdgA=1d86
13:40:01.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 160.33 : P = \-171.54 : Y =&nbsp;&nbsp;&nbsp; 1.57
13:40:02.471 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0475, HdgA=1d94
13:40:02.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp; \-84.22
13:40:03.476 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0475, HdgA=1d94
13:40:03.477 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp;&nbsp;&nbsp; 5.78
13:40:04.479 INFO \[Crossbow\] Hdr=ff, RolA=035d, PitA=0475, HdgA=1d89
13:40:04.481 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-167.32 : Y =&nbsp;&nbsp; \-5.47
13:40:05.483 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0475, HdgA=1d87
13:40:05.485 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-170.13 : Y =&nbsp;&nbsp; 17.03
13:40:06.488 INFO \[Crossbow\] Hdr=ff, RolA=035b, PitA=0476, HdgA=1d86
13:40:06.489 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 165.95 : P = \-171.54 : Y =&nbsp;&nbsp; \-5.47
13:40:07.492 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0477, HdgA=1d93
**** Here's the data after the bug fix.
14:16:37.203 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=0478, HdgA=1d97
14:16:37.204 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
14:16:38.206 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0479, HdgA=1d96
14:16:38.207 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.29 : Y =&nbsp;&nbsp; 41.61
14:16:39.210 INFO \[Crossbow\] Hdr=ff, RolA=0356, PitA=0476, HdgA=1d93
14:16:39.211 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 41.59
14:16:40.214 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0478, HdgA=1d94
14:16:40.215 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.59
14:16:41.218 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=047a, HdgA=1d94
14:16:41.219 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.30 : Y =&nbsp;&nbsp; 41.59
14:16:42.223 INFO \[Crossbow\] Hdr=ff, RolA=0356, PitA=0477, HdgA=1d96
14:16:42.223 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
14:16:43.227 INFO \[Crossbow\] Hdr=ff, RolA=035f, PitA=0474, HdgA=1d96
14:16:43.227 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.74 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 41.61
14:16:44.231 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0473, HdgA=1d96
14:16:44.232 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 41.61
14:16:45.235 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0476, HdgA=1d96
14:16:45.235 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 41.61
14:16:46.239 INFO \[Crossbow\] Hdr=ff, RolA=0360, PitA=0478, HdgA=1d96
14:16:46.240 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.75 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
\\
** \[Bug - minor\] Serial number is read incorrectly.&nbsp;&nbsp; NOT FIXED as it does not block tank test on July 17&nbsp;
*** 12:54:51.390 INFO \[Crossbow\] Serial Number: ff000043
*** 12:54:51.393 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 4278190147 (ff000043)&nbsp; <<-\- 4278190147 looks incorrect.
*** According to the Manual: &nbsp;\* The DMU will respond with a serial number datapacket that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.&nbsp; The serial number bytes should be interpreted as a 32-bit unsigned integer. For example, the serial number 9911750 would be sent as the four bytes 00 97 3D C6.
** \[Bug - minor\] termios set baud failure.&nbsp;&nbsp; Port is operational at 38400, but attempts to set it fail.&nbsp;&nbsp; This will be pushed off until after tank test.
*** 14:56:03.785 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
14:56:03.785 ERROR \[SerialDevice\] cfsetospeed() failed
*** &nbsp;
* \[11 July 2008\] Parosci on docking AUV
** \[Bug - Blocking with workaround\] Bad read of serial number is preventing the driver test from executing.&nbsp;&nbsp;&nbsp; Looks like the Serial number is requested, but the Parosci is busy streaming pressure readings (*000130.13829)
*** 15:05:42.226 DEBUG \[ParosciApp\] Leaving ParosciApp.initialize()
15:05:42.227 INFO \[AuvApplication\] run() - just sleeps by default
15:05:42.341 DEBUG \[Parosci\] writeCommand \*0100SN
*** 15:05:42.358 DEBUG \[Parosci\] Serial Number response: \*000130.13829
15:05:42.358 ERROR \[Parosci\] sscanf ret 0, incorrect serial number format
15:05:42.360 ERROR \[AuvService\] Read incorrect serial number format
*** Went into minicom and got the parosci to stop streaming (actually, just opening minicom showed a series of pressure readings with the last output being the serial number).&nbsp;&nbsp; Maybe a flush in the right place is needed.
** Ran the test again, starting with a 'non-streaming' parosci.
*** 15:15:58.779 INFO \[Parosci\] Paroscientific configured.
15:15:58.850 DEBUG \[StreamSerialDriver\] run() - start main loop
15:15:58.851 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:15:58.985 DEBUG \[Parosci\] reply with value is 30.13823^M
15:15:58.986 INFO \[Parosci\] depth is: 1146999941
*** Changed format character for depth from int to float
*** 15:50:02.429 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.430 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.431 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.434 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:02.610 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.611 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.611 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.614 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:02.790 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.790 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.791 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.794 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:02.969 DEBUG \[Parosci\] reply with value is 30.13807
15:50:02.970 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:02.971 DEBUG \[Parosci\] 1 bytes buffered now
15:50:02.974 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:03.153 DEBUG \[Parosci\] reply with value is 30.13807
15:50:03.155 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:03.155 DEBUG \[Parosci\] 1 bytes buffered now
15:50:03.158 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:03.244 DEBUG \[Parosci\] getting temp period
15:50:03.356 DEBUG \[Parosci\] writeCommand \*0100Q1
*** 15:50:03.484 DEBUG \[Parosci\] writeCommand \*0100Q1
*** 15:50:03.593 DEBUG \[Parosci\] reply with value is 5.840225
15:50:03.704 DEBUG \[Parosci\] writeCommand \*0100P2
*** 15:50:03.719 INFO \[Parosci\] tempPeriod is: \-247390116
15:50:03.720 DEBUG \[Parosci\] 0 bytes buffered now
15:50:03.723 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:03.925 DEBUG \[Parosci\] reply with value is 30.13809
15:50:03.926 INFO \[Parosci\] depth is:&nbsp; \-0.1744
15:50:03.927 DEBUG \[Parosci\] 1 bytes buffered now
15:50:03.930 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:04.105 DEBUG \[Parosci\] reply with value is 30.13807
15:50:04.107 INFO \[Parosci\] depth is:&nbsp; \-0.1513
15:50:04.107 DEBUG \[Parosci\] 1 bytes buffered now
15:50:04.110 DEBUG \[StreamSerialDriver\] StreamSerialDriver::run() - call readRecord()
15:50:04.285 DEBUG \[Parosci\] reply with value is 30.13809
15:50:04.286 INFO \[Parosci\] depth is:&nbsp; \-0.1744
15:50:04.287 DEBUG \[Parosci\] 1 bytes buffered now
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D* \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00

E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080

007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF468

19F04C10088000000000000000000000000010A0031004400008000800080008000800080008000800

08000800080008000800080008000800080008000800080008000800080008000800080008000800080

00800080008000800080008000800080008000800080008000800080008000800080008000800080008

00080008000800080008000800080008000800080008000800080008000800080008000800080008000

80008000800080008000800080008000800080008000800080008000800080008000800080008000800

080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C06

0E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090

306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F45393

5362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B

2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B

2625272B2625272B2625282B2625282B00046400000000006400000064000000640000006400000064

00000064000000640000006400000064000000640000006400000064000000640000006400000064000

00064000000640000006400000064000000640000006400000064000000640000006400000601000000

DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A

0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

CrossBow Output

auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
14:56:03.622 DEBUG \[CorbaUtils\] get ORB:
14:56:03.642 DEBUG \[CorbaUtils\] get POA:
14:56:03.664 DEBUG \[CorbaUtils\] Looking for event channel "EventChannel" in name service:

14:56:03.669 DEBUG \[CorbaUtils\] Found event channel "EventChannel"

14:56:03.675 DEBUG \[CorbaUtils\] Create provider servant

14:56:03.693 DEBUG \[CorbaUtils\] Create consumer servant

14:56:03.701 DEBUG \[parseComplex\] isIdentifier \-\- I've been asked to test the word crossbowPeriod
14:56:03.701 DEBUG \[parseComplex\] isIdentifier \-\- I've been asked to test the word 100
14:56:03.702 DEBUG \[parseComplex\] Parsing attribute crossbowPeriod = 100
14:56:03.703 DEBUG \[parseComplex\] No current item .. using the provided attributes CrossbowConstants
14:56:03.704 DEBUG \[Attributes\] Attributes::parse() - size=3

14:56:03.705 DEBUG \[Attributes\] Attributes::parse() - compare attribute name crossbowPeriod to input name crossbowPeriod

14:56:03.706 DEBUG \[Attributes\] Attributes::parse() \-\- Found value for crossbowPeriod
14:56:03.706 DEBUG \[Attributes\] Attributes::parse() \-\- crossbowPeriod is set
14:56:03.708 DEBUG \[Attributes\] Attribute crossbowPeriod is hasDefault = true, isSet = true
14:56:03.708 DEBUG \[Attributes\] Attribute debug is hasDefault = true, isSet = false
14:56:03.709 DEBUG \[Attributes\] Attribute dumpHex is hasDefault = true, isSet = false
14:56:03.710 DEBUG \[Attributes\] Attributes::verify() \-\- Attribute set CrossbowConstants is done
14:56:03.730 DEBUG \[CrossbowApp\] Launch instrument driver thread
IOR:010000001300000049444c3a6175762f4168727349463a312e300000010000000000000064000000010102000d0000003133342e38392e33322e31360000750e0e000000fef3d6774800001553000000000200000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
14:56:03.734 DEBUG \[CorbaUtils\] Ahrs already active...
14:56:03.737 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for Ahrs
14:56:03.746 DEBUG \[CorbaUtils\] context already bound
14:56:03.749 DEBUG \[CorbaUtils\] call bind() for Ahrs
14:56:03.759 DEBUG \[CorbaUtils\] call rebind() for Ahrs
14:56:03.763 DEBUG \[CorbaUtils\] invoke prepareToRun()

14:56:03.764 DEBUG \[CorbaUtils\] Activate POA manager
14:56:03.765 DEBUG \[CorbaUtils\] Run the ORB in a new thread
14:56:03.766 DEBUG \[CorbaUtils\] return from registerService()

14:56:03.767 DEBUG \[CrossbowApp\] Leaving CrossbowApp.initialize()
14:56:03.781 INFO \[AuvApplication\] run() - just sleeps by default
14:56:03.768 DEBUG \[Crossbow\] Crossbow::initialize : Initializing Crossbow driver
14:56:03.785 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
14:56:03.785 ERROR \[SerialDevice\] cfsetospeed() failed
14:56:03.786 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.789 DEBUG \[Crossbow\] Crossbow::initialize :&nbsp;&nbsp;&nbsp;&nbsp; ...done\!
14:56:03.789 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.790 DEBUG \[Crossbow\] Crossbow.cc: In getSerialNumber()
AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec14:56:03.816 INFO \[Crossbow\] Crossbow.cc: device->read succeeded
14:56:03.818 INFO \[Crossbow\] Crossbow.cc: The serial number is 4278190147 (ff000043)
14:56:03.821 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.860 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.16
14:56:04.852 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.13
14:56:05.856 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.12
14:56:06.860 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.11
14:56:07.864 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.73 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.12
14:56:08.868 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.25 : Y =&nbsp;&nbsp; 43.21
14:56:09.872 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.19
14:56:10.876 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.13
14:56:11.880 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.29 : Y =&nbsp;&nbsp; 43.11
14:56:12.884 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.11
14:56:13.888 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.10
14:56:14.893 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.23
14:56:15.896 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.17
&nbsp;

\\
&nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5832907</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5865637</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.
\\

Xtreme104 Serial Setup
\\

serial.conf looks like

mvc-debian4:/proc# cat /etc/serial.conf
/dev/ttyS1 uart 16450 port 0x2F8 irq 3

\#Xtreme card
\# Group A
/dev/ttyS2 uart 16850 port 0x380 irq 9&nbsp; baud_base 1500000
/dev/ttyS3 uart 16850 port 0x388 irq 9&nbsp; baud_base 1500000
/dev/ttyS4 uart 16850 port 0x390 irq 9&nbsp; baud_base 1500000
/dev/ttyS5 uart 16850 port 0x398 irq 9&nbsp; baud_base 1500000

\# Group B
/dev/ttyS6 uart 16850 port 0x300 irq 9&nbsp; baud_base 1500000
/dev/ttyS7 uart 16850 port 0x308 irq 9&nbsp; baud_base 1500000
/dev/ttyS8 uart 16850 port 0x310 irq 9&nbsp; baud_base 1500000
/dev/ttyS9 uart 16850 port 0x318 irq 9&nbsp; baud_base 1500000

\# Group C
/dev/ttyS10 uart 16850 port 0x150 irq 9 baud_base 1500000
/dev/ttyS11 uart 16850 port 0x158 irq 9 baud_base 1500000
/dev/ttyS12 uart 16850 port 0x160 irq 9 baud_base 1500000
/dev/ttyS13 uart 16850 port 0x168 irq 9 baud_base 1500000
&nbsp;
\\

mvc-debian4:/proc# cat /proc/interrupts
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU0
&nbsp; 0:&nbsp;&nbsp; 45634199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; timer
&nbsp; 1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; i8042
&nbsp; 2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; cascade
&nbsp; 6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; floppy
&nbsp; 7:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; parport0
&nbsp; 8:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; rtc
&nbsp; 9:&nbsp;&nbsp; 67591801&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; serial
&nbsp;11:&nbsp;&nbsp;&nbsp;&nbsp; 865812&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; eth0
&nbsp;14:&nbsp;&nbsp;&nbsp;&nbsp; 153327&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; ide0
NMI:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
LOC:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
ERR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
MIS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
mvc-debian4:/proc# setserial \-g /dev/ttyS5
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
mvc-debian4:/proc# setserial \-g /dev/ttyS\*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16450, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: 16850, Port: 0x0150, IRQ: 2
/dev/ttyS11, UART: 16850, Port: 0x0158, IRQ: 2
/dev/ttyS2, UART: 16850, Port: 0x0380, IRQ: 2
/dev/ttyS3, UART: 16850, Port: 0x0388, IRQ: 2
/dev/ttyS4, UART: 16850, Port: 0x0390, IRQ: 2
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
/dev/ttyS6, UART: 16850, Port: 0x0300, IRQ: 2
/dev/ttyS7, UART: 16850, Port: 0x0308, IRQ: 2
/dev/ttyS8, UART: 16850, Port: 0x0310, IRQ: 2
/dev/ttyS9, UART: 16850, Port: 0x0318, IRQ: 2
&nbsp;

&nbsp;mvc-debian4:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0150-0157 : serial
0158-015f : serial
01f0-01f7 : ide0
02f8-02ff : serial
0300-0307 : serial
0308-030f : serial
0310-0317 : serial
0318-031f : serial
0378-037a : parport0
037b-037f : parport0
0380-0387 : serial
0388-038f : serial
0390-0397 : serial
0398-039f : serial
03c0-03df : vga\+
03f2-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-03ff : serial
0cf8-0cff : PCI conf1
e000-e03f : 0000:00:11.0
&nbsp; e000-e03f : e100
f000-f00f : 0000:00:12.2
&nbsp; f000-f007 : ide0
&nbsp; f008-f00f : ide1
\\

h4. Useful Debian links

** www.google.com
** [http://www.debianhelp.org]
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
**** create a file called 'startCorba'
***** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notificatino service.
***** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
***** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
***** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
**** make sure startCorba has execute permissions (chmod a+x startCorba)&nbsp;
**** Create a symbolic link in /etc/rc3.d to 'startCorba'&nbsp;
***** ln \-s /etc/init.d/startCorba /etc/rc3.d/S96startCorba
&nbsp;
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\
\\

Notes from ConnectTech Support site for Xtreme104 Isolated 12 port serial card
\\

&nbsp;Configuring the Kernel(2.6.x){color:black}The 2.6 kernel has support for the 8250/16650 UART in <src>/drivers/serial/8250.c. You should be able to run our ISA serial cards(Echo, DFlex, Xtreme/104) with this driver and the proper Kernel configuration.{color}{color:black}You'll need to edit your serial.h file in <src>/include/asm and add in the extra serial ports of the card.{color}{color:black}Here's what I added in red for a 4 port Xtreme/104 card at I/O 300 and IRQ 5. You can do the same with your card settings. If your card is using a higher clock than be sure to adjust your BAUD_BAUD value accordingly{color}

/\* Base baud for CTI boards. Default Max Baud = 115200 bps \*/

define CTI_BAUD (1843200 /16){color:black}define STD_SERIAL_PORT_DFNS \{color}{color}{color:black}&nbsp;/\*{color} UARTCLKPORT{color:black}IRQ FLAGS \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS0 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS1 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS2 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS3 \*/ \{color}{color}
{ 0, CTI_BAUD, 0x300, 5, STD_COM_FLAGS }{color:black}, /\* ttyS4 \*/ \{}{color}
{ 0, CTI_BAUD, 0x308, 5, STD_COM_FLAGS }{color:red}, /\* ttyS5 \*/ \{}{color}
{ 0, CTI_BAUD, 0x310, 5, STD_COM_FLAGS }{color:red}, /\* ttyS6 \*/ \{}{color}
{ 0, CTI_BAUD, 0x318, 5, STD_COM_FLAGS }{color:red}, /\* ttyS7 \*/{color}
If your board has a difference clock, be sure to change the CTI_BAUD value appropriately.
\\
\\
\\
\\
\\
\\

Re-Compiling the Kernel(Linux 2.6)

\*# cd
{Linux}*

At this point, you have a choice of two configuration utilities that you can use to configure your kernel. One utility, named config, is text based, and the other, named menuconfig, has a simple GUI (Graphical User Interface). The menuconfig utility is easier to use than config, so unless you have specific reasons use the menuconfig utility.

To use the menuconfig / config utility:

*\# make menuconfig*
Or
*\# make config* Once the configuration utility you choose is running, make sure that the following options are selected. Below shows the setting that must be enabled using the menuconfig and config utilities.

config: CONFIG_PCI
menuconfig: (Bus Options \-> PCI Support)\\

config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> 8250/16550 and compatible serial support)
 

config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Extended 8250/16550 serial driver options)

config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support more than 4 legacy serial ports)
 

config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support for sharing serial interrupts)

After all of the options have been checked and enabled, select exit. You will be prompted to save the new kernel configuration. Select yes. After you have finished configuring your kernel, issue the two following commands:

*\# make clean*
*\# make bzImage*
*\# make modules*
*\# make modules_install{*}Building/Installing the Kernel
NOTE: These instructions are for Red Hat standard installs. If you use a different distribution, or have set up your own system, these instructions will likely not help you. In that case please contact Connect Tech support at support@connecttech.com

Copy the kernel and system map to the boot partition:

The "make bzImage" step created the kernel in the subdirectory {Linux}
/arch//boot. If you don't know what CPU type you're using, you can find the new kernel by:
\\
# ls \-l
{Linux}/arch/*/boot/bzImage

The < cpu type > is the "*" part of the pathname of the newest kernel.
/arch//boot will be referenced by {arch}.

# cp {Linux}
/
{arch}
/bzImage /boot/vmlinuz-bh
# cp
{Linux}
/System.map /boot/System.map-bh

You may choose any postfix, \-df is a handy one. The postfix merely distinguishes between the kernel you've just built and other kernels already installed. It has no other purpose.
&nbsp;
Creating Nodes (Ports) For the Host Adapter
NOTE: Depending on your kernel distribution and configuration, nodes(ports) are often created automatically and you can skip this step. Check to see if they exist before proceeding.

Now that we have the new kernel in place capable of supporting the Blue Heat serial adapter we must create nodes, or ports, to allow the host adapter to communicate with other devices.

To begin, boot the new kernel. After the kernel has booted, open up the messages file using Vi, or your favorite text editor:
# vi
{log_path}/messages
Where {log_path}
is where the system logs are stored. Typically,
{log_path} = /var/log but this may be different in some distributions/systems.

Go to the bottom of the file and search backwards for references to "ttySxx" where xx is a number. You should see ttyS0 and ttyS1 for the standard serial ports, as well as a ttySxx entrie for each installed Echo/Dflex port. In order to use the new ports, these ttySxx entries must exist in the /dev directory. If they do not exist (they aren't created automatically, but do persist after reboots) you must make them with the following command:

# mknod -m [mode] /dev/ttySxx c 4 yy
[mode] is the file mode (permissions) you wish the device to have. 600 is often good.
xx is the number associated with the device which you have seen in the messages file.
yy is just xx + 64

You may also wish to make the corresponding cuaxx devices, but they are being phased out:

# mknod -m {mode} /dev/cuaxx c 5 yy
xx and yy should match the xx and yy from the previous mknod command

Here is an example of what you would do to add the nodes to your /dev directory:
First I opened the Vi editor and search for ttyS*. The results of the search show me that I have ttyS00 and ttyS01 (the standard serial ports) entries, as well as four other entries: ttyS05, ttyS06, ttyS07 and ttyS08. These four entries correspond to the four new ports for my CTI host adapter. (Right now, we are assuming a four-port card. You may have fewer or more ports, depending on the type of card you have). I've written down the four entries on a sheet of paper, seeing how my memory is a little short. Now I would like to make the nodes. From the command line, I type in the four following entries:

# mknod -m 600 /dev/ttyS05 c 4 69
# mknod -m 600 /dev/ttyS06 c 4 70
# mknod -m 600 /dev/ttyS06 c 4 71
# mknod -m 600 /dev/ttyS07 c 4 72

and optionally execute:

# mknod -m 600 /dev/cua12 c 5 69
# mknod -m 600 /dev/cua13 c 5 70
# mknod -m 600 /dev/cua14 c 5 71
# mknod -m 600 /dev/cua15 c 5 72

With the nodes in place, this finishes off our installation
 
Multiport Support
NOTE: Multiport support is not necessary for your boards to operate properly. This may safely be skipped. It is only a performance tweak available for users with older systems. Newer PCs do not gain much performance from this tweak.

Check {log_path}
/messages again. Each serial port will have a line; all the ports on each board will be listed in sequence. An eight port board might look like:

ttyS4 at port 0x300 (irq = 5) is a ST16654
ttyS5 at port 0x308 (irq = 5) is a ST16654
ttyS6 at port 0x310 (irq = 5) is a ST16654
ttyS7 at port 0x318 (irq = 5) is a ST16654
ttyS8 at port 0x320 (irq = 5) is a ST16654
ttyS9 at port 0x328 (irq = 5) is a ST16654
ttyS10 at port 0x330 (irq = 5) is a ST16654
ttyS11 at port 0x338 (irq = 5) is a ST16654

"port" in the above listing is really short for "port address". To avoid confusion, I will refer to the port address as the "address" instead.

Your board will have a table of the port addresses in the manual that came with it. You will need to look up the address that the board has been configured for; the line will also tell you what address the status port is at.
{mask} is determined by the following table:
Number of ports       {mask}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffsetserial is used to inform the driver about the status port, in the following manner:
\\
# setserial
{port} set_multiport portX {status port address} maskX {mask} matchX 0x0
where {port}
is any one port on a given board (using the first port is usually the best way),
{status port address}
is the address of the status port as determined above,
{mask}
is the appropriate mask value for the board from the table above, and X is a multiport setting number between 1 and 4.

The multiport setting number will usually be 1, but can be other values. There may be other multiport settings on the irq that your board is using, set by other boards in your system, including other Connect Tech boards.
# setserial
{port} get_setserial
where {port}
is a port on a board that you are going to use the status port on, will reveal if there are other multiport settings in effect already. If so, take care to choose X to be the lowest empty setting number.

This needs be done only once per board that you wish to have the status port used on.

Example:
You have two boards installed, an 8 port and a 2 port. The ports on each board are:
ttyS4 at port 0x300 (irq = 5) is a ST16654
.
.
ttyS11 at port 0x338 (irq = 5) is a ST16654
ttyS12 at port 0x200 (irq = 10) is a ST16654
ttyS13 at port 0x208 (irq = 10) is a ST16654

Check to see if any other multiport settings are already in use:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0One multiport setting is already in use by another board.

This works on a per irq basis, so each irq that is used by a board needs to be checked:
# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0No multiport settings are in use.

The commands to enable use of the status port on each board would be:
# setserial /dev/ttyS4 set_multiport port2 0x340 mask2 0xff match2 0x00
# setserial /dev/ttyS12 set_multiport port1 0x240 mask1 0x03 match1 0x00

Check that the settings are in place:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x340, mask=0xff, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x240, mask=0x3, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# man setserial

may be of help also.
&nbsp;
RS-485 Line Modes Support
The utility set485 can be used to set the line mode interactively or from a startup script. Settings stick until changed or the system is rebooted.

The Linux header file ioctls.h now contains definitions for TIOCSER485GET and TIOCSER485SET. These ioctls can be used on Connect Tech 485 capable boards to set the line mode. The mode (passed as an integer) can be one of TIOCSER485FULLDUPLEX, TIOCSER485HALFDUPLEX or TIOCSER485SLAVEMULTIPLEX for full or half duplex or slave multidrop mode, respectively.
&nbsp;
The Linux 2.6 standard serial driver does not have advanced RS485 mode support as of yet. If you require this functionality please contactsupport@connecttech.comfor the latest status of patches available.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5832876</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5865664</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux and auv-pkgs Install, build]*
* *[Termios Dev Info]*
* *[Driver Porting Details]*
* *[Running and Testing AUV Linux]*

\\
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to develop termios serial driver and validate 12 port serial card kernel driver.&nbsp;&nbsp;Tune hardware
* Recommend build-up of a test PC104 (Lippert board) + Xtreme104 12 port serial card with harddisk.

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;

\\

h6. Skill Requirements for Tasks:&nbsp;

C++, Linux, Termios, Familiarity with Navigation and Science Sensors and Debian Linux
\\

h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux and auv-pkgs Install, build]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
**** crossbow AHRS compass - Hans requested focus on this driver first (July 2008), however it will likely not be on a deployed vehicle since 3dmgx1 is preferred.
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.&nbsp;&nbsp;
\\
\\
\\
&nbsp;

h4. \\


h3.

Thom's Notes:

Time on AUV was 1999.&nbsp;&nbsp;&nbsp;

Fresh checkout from cvs, build failed.
gcc \-o uplinkQserver uplinkQueuerServer.o&nbsp; /home/auv/prj/auv-linux/onboard//utils/auvUtils.a /home/auv/prj/auv-shared/lib/libAuvShared.a \-L/opt/omniOrb/omniORB-4.1.0/build/lib/ \-L/usr/local/apr/lib \-lgctpc \-lpthread \-llog4cxx \-lnetcdf \-lnewmat&nbsp; \-lapr-1 \-laprutil-1 \-lrt
uplinkQueuerServer.o: In function `main':
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:9: undefined reference to `mbari::Logger::configure(char const*)'
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:17: undefined reference to `MsgQueuerServer::MsgQueuerServer(char const*, long, long, unsigned char, int)'
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:26: undefined reference to `MsgQueuerServer::run()'
collect2: ld returned 1 exit status
make\[1\]: \**\* \[uplinkQserver\] Error 1
make\[1\]: Leaving directory `/home/auv/prj/auv-linux/onboard/tools'
make failed
make: \**\* \[all\] Error 2
\\

The build got far enough to enable teledyne and crossbow builds.&nbsp;&nbsp;&nbsp; Teledyne would not run without creating 'latest' directory in onboard/logs though I seem to remember there was a link involved (talk to Tom O.).]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5832903</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5865666</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux and auv-pkgs Install, build]*
* *[Termios Dev Info]*
* *[Driver Porting Details]*
* *[Running and Testing AUV Linux]*

\\
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to develop termios serial driver and validate 12 port serial card kernel driver.&nbsp;&nbsp;Tune hardware
* Recommend build-up of a test PC104 (Lippert board) + Xtreme104 12 port serial card with harddisk.

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;

\\

h6. Skill Requirements for Tasks:&nbsp;

C++, Linux, Termios, Familiarity with Navigation and Science Sensors and Debian Linux
\\

h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux and auv-pkgs Install, build]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
**** crossbow AHRS compass - Hans requested focus on this driver first (July 2008), however it will likely not be on a deployed vehicle since 3dmgx1 is preferred.
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.&nbsp;&nbsp;
\\
\\
\\
&nbsp;

h4. \\


h3.

Thom's Notes:

Time on AUV was 1999.&nbsp;&nbsp;&nbsp;

Fresh checkout from cvs, build failed.
gcc \-o uplinkQserver uplinkQueuerServer.o&nbsp; /home/auv/prj/auv-linux/onboard//utils/auvUtils.a /home/auv/prj/auv-shared/lib/libAuvShared.a \-L/opt/omniOrb/omniORB-4.1.0/build/lib/ \-L/usr/local/apr/lib \-lgctpc \-lpthread \-llog4cxx \-lnetcdf \-lnewmat&nbsp; \-lapr-1 \-laprutil-1 \-lrt
uplinkQueuerServer.o: In function `main':
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:9: undefined reference to `mbari::Logger::configure(char const*)'
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:17: undefined reference to `MsgQueuerServer::MsgQueuerServer(char const*, long, long, unsigned char, int)'
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:26: undefined reference to `MsgQueuerServer::run()'
collect2: ld returned 1 exit status
make\[1\]: \**\* \[uplinkQserver\] Error 1
make\[1\]: Leaving directory `/home/auv/prj/auv-linux/onboard/tools'
make failed
make: \**\* \[all\] Error 2
\\

The build got far enough to enable teledyne and crossbow builds.&nbsp;&nbsp;&nbsp; Teledyne would not run without creating 'latest' directory in onboard/logs though I seem to remember there was a link involved (talk to Tom O.).\\

&nbsp;For Leak detection:

http://www.cprogramming.com/debugging/valgrind.html]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5832905</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5865603</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.
\\

Xtreme104 Serial Setup
\\

serial.conf looks like

mvc-debian4:/proc# cat /etc/serial.conf
/dev/ttyS1 uart 16450 port 0x2F8 irq 3

\#Xtreme card
\# Group A
/dev/ttyS2 uart 16850 port 0x380 irq 9&nbsp; baud_base 1500000
/dev/ttyS3 uart 16850 port 0x388 irq 9&nbsp; baud_base 1500000
/dev/ttyS4 uart 16850 port 0x390 irq 9&nbsp; baud_base 1500000
/dev/ttyS5 uart 16850 port 0x398 irq 9&nbsp; baud_base 1500000

\# Group B
/dev/ttyS6 uart 16850 port 0x300 irq 9&nbsp; baud_base 1500000
/dev/ttyS7 uart 16850 port 0x308 irq 9&nbsp; baud_base 1500000
/dev/ttyS8 uart 16850 port 0x310 irq 9&nbsp; baud_base 1500000
/dev/ttyS9 uart 16850 port 0x318 irq 9&nbsp; baud_base 1500000

\# Group C
/dev/ttyS10 uart 16850 port 0x150 irq 9 baud_base 1500000
/dev/ttyS11 uart 16850 port 0x158 irq 9 baud_base 1500000
/dev/ttyS12 uart 16850 port 0x160 irq 9 baud_base 1500000
/dev/ttyS13 uart 16850 port 0x168 irq 9 baud_base 1500000
&nbsp;
\\

mvc-debian4:/proc# cat /proc/interrupts
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU0
&nbsp; 0:&nbsp;&nbsp; 45634199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; timer
&nbsp; 1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; i8042
&nbsp; 2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; cascade
&nbsp; 6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; floppy
&nbsp; 7:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; parport0
&nbsp; 8:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; rtc
&nbsp; 9:&nbsp;&nbsp; 67591801&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; serial
&nbsp;11:&nbsp;&nbsp;&nbsp;&nbsp; 865812&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; eth0
&nbsp;14:&nbsp;&nbsp;&nbsp;&nbsp; 153327&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; ide0
NMI:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
LOC:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
ERR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
MIS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
mvc-debian4:/proc# setserial \-g /dev/ttyS5
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
mvc-debian4:/proc# setserial \-g /dev/ttyS\*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16450, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: 16850, Port: 0x0150, IRQ: 2
/dev/ttyS11, UART: 16850, Port: 0x0158, IRQ: 2
/dev/ttyS2, UART: 16850, Port: 0x0380, IRQ: 2
/dev/ttyS3, UART: 16850, Port: 0x0388, IRQ: 2
/dev/ttyS4, UART: 16850, Port: 0x0390, IRQ: 2
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
/dev/ttyS6, UART: 16850, Port: 0x0300, IRQ: 2
/dev/ttyS7, UART: 16850, Port: 0x0308, IRQ: 2
/dev/ttyS8, UART: 16850, Port: 0x0310, IRQ: 2
/dev/ttyS9, UART: 16850, Port: 0x0318, IRQ: 2
&nbsp;

&nbsp;mvc-debian4:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0150-0157 : serial
0158-015f : serial
01f0-01f7 : ide0
02f8-02ff : serial
0300-0307 : serial
0308-030f : serial
0310-0317 : serial
0318-031f : serial
0378-037a : parport0
037b-037f : parport0
0380-0387 : serial
0388-038f : serial
0390-0397 : serial
0398-039f : serial
03c0-03df : vga\+
03f2-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-03ff : serial
0cf8-0cff : PCI conf1
e000-e03f : 0000:00:11.0
&nbsp; e000-e03f : e100
f000-f00f : 0000:00:12.2
&nbsp; f000-f007 : ide0
&nbsp; f008-f00f : ide1
\\

h4. Useful Debian links

** www.google.com
** [http://www.debianhelp.org]
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\
\\

Notes from ConnectTech Support site for Xtreme104 Isolated 12 port serial card
\\

&nbsp;Configuring the Kernel(2.6.x){color:black}The 2.6 kernel has support for the 8250/16650 UART in <src>/drivers/serial/8250.c. You should be able to run our ISA serial cards(Echo, DFlex, Xtreme/104) with this driver and the proper Kernel configuration.{color}{color:black}You'll need to edit your serial.h file in <src>/include/asm and add in the extra serial ports of the card.{color}{color:black}Here's what I added in red for a 4 port Xtreme/104 card at I/O 300 and IRQ 5. You can do the same with your card settings. If your card is using a higher clock than be sure to adjust your BAUD_BAUD value accordingly{color}

/\* Base baud for CTI boards. Default Max Baud = 115200 bps \*/

define CTI_BAUD (1843200 /16){color:black}define STD_SERIAL_PORT_DFNS \{color}{color}{color:black}&nbsp;/\*{color} UARTCLKPORT{color:black}IRQ FLAGS \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS0 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS1 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS2 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS3 \*/ \{color}{color}
{ 0, CTI_BAUD, 0x300, 5, STD_COM_FLAGS }{color:black}, /\* ttyS4 \*/ \{}{color}
{ 0, CTI_BAUD, 0x308, 5, STD_COM_FLAGS }{color:red}, /\* ttyS5 \*/ \{}{color}
{ 0, CTI_BAUD, 0x310, 5, STD_COM_FLAGS }{color:red}, /\* ttyS6 \*/ \{}{color}
{ 0, CTI_BAUD, 0x318, 5, STD_COM_FLAGS }{color:red}, /\* ttyS7 \*/{color}
If your board has a difference clock, be sure to change the CTI_BAUD value appropriately.
\\
\\
\\
\\
\\

Re-Compiling the Kernel(Linux 2.6)

\*# cd
{Linux}*

At this point, you have a choice of two configuration utilities that you can use to configure your kernel. One utility, named config, is text based, and the other, named menuconfig, has a simple GUI (Graphical User Interface). The menuconfig utility is easier to use than config, so unless you have specific reasons use the menuconfig utility.

To use the menuconfig / config utility:

*\# make menuconfig*
Or
*\# make config* Once the configuration utility you choose is running, make sure that the following options are selected. Below shows the setting that must be enabled using the menuconfig and config utilities.

config: CONFIG_PCI
menuconfig: (Bus Options \-> PCI Support)\\

config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> 8250/16550 and compatible serial support)
 

config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Extended 8250/16550 serial driver options)

config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support more than 4 legacy serial ports)
 

config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support for sharing serial interrupts)

After all of the options have been checked and enabled, select exit. You will be prompted to save the new kernel configuration. Select yes. After you have finished configuring your kernel, issue the two following commands:

*\# make clean*
*\# make bzImage*
*\# make modules*
*\# make modules_install{*}Building/Installing the Kernel
NOTE: These instructions are for Red Hat standard installs. If you use a different distribution, or have set up your own system, these instructions will likely not help you. In that case please contact Connect Tech support at support@connecttech.com

Copy the kernel and system map to the boot partition:

The "make bzImage" step created the kernel in the subdirectory {Linux}
/arch//boot. If you don't know what CPU type you're using, you can find the new kernel by:
\\
# ls \-l
{Linux}/arch/*/boot/bzImage

The < cpu type > is the "*" part of the pathname of the newest kernel.
/arch//boot will be referenced by {arch}.

# cp {Linux}
/
{arch}
/bzImage /boot/vmlinuz-bh
# cp
{Linux}
/System.map /boot/System.map-bh

You may choose any postfix, \-df is a handy one. The postfix merely distinguishes between the kernel you've just built and other kernels already installed. It has no other purpose.
&nbsp;
Creating Nodes (Ports) For the Host Adapter
NOTE: Depending on your kernel distribution and configuration, nodes(ports) are often created automatically and you can skip this step. Check to see if they exist before proceeding.

Now that we have the new kernel in place capable of supporting the Blue Heat serial adapter we must create nodes, or ports, to allow the host adapter to communicate with other devices.

To begin, boot the new kernel. After the kernel has booted, open up the messages file using Vi, or your favorite text editor:
# vi
{log_path}/messages
Where {log_path}
is where the system logs are stored. Typically,
{log_path} = /var/log but this may be different in some distributions/systems.

Go to the bottom of the file and search backwards for references to "ttySxx" where xx is a number. You should see ttyS0 and ttyS1 for the standard serial ports, as well as a ttySxx entrie for each installed Echo/Dflex port. In order to use the new ports, these ttySxx entries must exist in the /dev directory. If they do not exist (they aren't created automatically, but do persist after reboots) you must make them with the following command:

# mknod -m [mode] /dev/ttySxx c 4 yy
[mode] is the file mode (permissions) you wish the device to have. 600 is often good.
xx is the number associated with the device which you have seen in the messages file.
yy is just xx + 64

You may also wish to make the corresponding cuaxx devices, but they are being phased out:

# mknod -m {mode} /dev/cuaxx c 5 yy
xx and yy should match the xx and yy from the previous mknod command

Here is an example of what you would do to add the nodes to your /dev directory:
First I opened the Vi editor and search for ttyS*. The results of the search show me that I have ttyS00 and ttyS01 (the standard serial ports) entries, as well as four other entries: ttyS05, ttyS06, ttyS07 and ttyS08. These four entries correspond to the four new ports for my CTI host adapter. (Right now, we are assuming a four-port card. You may have fewer or more ports, depending on the type of card you have). I've written down the four entries on a sheet of paper, seeing how my memory is a little short. Now I would like to make the nodes. From the command line, I type in the four following entries:

# mknod -m 600 /dev/ttyS05 c 4 69
# mknod -m 600 /dev/ttyS06 c 4 70
# mknod -m 600 /dev/ttyS06 c 4 71
# mknod -m 600 /dev/ttyS07 c 4 72

and optionally execute:

# mknod -m 600 /dev/cua12 c 5 69
# mknod -m 600 /dev/cua13 c 5 70
# mknod -m 600 /dev/cua14 c 5 71
# mknod -m 600 /dev/cua15 c 5 72

With the nodes in place, this finishes off our installation
 
Multiport Support
NOTE: Multiport support is not necessary for your boards to operate properly. This may safely be skipped. It is only a performance tweak available for users with older systems. Newer PCs do not gain much performance from this tweak.

Check {log_path}
/messages again. Each serial port will have a line; all the ports on each board will be listed in sequence. An eight port board might look like:

ttyS4 at port 0x300 (irq = 5) is a ST16654
ttyS5 at port 0x308 (irq = 5) is a ST16654
ttyS6 at port 0x310 (irq = 5) is a ST16654
ttyS7 at port 0x318 (irq = 5) is a ST16654
ttyS8 at port 0x320 (irq = 5) is a ST16654
ttyS9 at port 0x328 (irq = 5) is a ST16654
ttyS10 at port 0x330 (irq = 5) is a ST16654
ttyS11 at port 0x338 (irq = 5) is a ST16654

"port" in the above listing is really short for "port address". To avoid confusion, I will refer to the port address as the "address" instead.

Your board will have a table of the port addresses in the manual that came with it. You will need to look up the address that the board has been configured for; the line will also tell you what address the status port is at.
{mask} is determined by the following table:
Number of ports       {mask}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffsetserial is used to inform the driver about the status port, in the following manner:
\\
# setserial
{port} set_multiport portX {status port address} maskX {mask} matchX 0x0
where {port}
is any one port on a given board (using the first port is usually the best way),
{status port address}
is the address of the status port as determined above,
{mask}
is the appropriate mask value for the board from the table above, and X is a multiport setting number between 1 and 4.

The multiport setting number will usually be 1, but can be other values. There may be other multiport settings on the irq that your board is using, set by other boards in your system, including other Connect Tech boards.
# setserial
{port} get_setserial
where {port}
is a port on a board that you are going to use the status port on, will reveal if there are other multiport settings in effect already. If so, take care to choose X to be the lowest empty setting number.

This needs be done only once per board that you wish to have the status port used on.

Example:
You have two boards installed, an 8 port and a 2 port. The ports on each board are:
ttyS4 at port 0x300 (irq = 5) is a ST16654
.
.
ttyS11 at port 0x338 (irq = 5) is a ST16654
ttyS12 at port 0x200 (irq = 10) is a ST16654
ttyS13 at port 0x208 (irq = 10) is a ST16654

Check to see if any other multiport settings are already in use:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0One multiport setting is already in use by another board.

This works on a per irq basis, so each irq that is used by a board needs to be checked:
# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0No multiport settings are in use.

The commands to enable use of the status port on each board would be:
# setserial /dev/ttyS4 set_multiport port2 0x340 mask2 0xff match2 0x00
# setserial /dev/ttyS12 set_multiport port1 0x240 mask1 0x03 match1 0x00

Check that the settings are in place:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x340, mask=0xff, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x240, mask=0x3, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# man setserial

may be of help also.
&nbsp;
RS-485 Line Modes Support
The utility set485 can be used to set the line mode interactively or from a startup script. Settings stick until changed or the system is rebooted.

The Linux header file ioctls.h now contains definitions for TIOCSER485GET and TIOCSER485SET. These ioctls can be used on Connect Tech 485 capable boards to set the line mode. The mode (passed as an integer) can be one of TIOCSER485FULLDUPLEX, TIOCSER485HALFDUPLEX or TIOCSER485SLAVEMULTIPLEX for full or half duplex or slave multidrop mode, respectively.
&nbsp;
The Linux 2.6 standard serial driver does not have advanced RS485 mode support as of yet. If you require this functionality please contactsupport@connecttech.comfor the latest status of patches available.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5832841</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3178948</id>
<property name="body"><![CDATA[h2. Overview

In 2007, the AUV operations group intends to port the AUV control software from QNX to Linux. We currently have 2 ARM boards that run Debian linux for development.

h2. Notes
[~oreilly] is interested in porting the IDL code to a Linux Corba ORB

[~brian] will be working on the port later this year.

Here's a list of [Missing Headers]

[~brent] has suggested that we use the same ARM-9 hardware as ESP for the AUV port. He has a Linux port that's designed to run headless, auto-connects to the network, boots fast, runs in 4 MB. (i.e. Talk to [~brent])]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113441</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670578</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
* [Driver Porting Details]&nbsp;
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to develop termios serial driver and validate 12 port serial card kernel driver.&nbsp;&nbsp;Tune hardware
* Recommend build-up of a test PC104 (Lippert board) + Xtreme104 12 port serial card with harddisk.

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;


h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.&nbsp;
\\
\\
\\
\\
&nbsp;

h4. \\


h3.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637828</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9404863</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* config out the audio support (kahlua)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
* 25 July 2008 - looks like there is a memory leak in the ashtec driver (based on the overnight test).
** download duma_2_5_14, untar and run 'make install'
** Modify linker command file to add \-lduma
** &nbsp;

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.
\\

Xtreme104 Serial Setup
\\

serial.conf looks like

mvc-debian4:/proc# cat /etc/serial.conf
/dev/ttyS1 uart 16450 port 0x2F8 irq 3

\#Xtreme card
\# Group A
/dev/ttyS2 uart 16850 port 0x380 irq 9&nbsp; baud_base 1500000
/dev/ttyS3 uart 16850 port 0x388 irq 9&nbsp; baud_base 1500000
/dev/ttyS4 uart 16850 port 0x390 irq 9&nbsp; baud_base 1500000
/dev/ttyS5 uart 16850 port 0x398 irq 9&nbsp; baud_base 1500000

\# Group B
/dev/ttyS6 uart 16850 port 0x300 irq 9&nbsp; baud_base 1500000
/dev/ttyS7 uart 16850 port 0x308 irq 9&nbsp; baud_base 1500000
/dev/ttyS8 uart 16850 port 0x310 irq 9&nbsp; baud_base 1500000
/dev/ttyS9 uart 16850 port 0x318 irq 9&nbsp; baud_base 1500000

\# Group C
/dev/ttyS10 uart 16850 port 0x150 irq 9 baud_base 1500000
/dev/ttyS11 uart 16850 port 0x158 irq 9 baud_base 1500000
/dev/ttyS12 uart 16850 port 0x160 irq 9 baud_base 1500000
/dev/ttyS13 uart 16850 port 0x168 irq 9 baud_base 1500000
&nbsp;
\\

mvc-debian4:/proc# cat /proc/interrupts
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU0
&nbsp; 0:&nbsp;&nbsp; 45634199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; timer
&nbsp; 1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; i8042
&nbsp; 2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; cascade
&nbsp; 6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; floppy
&nbsp; 7:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; parport0
&nbsp; 8:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; rtc
&nbsp; 9:&nbsp;&nbsp; 67591801&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; serial
&nbsp;11:&nbsp;&nbsp;&nbsp;&nbsp; 865812&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; eth0
&nbsp;14:&nbsp;&nbsp;&nbsp;&nbsp; 153327&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; ide0
NMI:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
LOC:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
ERR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
MIS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
mvc-debian4:/proc# setserial \-g /dev/ttyS5
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
mvc-debian4:/proc# setserial \-g /dev/ttyS\*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16450, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: 16850, Port: 0x0150, IRQ: 2
/dev/ttyS11, UART: 16850, Port: 0x0158, IRQ: 2
/dev/ttyS2, UART: 16850, Port: 0x0380, IRQ: 2
/dev/ttyS3, UART: 16850, Port: 0x0388, IRQ: 2
/dev/ttyS4, UART: 16850, Port: 0x0390, IRQ: 2
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
/dev/ttyS6, UART: 16850, Port: 0x0300, IRQ: 2
/dev/ttyS7, UART: 16850, Port: 0x0308, IRQ: 2
/dev/ttyS8, UART: 16850, Port: 0x0310, IRQ: 2
/dev/ttyS9, UART: 16850, Port: 0x0318, IRQ: 2
&nbsp;

&nbsp;mvc-debian4:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0150-0157 : serial
0158-015f : serial
01f0-01f7 : ide0
02f8-02ff : serial
0300-0307 : serial
0308-030f : serial
0310-0317 : serial
0318-031f : serial
0378-037a : parport0
037b-037f : parport0
0380-0387 : serial
0388-038f : serial
0390-0397 : serial
0398-039f : serial
03c0-03df : vga\+
03f2-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-03ff : serial
0cf8-0cff : PCI conf1
e000-e03f : 0000:00:11.0
&nbsp; e000-e03f : e100
f000-f00f : 0000:00:12.2
&nbsp; f000-f007 : ide0
&nbsp; f008-f00f : ide1
\\

h4. Useful Debian links

** www.google.com
** [http://www.debianhelp.org/]
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
**** create a file called 'startCorba'
***** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notificatino service.
***** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
***** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
***** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
**** make sure startCorba has execute permissions (chmod a+x startCorba)&nbsp;
**** Create a symbolic link using update-rc.d (Debian command)
***** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** edit */etc/dhcp3/dhclient.conf* to add the following line:
****** send host-name "foce2.shore.mbari.org"
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\
\\

Notes from ConnectTech Support site for Xtreme104 Isolated 12 port serial card
\\

&nbsp;Configuring the Kernel(2.6.x){color:black}The 2.6 kernel has support for the 8250/16650 UART in <src>/drivers/serial/8250.c. You should be able to run our ISA serial cards(Echo, DFlex, Xtreme/104) with this driver and the proper Kernel configuration.{color}{color:black}You'll need to edit your serial.h file in <src>/include/asm and add in the extra serial ports of the card.{color}{color:black}Here's what I added in red for a 4 port Xtreme/104 card at I/O 300 and IRQ 5. You can do the same with your card settings. If your card is using a higher clock than be sure to adjust your BAUD_BAUD value accordingly{color}

Base baud for CTI boards. Default Max Baud = 115200 bps

define CTI_BAUD (1843200 /16){color:black}define STD_SERIAL_PORT_DFNS{color}
{color:black}UARTCLKPORT{color}{color:black}IRQ FLAGS \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }

ttyS0
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }
ttyS1
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }
ttyS2
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM_FLAGS }
ttyS3
{ 0, CTI_BAUD, 0x300, 5, STD_COM_FLAGS }
ttyS4
{ 0, CTI_BAUD, 0x308, 5, STD_COM_FLAGS }
ttyS5
{ 0, CTI_BAUD, 0x310, 5, STD_COM_FLAGS }
ttyS6
{ 0, CTI_BAUD, 0x318, 5, STD_COM_FLAGS }
ttyS7
\\

If your board has a difference clock, be sure to change the CTI_BAUD value appropriately.
\\
\\
\\
\\
\\
\\
\\
\\
Re-Compiling the Kernel(Linux 2.6)
\\
\\
\*# cd
{Linux}*

At this point, you have a choice of two configuration utilities that you can use to configure your kernel. One utility, named config, is text based, and the other, named menuconfig, has a simple GUI (Graphical User Interface). The menuconfig utility is easier to use than config, so unless you have specific reasons use the menuconfig utility.

To use the menuconfig / config utility:

*\# make menuconfig*
Or
*\# make config* Once the configuration utility you choose is running, make sure that the following options are selected. Below shows the setting that must be enabled using the menuconfig and config utilities.

config: CONFIG_PCI
menuconfig: (Bus Options \-> PCI Support)\\

config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> 8250/16550 and compatible serial support)
 

config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Extended 8250/16550 serial driver options)

config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support more than 4 legacy serial ports)
 

config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support for sharing serial interrupts)

After all of the options have been checked and enabled, select exit. You will be prompted to save the new kernel configuration. Select yes. After you have finished configuring your kernel, issue the two following commands:

*\# make clean*
*\# make bzImage*
*\# make modules*
*\# make modules_install{*}Building/Installing the Kernel
NOTE: These instructions are for Red Hat standard installs. If you use a different distribution, or have set up your own system, these instructions will likely not help you. In that case please contact Connect Tech support at support@connecttech.com

Copy the kernel and system map to the boot partition:

The "make bzImage" step created the kernel in the subdirectory {Linux}
/arch//boot. If you don't know what CPU type you're using, you can find the new kernel by:
\\
# ls \-l
{Linux}/arch/*/boot/bzImage

The < cpu type > is the "*" part of the pathname of the newest kernel.
/arch//boot will be referenced by {arch}.

# cp {Linux}
/
{arch}
/bzImage /boot/vmlinuz-bh
# cp
{Linux}
/System.map /boot/System.map-bh

You may choose any postfix, \-df is a handy one. The postfix merely distinguishes between the kernel you've just built and other kernels already installed. It has no other purpose.
&nbsp;
Creating Nodes (Ports) For the Host Adapter
NOTE: Depending on your kernel distribution and configuration, nodes(ports) are often created automatically and you can skip this step. Check to see if they exist before proceeding.

Now that we have the new kernel in place capable of supporting the Blue Heat serial adapter we must create nodes, or ports, to allow the host adapter to communicate with other devices.

To begin, boot the new kernel. After the kernel has booted, open up the messages file using Vi, or your favorite text editor:
# vi
{log_path}/messages
Where {log_path}
is where the system logs are stored. Typically,
{log_path} = /var/log but this may be different in some distributions/systems.

Go to the bottom of the file and search backwards for references to "ttySxx" where xx is a number. You should see ttyS0 and ttyS1 for the standard serial ports, as well as a ttySxx entrie for each installed Echo/Dflex port. In order to use the new ports, these ttySxx entries must exist in the /dev directory. If they do not exist (they aren't created automatically, but do persist after reboots) you must make them with the following command:

# mknod -m [mode] /dev/ttySxx c 4 yy
[mode] is the file mode (permissions) you wish the device to have. 600 is often good.
xx is the number associated with the device which you have seen in the messages file.
yy is just xx + 64

You may also wish to make the corresponding cuaxx devices, but they are being phased out:

# mknod -m {mode} /dev/cuaxx c 5 yy
xx and yy should match the xx and yy from the previous mknod command

Here is an example of what you would do to add the nodes to your /dev directory:
First I opened the Vi editor and search for ttyS*. The results of the search show me that I have ttyS00 and ttyS01 (the standard serial ports) entries, as well as four other entries: ttyS05, ttyS06, ttyS07 and ttyS08. These four entries correspond to the four new ports for my CTI host adapter. (Right now, we are assuming a four-port card. You may have fewer or more ports, depending on the type of card you have). I've written down the four entries on a sheet of paper, seeing how my memory is a little short. Now I would like to make the nodes. From the command line, I type in the four following entries:

# mknod -m 600 /dev/ttyS05 c 4 69
# mknod -m 600 /dev/ttyS06 c 4 70
# mknod -m 600 /dev/ttyS06 c 4 71
# mknod -m 600 /dev/ttyS07 c 4 72

and optionally execute:

# mknod -m 600 /dev/cua12 c 5 69
# mknod -m 600 /dev/cua13 c 5 70
# mknod -m 600 /dev/cua14 c 5 71
# mknod -m 600 /dev/cua15 c 5 72

With the nodes in place, this finishes off our installation
 
Multiport Support
NOTE: Multiport support is not necessary for your boards to operate properly. This may safely be skipped. It is only a performance tweak available for users with older systems. Newer PCs do not gain much performance from this tweak.

Check {log_path}
/messages again. Each serial port will have a line; all the ports on each board will be listed in sequence. An eight port board might look like:

ttyS4 at port 0x300 (irq = 5) is a ST16654
ttyS5 at port 0x308 (irq = 5) is a ST16654
ttyS6 at port 0x310 (irq = 5) is a ST16654
ttyS7 at port 0x318 (irq = 5) is a ST16654
ttyS8 at port 0x320 (irq = 5) is a ST16654
ttyS9 at port 0x328 (irq = 5) is a ST16654
ttyS10 at port 0x330 (irq = 5) is a ST16654
ttyS11 at port 0x338 (irq = 5) is a ST16654

"port" in the above listing is really short for "port address". To avoid confusion, I will refer to the port address as the "address" instead.

Your board will have a table of the port addresses in the manual that came with it. You will need to look up the address that the board has been configured for; the line will also tell you what address the status port is at.
{mask} is determined by the following table:
Number of ports       {mask}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffsetserial is used to inform the driver about the status port, in the following manner:
\\
# setserial
{port} set_multiport portX {status port address} maskX {mask} matchX 0x0
where {port}
is any one port on a given board (using the first port is usually the best way),
{status port address}
is the address of the status port as determined above,
{mask}
is the appropriate mask value for the board from the table above, and X is a multiport setting number between 1 and 4.

The multiport setting number will usually be 1, but can be other values. There may be other multiport settings on the irq that your board is using, set by other boards in your system, including other Connect Tech boards.
# setserial
{port} get_setserial
where {port}
is a port on a board that you are going to use the status port on, will reveal if there are other multiport settings in effect already. If so, take care to choose X to be the lowest empty setting number.

This needs be done only once per board that you wish to have the status port used on.

Example:
You have two boards installed, an 8 port and a 2 port. The ports on each board are:
ttyS4 at port 0x300 (irq = 5) is a ST16654
.
.
ttyS11 at port 0x338 (irq = 5) is a ST16654
ttyS12 at port 0x200 (irq = 10) is a ST16654
ttyS13 at port 0x208 (irq = 10) is a ST16654

Check to see if any other multiport settings are already in use:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0One multiport setting is already in use by another board.

This works on a per irq basis, so each irq that is used by a board needs to be checked:
# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0No multiport settings are in use.

The commands to enable use of the status port on each board would be:
# setserial /dev/ttyS4 set_multiport port2 0x340 mask2 0xff match2 0x00
# setserial /dev/ttyS12 set_multiport port1 0x240 mask1 0x03 match1 0x00

Check that the settings are in place:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x340, mask=0xff, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x240, mask=0x3, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# man setserial

may be of help also.
&nbsp;
RS-485 Line Modes Support
The utility set485 can be used to set the line mode interactively or from a startup script. Settings stick until changed or the system is rebooted.

The Linux header file ioctls.h now contains definitions for TIOCSER485GET and TIOCSER485SET. These ioctls can be used on Connect Tech 485 capable boards to set the line mode. The mode (passed as an integer) can be one of TIOCSER485FULLDUPLEX, TIOCSER485HALFDUPLEX or TIOCSER485SLAVEMULTIPLEX for full or half duplex or slave multidrop mode, respectively.
&nbsp;
The Linux 2.6 standard serial driver does not have advanced RS485 mode support as of yet. If you require this functionality please contactsupport@connecttech.comfor the latest status of patches available.
\\
More stream of consciousness ramblings:

*OmniNotify v2.1 will not compile with the latest C+\+ offerings from GNU and Microsoft.*

Why?&nbsp; Because support for the header <iostream.h> has been removed.

It is replaced by <iostream> (without the .h) and requires use of namespaces to access.

A patch to v2.1 that fixes this is attached
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372118</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9404840</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
*  [TREX - installation] a quick guide on how to install and use TREX 
*  [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372094</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9404706</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup

\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come
\\

Build Server

No easy access to a DVD burner, went with net install from previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop+Standard configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.
\\

\\
apt-get install jam

apt-get install swig&nbsp; (libSystem fails to build)


\\
Plan for java: create a java specific to the auv-linux and auv-autonomy development and decouple from the debian system java:

Install in a named directory in opt, example: /opt/jdk_1.6u12

Future: Create a generic opt link to java, /opt/jdk as an optional means for multiple projects to point to the 'active java'

In the dorado1 user profile, set the environment variable to /opt/jdk_1.6u12 - explicit references is better for config management, IMHO. &nbsp;

Download jdk to /home/dorado1/tools/java
# At the terminal: Type:
*su*
# Enter the root password.
# Change to the directory in which you want to install and copy the java installer bin to this directory. Type:
*cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
# Change the permission of the bin&nbsp;file to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
# Verify that you have permission to execute the file. Type:
*ls \-l*
# Start the installation process.Type:

*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*

Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.
\\
\\

\\
&nbsp;

Software checkout:

cd /home/dorado1/prj&nbsp;

svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk TREX&nbsp;

copy Europa from threadfish (Yikes\! NASA version is moving ahead of TREX)
\\

Build failed (jam in TREX) due to missing boost regex loadable module.&nbsp;&nbsp;&nbsp; To resolve this, a debian package was installed (developer version) which is a bit of a sledge hammer.&nbsp;&nbsp; Need to determine of this is a standard component of the OS or a developer package specific to TREX (judged it to be an OS component)

apt-get install _libboost-regex-dev_

Build failed due to libSystem.so missing

Fix:&nbsp; add $PLASMA_HOME/lib to LD_LIBRARY_PATH

\\
&nbsp;

h4. Test Server

\\
\\
\\

For T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)

Intel 82551 ethernet (e100) device, not autoprobed by debian installer

Installed using net-install&nbsp;debian 4.0r3 and mirror with standard (not desktop like build server).

Note: there were several DVD read failures on the DVD media during the install which thru re-run (retry) in the installer were worked around.
\\

Generating Java proxy classes from .idl
idlj \-td /idlj InsIF.idl
com.sun.tools.corba.se.idl.InvalidArgument: Invalid argument:&nbsp; \-td.

Compiler Usage:

&nbsp;&nbsp;&nbsp; java com.sun.tools.corba.se.idl.toJavaPortable.Compile \[options\] <idl file>

where <idl file> is the name of a file containing IDL definitions, and
\[options\] is any combination of the options listed below.&nbsp; The options
are optional and may appear in any order; <idl file> is required and
must appear last.
&nbsp;

h4. T-Rex CheatSheet


h5. Directory structure :

For compiling/executing correctly TREX expects the following directory structure
<path>
auv-shared
auv-linux&nbsp;&nbsp;&nbsp;
auv (note: this is the auv-qnx directory and may be deprecated in the near future)
Europa
Europa/PLASMA
TREX
We will assume on the rest of the document that this structure is respected.
\\
\\
svn+ssh://

Initializing TREX environment variables:

The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
The compilation of TREX core libraries is done similarly
&nbsp;% cd $TREX_HOME
% jam
after that you can compile the binaries amc and sim
% cd ctd2007
% jam amc
% jam sim
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

Using TREX
TREX configuration files :
On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
amc.play.cfg: used to replay a mission for debugging purpose.
amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
&nbsp;vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :

<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
&nbsp;&nbsp;<Timeline name="vehicleState"&nbsp; command="0" />
&nbsp;<Timeline name="setpoint" class="Setpoint" command="1" />
&nbsp;<Timeline name="descend"&nbsp; class="Descend" command="1" />
&nbsp;<Timeline name="ascend"&nbsp;&nbsp; class="Ascend" command="1" />
&nbsp;<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
&nbsp;<Timeline name="getgps" class="GPS" command="1" />
&nbsp;<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>

remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
\*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
\*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

Note on AUV configuration files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that latitude and longitude&nbsp; on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
&nbsp;Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes depthn with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher
Starting AUV code for TREX
This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
On QNX
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer \[-v\] \[-sim\]
note:
\-v fro being verbose
\-sim when in simulation (ie not HW in the loop)&nbsp;

On Linux
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer \-proc <proc>.cfg \[-fastsim\]
note:
\-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
\-fastsim indicates to vcsServer that it will run into linux fast simulation&nbsp;
You can change how verbose auv-linux will be by editing log4cxx.cfg
Starting TREX in batch mode
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg \[-fast\|-sim\] \[<nstep>\]
note:
the argument order is fixed
\-fast indicates that the clock used would connect to auv-linux fast simulation clock
\-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
<nstep> indicates how much step TREX is allowed to do for deliberation&nbsp; at least on each tick&nbsp; when on \-fast or \-sim mode.
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
% cd $TREX_LOG_DIR
% tail \-F latest/TREX.log

Starting TREX in interactive mode
% cd $TREX_HOME
% sim_o_rt <mission> \[-sim\|-fast\] \[<nstep>\]
Options:
&nbsp;Q :\- Quit
&nbsp;N :\- Next
&nbsp;G :\- Goto <tick> e.g. g100
&nbsp;R :\- Reload Debug.cfg
&nbsp;\+ :\- enable pattern e.g. '+Agent'
&nbsp;\- :\- disable pattern e.g. '-Agent'
&nbsp;\! :\- disable all debug messages
>

You can see here that the command is quite similar to amc except&nbsp; that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick (n) , etc commands R/+/-/\! are used to manipulate how much data you want&nbsp; on the Debug.log starting from now.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9371957</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8388876</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup
\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come\\ \\

T-Rex PC104 Stack

http://sbc.winsystems.com/products/EPX-GX500.cfm

AMD Geode 500Mhz (1W)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356119</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8388911</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup

\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come
\\

Build Server

No easy access to a DVD burner, went with net install from previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.
\\

h3.


From a post on the subject of java install of jdk 1.6 on Debian Etch

cp \-p /etc/apt/sources.list /etc/apt/sources.list_backup

emacs /etc/apt/sources.list

And add the line:
deb http://www.backports.org/debian etch-backports main contrib non-free

Then install it with


aptitude update
aptitude \-t etch-backports install sun-java6-jdk

And select the new java version:

update-alternatives \--config java\\

Test Server

\\
&nbsp;

T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356158</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8388910</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup

\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come
\\

Build Server

No easy access to a DVD burner, went with net install from previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.\\ \\

Test Server

\\
&nbsp;

T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356157</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8388920</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup

\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come
\\

Build Server

No easy access to a DVD burner, went with net install from previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.
\\

h3.

From a post on the subject of java install of jdk 1.6 on Debian Etch

cp \-p /etc/apt/sources.list /etc/apt/sources.list_backup

emacs /etc/apt/sources.list

And add the line:
deb [http://www.backports.org/debian] etch-backports main contrib non-free

Then install it with

aptitude update
aptitude \-t etch-backports install sun-java6-jdk

And select the new java version:

update-alternatives \--config java
\\

Test Server

\\
&nbsp;

T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)\\

Generating Java proxy classes from .idl
idlj \-td /idlj InsIF.idl
com.sun.tools.corba.se.idl.InvalidArgument: Invalid argument:&nbsp; \-td.

Compiler Usage:

&nbsp;&nbsp;&nbsp; java com.sun.tools.corba.se.idl.toJavaPortable.Compile \[options\] <idl file>

where <idl file> is the name of a file containing IDL definitions, and
\[options\] is any combination of the options listed below.&nbsp; The options
are optional and may appear in any order; <idl file> is required and
must appear last.
&nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356167</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9404708</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* config out the audio support (kahlua)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
* 25 July 2008 - looks like there is a memory leak in the ashtec driver (based on the overnight test).
** download duma_2_5_14, untar and run 'make install'
** Modify linker command file to add \-lduma
** &nbsp;

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.
\\

Xtreme104 Serial Setup
\\

serial.conf looks like

mvc-debian4:/proc# cat /etc/serial.conf
/dev/ttyS1 uart 16450 port 0x2F8 irq 3

\#Xtreme card
\# Group A
/dev/ttyS2 uart 16850 port 0x380 irq 9&nbsp; baud_base 1500000
/dev/ttyS3 uart 16850 port 0x388 irq 9&nbsp; baud_base 1500000
/dev/ttyS4 uart 16850 port 0x390 irq 9&nbsp; baud_base 1500000
/dev/ttyS5 uart 16850 port 0x398 irq 9&nbsp; baud_base 1500000

\# Group B
/dev/ttyS6 uart 16850 port 0x300 irq 9&nbsp; baud_base 1500000
/dev/ttyS7 uart 16850 port 0x308 irq 9&nbsp; baud_base 1500000
/dev/ttyS8 uart 16850 port 0x310 irq 9&nbsp; baud_base 1500000
/dev/ttyS9 uart 16850 port 0x318 irq 9&nbsp; baud_base 1500000

\# Group C
/dev/ttyS10 uart 16850 port 0x150 irq 9 baud_base 1500000
/dev/ttyS11 uart 16850 port 0x158 irq 9 baud_base 1500000
/dev/ttyS12 uart 16850 port 0x160 irq 9 baud_base 1500000
/dev/ttyS13 uart 16850 port 0x168 irq 9 baud_base 1500000
&nbsp;
\\

mvc-debian4:/proc# cat /proc/interrupts
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU0
&nbsp; 0:&nbsp;&nbsp; 45634199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; timer
&nbsp; 1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; i8042
&nbsp; 2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; cascade
&nbsp; 6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; floppy
&nbsp; 7:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; parport0
&nbsp; 8:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; rtc
&nbsp; 9:&nbsp;&nbsp; 67591801&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; serial
&nbsp;11:&nbsp;&nbsp;&nbsp;&nbsp; 865812&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; eth0
&nbsp;14:&nbsp;&nbsp;&nbsp;&nbsp; 153327&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; ide0
NMI:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
LOC:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
ERR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
MIS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
mvc-debian4:/proc# setserial \-g /dev/ttyS5
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
mvc-debian4:/proc# setserial \-g /dev/ttyS\*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16450, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: 16850, Port: 0x0150, IRQ: 2
/dev/ttyS11, UART: 16850, Port: 0x0158, IRQ: 2
/dev/ttyS2, UART: 16850, Port: 0x0380, IRQ: 2
/dev/ttyS3, UART: 16850, Port: 0x0388, IRQ: 2
/dev/ttyS4, UART: 16850, Port: 0x0390, IRQ: 2
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
/dev/ttyS6, UART: 16850, Port: 0x0300, IRQ: 2
/dev/ttyS7, UART: 16850, Port: 0x0308, IRQ: 2
/dev/ttyS8, UART: 16850, Port: 0x0310, IRQ: 2
/dev/ttyS9, UART: 16850, Port: 0x0318, IRQ: 2
&nbsp;

&nbsp;mvc-debian4:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0150-0157 : serial
0158-015f : serial
01f0-01f7 : ide0
02f8-02ff : serial
0300-0307 : serial
0308-030f : serial
0310-0317 : serial
0318-031f : serial
0378-037a : parport0
037b-037f : parport0
0380-0387 : serial
0388-038f : serial
0390-0397 : serial
0398-039f : serial
03c0-03df : vga\+
03f2-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-03ff : serial
0cf8-0cff : PCI conf1
e000-e03f : 0000:00:11.0
&nbsp; e000-e03f : e100
f000-f00f : 0000:00:12.2
&nbsp; f000-f007 : ide0
&nbsp; f008-f00f : ide1
\\

h4. Useful Debian links

** www.google.com
** [http://www.debianhelp.org]
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
**** create a file called 'startCorba'
***** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notificatino service.
***** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
***** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
***** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
**** make sure startCorba has execute permissions (chmod a+x startCorba)&nbsp;
**** Create a symbolic link using update-rc.d (Debian command)
***** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\
\\

Notes from ConnectTech Support site for Xtreme104 Isolated 12 port serial card
\\

&nbsp;Configuring the Kernel(2.6.x){color:black}The 2.6 kernel has support for the 8250/16650 UART in <src>/drivers/serial/8250.c. You should be able to run our ISA serial cards(Echo, DFlex, Xtreme/104) with this driver and the proper Kernel configuration.{color}{color:black}You'll need to edit your serial.h file in <src>/include/asm and add in the extra serial ports of the card.{color}{color:black}Here's what I added in red for a 4 port Xtreme/104 card at I/O 300 and IRQ 5. You can do the same with your card settings. If your card is using a higher clock than be sure to adjust your BAUD_BAUD value accordingly{color}

/\* Base baud for CTI boards. Default Max Baud = 115200 bps \*/

define CTI_BAUD (1843200 /16){color:black}define STD_SERIAL_PORT_DFNS \{color}{color}{color:black}&nbsp;/\*{color} UARTCLKPORT{color:black}IRQ FLAGS \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS0 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS1 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS2 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS3 \*/ \{color}{color}

{ 0, CTI_BAUD, 0x300, 5, STD_COM_FLAGS }{color:black}, /\* ttyS4 \*/ \{}{color}
{ 0, CTI_BAUD, 0x308, 5, STD_COM_FLAGS }{color:red}, /\* ttyS5 \*/ \{}{color}
{ 0, CTI_BAUD, 0x310, 5, STD_COM_FLAGS }{color:red}, /\* ttyS6 \*/ \{}{color}
{ 0, CTI_BAUD, 0x318, 5, STD_COM_FLAGS }{color:red}, /\* ttyS7 \*/{color}
If your board has a difference clock, be sure to change the CTI_BAUD value appropriately.
\\
\\
\\
\\
\\
\\
\\
\\
Re-Compiling the Kernel(Linux 2.6)
\\

\*# cd
{Linux}*

At this point, you have a choice of two configuration utilities that you can use to configure your kernel. One utility, named config, is text based, and the other, named menuconfig, has a simple GUI (Graphical User Interface). The menuconfig utility is easier to use than config, so unless you have specific reasons use the menuconfig utility.

To use the menuconfig / config utility:

*\# make menuconfig*
Or
*\# make config* Once the configuration utility you choose is running, make sure that the following options are selected. Below shows the setting that must be enabled using the menuconfig and config utilities.

config: CONFIG_PCI
menuconfig: (Bus Options \-> PCI Support)\\

config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> 8250/16550 and compatible serial support)
 

config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Extended 8250/16550 serial driver options)

config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support more than 4 legacy serial ports)
 

config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support for sharing serial interrupts)

After all of the options have been checked and enabled, select exit. You will be prompted to save the new kernel configuration. Select yes. After you have finished configuring your kernel, issue the two following commands:

*\# make clean*
*\# make bzImage*
*\# make modules*
*\# make modules_install{*}Building/Installing the Kernel
NOTE: These instructions are for Red Hat standard installs. If you use a different distribution, or have set up your own system, these instructions will likely not help you. In that case please contact Connect Tech support at support@connecttech.com

Copy the kernel and system map to the boot partition:

The "make bzImage" step created the kernel in the subdirectory {Linux}
/arch//boot. If you don't know what CPU type you're using, you can find the new kernel by:
\\
# ls \-l
{Linux}/arch/*/boot/bzImage

The < cpu type > is the "*" part of the pathname of the newest kernel.
/arch//boot will be referenced by {arch}.

# cp {Linux}
/
{arch}
/bzImage /boot/vmlinuz-bh
# cp
{Linux}
/System.map /boot/System.map-bh

You may choose any postfix, \-df is a handy one. The postfix merely distinguishes between the kernel you've just built and other kernels already installed. It has no other purpose.
&nbsp;
Creating Nodes (Ports) For the Host Adapter
NOTE: Depending on your kernel distribution and configuration, nodes(ports) are often created automatically and you can skip this step. Check to see if they exist before proceeding.

Now that we have the new kernel in place capable of supporting the Blue Heat serial adapter we must create nodes, or ports, to allow the host adapter to communicate with other devices.

To begin, boot the new kernel. After the kernel has booted, open up the messages file using Vi, or your favorite text editor:
# vi
{log_path}/messages
Where {log_path}
is where the system logs are stored. Typically,
{log_path} = /var/log but this may be different in some distributions/systems.

Go to the bottom of the file and search backwards for references to "ttySxx" where xx is a number. You should see ttyS0 and ttyS1 for the standard serial ports, as well as a ttySxx entrie for each installed Echo/Dflex port. In order to use the new ports, these ttySxx entries must exist in the /dev directory. If they do not exist (they aren't created automatically, but do persist after reboots) you must make them with the following command:

# mknod -m [mode] /dev/ttySxx c 4 yy
[mode] is the file mode (permissions) you wish the device to have. 600 is often good.
xx is the number associated with the device which you have seen in the messages file.
yy is just xx + 64

You may also wish to make the corresponding cuaxx devices, but they are being phased out:

# mknod -m {mode} /dev/cuaxx c 5 yy
xx and yy should match the xx and yy from the previous mknod command

Here is an example of what you would do to add the nodes to your /dev directory:
First I opened the Vi editor and search for ttyS*. The results of the search show me that I have ttyS00 and ttyS01 (the standard serial ports) entries, as well as four other entries: ttyS05, ttyS06, ttyS07 and ttyS08. These four entries correspond to the four new ports for my CTI host adapter. (Right now, we are assuming a four-port card. You may have fewer or more ports, depending on the type of card you have). I've written down the four entries on a sheet of paper, seeing how my memory is a little short. Now I would like to make the nodes. From the command line, I type in the four following entries:

# mknod -m 600 /dev/ttyS05 c 4 69
# mknod -m 600 /dev/ttyS06 c 4 70
# mknod -m 600 /dev/ttyS06 c 4 71
# mknod -m 600 /dev/ttyS07 c 4 72

and optionally execute:

# mknod -m 600 /dev/cua12 c 5 69
# mknod -m 600 /dev/cua13 c 5 70
# mknod -m 600 /dev/cua14 c 5 71
# mknod -m 600 /dev/cua15 c 5 72

With the nodes in place, this finishes off our installation
 
Multiport Support
NOTE: Multiport support is not necessary for your boards to operate properly. This may safely be skipped. It is only a performance tweak available for users with older systems. Newer PCs do not gain much performance from this tweak.

Check {log_path}
/messages again. Each serial port will have a line; all the ports on each board will be listed in sequence. An eight port board might look like:

ttyS4 at port 0x300 (irq = 5) is a ST16654
ttyS5 at port 0x308 (irq = 5) is a ST16654
ttyS6 at port 0x310 (irq = 5) is a ST16654
ttyS7 at port 0x318 (irq = 5) is a ST16654
ttyS8 at port 0x320 (irq = 5) is a ST16654
ttyS9 at port 0x328 (irq = 5) is a ST16654
ttyS10 at port 0x330 (irq = 5) is a ST16654
ttyS11 at port 0x338 (irq = 5) is a ST16654

"port" in the above listing is really short for "port address". To avoid confusion, I will refer to the port address as the "address" instead.

Your board will have a table of the port addresses in the manual that came with it. You will need to look up the address that the board has been configured for; the line will also tell you what address the status port is at.
{mask} is determined by the following table:
Number of ports       {mask}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffsetserial is used to inform the driver about the status port, in the following manner:
\\
# setserial
{port} set_multiport portX {status port address} maskX {mask} matchX 0x0
where {port}
is any one port on a given board (using the first port is usually the best way),
{status port address}
is the address of the status port as determined above,
{mask}
is the appropriate mask value for the board from the table above, and X is a multiport setting number between 1 and 4.

The multiport setting number will usually be 1, but can be other values. There may be other multiport settings on the irq that your board is using, set by other boards in your system, including other Connect Tech boards.
# setserial
{port} get_setserial
where {port}
is a port on a board that you are going to use the status port on, will reveal if there are other multiport settings in effect already. If so, take care to choose X to be the lowest empty setting number.

This needs be done only once per board that you wish to have the status port used on.

Example:
You have two boards installed, an 8 port and a 2 port. The ports on each board are:
ttyS4 at port 0x300 (irq = 5) is a ST16654
.
.
ttyS11 at port 0x338 (irq = 5) is a ST16654
ttyS12 at port 0x200 (irq = 10) is a ST16654
ttyS13 at port 0x208 (irq = 10) is a ST16654

Check to see if any other multiport settings are already in use:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0One multiport setting is already in use by another board.

This works on a per irq basis, so each irq that is used by a board needs to be checked:
# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0No multiport settings are in use.

The commands to enable use of the status port on each board would be:
# setserial /dev/ttyS4 set_multiport port2 0x340 mask2 0xff match2 0x00
# setserial /dev/ttyS12 set_multiport port1 0x240 mask1 0x03 match1 0x00

Check that the settings are in place:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x340, mask=0xff, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x240, mask=0x3, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# man setserial

may be of help also.
&nbsp;
RS-485 Line Modes Support
The utility set485 can be used to set the line mode interactively or from a startup script. Settings stick until changed or the system is rebooted.

The Linux header file ioctls.h now contains definitions for TIOCSER485GET and TIOCSER485SET. These ioctls can be used on Connect Tech 485 capable boards to set the line mode. The mode (passed as an integer) can be one of TIOCSER485FULLDUPLEX, TIOCSER485HALFDUPLEX or TIOCSER485SLAVEMULTIPLEX for full or half duplex or slave multidrop mode, respectively.
&nbsp;
The Linux 2.6 standard serial driver does not have advanced RS485 mode support as of yet. If you require this functionality please contactsupport@connecttech.comfor the latest status of patches available.
\\
More stream of consciousness ramblings:

*OmniNotify v2.1 will not compile with the latest C+\+ offerings from GNU and Microsoft.*

Why?&nbsp; Because support for the header <iostream.h> has been removed.

It is replaced by <iostream> (without the .h) and requires use of namespaces to access.

A patch to v2.1 that fixes this is attached
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9371959</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11829493</id>
<property name="body"><![CDATA[\\

Open two terminal shells:\\

&nbsp;In Terminal 1
# telnet mvc-dmo1-rf (dorado1 user and pass)
# cd auv-qnx
# . configSrc
# echo $AUV (verify quv-qnx)
# qtalk \-m /dev/ser13
## \!a<enter>&nbsp;&nbsp; (to turn on TREX2 cpu)
## ctrl-a x&nbsp;&nbsp; (to exit)
# cd $AUV/bin
# < pause> and follow procedure in Terminal 2 below
# nohup ./vcsServer \-v &
# ps \-a&nbsp;
# Go to terminal 2 and launch amc_o_rt
# ps-a (after amc_o_rt starts, you should see the processes of auv-qnx spawned.
# to terminate by force:&nbsp;&nbsp; slay supervisor&nbsp;&nbsp; slay vcsServer\\

In Terminal 2
# slogin dorado1@trex2
# cd amc
# . config.amc
# cd mission
# cat init.cfg (check depth envelop, check mission time in seconds)
# <Pause and Go to Terminal 1 and launch vcsServer>
# nohup ../exec/amc_o_rt science4.cfg &
# cd \~/amc/log/latest
# tail \-f TREX.log&nbsp;&nbsp; ( it takes about 30 seconds or so to start and then lots of activity, should be no error or 'relax' in the stream of log messages)
# go to terminal 1
# to terminate by force:&nbsp;&nbsp; killall amc_o_rt]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11796736</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11829487</id>
<property name="body"><![CDATA[This page will refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09
* [Autonomy Deployment Log]

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [Monte-Carlo Testing guide|https://oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect
* [Autonomy Plans for 2010 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans10.pdf]
* [Decision Support for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/CANON.pdf]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11796730</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5407505</id>
<property name="body"><![CDATA[*Auv Driver Portnig Links*
* *[AUV Linux - Driver Port and Validation]*
* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
\\
\\

h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
*** July 9:&nbsp; Hans has made the docking vehicle available to finish the porting / validation.&nbsp;&nbsp; The 3dmgx1 is not on the vehicle, but rather the Crossbow DMU
**** The DMU baud rate can be changed per the following procedure:
**** 1. Start with the DMU connected to the serial interface, with your software set to the default baud rate of 38400.
**** 2. Send the ASCII character "b" (0x62 hex) to the DMU. In a terminal program&nbsp;like minicom simply type the letter "b". The DMU is case sensitive. The DMU will respond "B" (0x42 hex).
**** 3. Now change the baud rate of your terminal software.&nbsp;
**** 4. Send the ASCII character "a" (61 hex). The DMU will detect the character and automatically match the baud rate your software is using. Upon successful operation, the DMU will return the character "A" (0x41 hex) at the new baud rate.
**** 5. You can now use the DMU at the new baud rate. The new baud rate setting is not permanent; therefore, this process must be repeated after any power reset.
**** Sanity check the Crossbow\* *Command* *Query DMU Version,* *Character(s) Sent* v, *Response* ASCII string\* &nbsp;*Command* Query DMU Serial Number, *Character(s) Sent S*, *Response* Binary serial number data packet that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.
** Fixed a bug in checkChecksum.&nbsp;&nbsp; The struct overlay on the record was reading testPacket->Checksum as zero.&nbsp;&nbsp; There were two many castings, so rewrote the routine to operate directly on the char record - BUG FIXED.
\\
parosci \-&nbsp; Paroscientific pressure sensor
* devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
* ./parosci \-dev /dev/ttyS4
** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
* Actions:
** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
** Have obtained manual - parosci is unresponsive to serial commands via minicom
** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
*** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
*** No response to \*9900VR
*** No response to \*0100SN
** Write a simple serial program to make sure the correct byte string is sent to parosci.
*** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
** \*0100P3<0x0d><0x0a> responds with \*000116.02
** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
* Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
* With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
** &nbsp;Protocol Notes:
*** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
* Status (+)
** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
** Fixed bug in baud set
** Fixed bug in read serial number (sscanf and retries)
** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
*** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
sonardyne usbl
* No test executable available
\\
tailcone
* changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
* ./tailcone \-dev /dev/ttyS2
* Cautions:
** Recommend running tailcone tests while observing the tailcone
** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
* Status (/)
** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
Teledyne dvl - Doppler Velocity Log
* changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
* Actions
** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
*** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
*** In progress Reading up on termio and analyzing termio setup...
*** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
*** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
* Status (/)
** In progress...&nbsp;&nbsp;
** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
*** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
*** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
*** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
*** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
*** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
*** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
*** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
*** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
*** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\
h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}
\\
\\
\\
*Status details:*
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* \[9 July 2008\] Crossbow
Table 4. CrossBow AHRS300CA Data Packet Format
| Byte | VG Mode | Scaled Sensor Mode | Voltage Mode |
| 0 | Header (255) | Header (255) | Header (255) |
| 1 | Roll Angle (MSB) | Roll Angular Rate (MSB) | Roll Gyro Voltage (MSB) |
| 2 | Roll Angle (LSB) | Roll Angular Rate (LSB) | Roll Gyro Voltage (LSB) |
| 3 | Pitch Angle (MSB) | Pitch Angular Rate (MSB) | Pitch Gyro Voltage (MSB) |
| 4 | Pitch Angle (LSB) | Pitch Angular Rate (LSB) | Pitch Gyro Voltage (LSB) |
| 5 | Heading Angle (MSB) | Yaw Angular Rate (MSB) | Yaw Gyro Voltage (MSB) |
| 6 | Heading Angle (LSB) | Yaw Angular Rate (LSB) | Yaw Gyro Voltage (LSB) |
| 7 | Roll Angular Rate (MSB) | X-Axis Acceleration (MSB) | X-Axis Accel Voltage (MSB) |
| 8 | Roll Angular Rate (LSB) | X-Axis Acceleration (LSB) | X-Axis Accel Voltage (LSB) |
| 9 | Pitch Angular Rate (MSB) | Y-Axis Acceleration (MSB) | Y-Axis Accel Voltage (MSB) |
| 10 | Pitch Angular Rate (LSB) | Y-Axis Acceleration (LSB) | Y-Axis Accel Voltage (LSB) |
| 11 | Yaw Angular Rate (MSB) | Z-Axis Acceleration (MSB) | Z-Axis Accel Voltage (MSB) |
| 12 | Yaw Angular Rate (LSB) | Z-Axis Acceleration (LSB) | Z-Axis Accel Voltage (LSB) |
| 13 | X-Axis Acceleration (MSB) | X-Axis Magnetic Field (MSB) | X-Axis Mag Voltage (MSB) |
| 14 | X-Axis Acceleration (LSB) | X-Axis Magnetic Field (LSB) | X-Axis Mag Voltage (LSB) |
| 15 | Y-Axis Acceleration (MSB) | Y-Axis Magnetic Field (MSB) | Y-Axis Mag Voltage (MSB) |
| 16 | Y-Axis Acceleration (LSB) | Y-Axis Magnetic Field (LSB) | Y-Axis Mag Voltage (LSB) |
| 17 | Z-Axis Acceleration (MSB) | Z-Axis Magnetic Field (MSB) | Z-Axis Mag Voltage (MSB) |
| 18 | Z-Axis Acceleration (LSB) | Z-Axis Magnetic Field (LSB) | Z-Axis Mag Voltage (LSB) |
| 19 | X-Axis Magnetic Field (MSB) | Temp Sensor Voltage (MSB) | Temp Sensor Voltage (MSB) |
| 20 | X-Axis Magnetic Field (LSB) | Temp Sensor Voltage (LSB) | Temp Sensor Voltage (LSB) |
| 21 | Y-Axis Magnetic Field (MSB) | Time (MSB) | Time (MSB) |
| 22 | Y-Axis Magnetic Field (LSB) | Time (LSB) | Time (LSB) |
| 23 | Z-Axis Magnetic Field (MSB) | Checksum | Checksum |
| 24 | Z-Axis Magnetic Field (LSB) | | |
| 25 | Temp Sensor Voltage (MSB) | | |
| 26 | Temp Sensor Voltage (LSB) | | |
| 27 | Time (MSB) | | |
| 28 | Time (LSB) | | |
| 29 | Checksum | | |
*** \[Bug - build\] Top level build fails, though enough is built to enable&nbsp;driver development
*** \[Bug - major\] Fixed bug in 'checkChecksum that was blocking processRecord.&nbsp;&nbsp; Suspect unpacked data struct overly on serial byte stream (testPacket->checksum was zero, yet the proper checksum is in the 'record' byte buf).&nbsp;&nbsp; Changed checkChecksum to operate on byte stream with fixed offset for checksum location.
*** Output looks wrong after fixing checksum problem.
**** 12:58:35.140 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-119.51 : Y =&nbsp; \-27.96
12:58:36.144 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 157.52 : P = \-120.92 : Y =&nbsp;&nbsp; \-9.68
12:58:37.148 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 158.92 : P = \-120.92 : Y =&nbsp;&nbsp; 10.01
12:58:38.153 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 156.11 : P = \-123.73 : Y =&nbsp; \-36.40
12:58:39.156 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 160.33 : P =&nbsp; \-97.01 : Y =&nbsp; \-13.90
12:58:40.160 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 160.33 : P = \-105.45 : Y =&nbsp; \-16.71
12:58:41.164 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 158.92 : P = \-109.67 : Y =&nbsp;&nbsp; 14.23
12:58:42.168 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 163.14 : P = \-109.67 : Y =&nbsp; \-26.55
12:58:43.172 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 156.11 : P = \-111.07 : Y =&nbsp;&nbsp; 36.73
12:58:44.176 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 161.74 : P = \-109.67 : Y =&nbsp; \-40.62
12:58:45.180 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 160.33 : P = \-108.26 : Y =&nbsp;&nbsp; 32.51
12:58:46.184 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 161.74 : P = \-111.07 : Y =&nbsp;&nbsp; 50.79
12:58:47.184 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-111.07 : Y =&nbsp;&nbsp; 18.45

*** Here's the output&nbsp;additional debug (output of byte&nbsp;values)
**** 13:40:00.467 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=047a, HdgA=1d89
13:40:00.469 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 171.58 : P = \-167.32 : Y =&nbsp;&nbsp;&nbsp; 7.19
13:40:01.471 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0472, HdgA=1d86
13:40:01.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 160.33 : P = \-171.54 : Y =&nbsp;&nbsp;&nbsp; 1.57
13:40:02.471 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0475, HdgA=1d94
13:40:02.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp; \-84.22
13:40:03.476 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0475, HdgA=1d94
13:40:03.477 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp;&nbsp;&nbsp; 5.78
13:40:04.479 INFO \[Crossbow\] Hdr=ff, RolA=035d, PitA=0475, HdgA=1d89
13:40:04.481 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-167.32 : Y =&nbsp;&nbsp; \-5.47
13:40:05.483 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0475, HdgA=1d87
13:40:05.485 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-170.13 : Y =&nbsp;&nbsp; 17.03
13:40:06.488 INFO \[Crossbow\] Hdr=ff, RolA=035b, PitA=0476, HdgA=1d86
13:40:06.489 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 165.95 : P = \-171.54 : Y =&nbsp;&nbsp; \-5.47
13:40:07.492 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0477, HdgA=1d93
13:40:07.493 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 167.36 : P = \-153.26 : Y =&nbsp; \-11.09
13:40:08.488 INFO \[Crossbow\] Hdr=ff, RolA=035e, PitA=0473, HdgA=1d96
13:40:08.489 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 161.74 : P = \-149.04 : Y =&nbsp; \-27.97
13:40:09.492 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0478, HdgA=1d8a
13:40:09.493 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 168.77 : P = \-165.92 : Y =&nbsp;&nbsp; 25.47
13:40:10.492 INFO \[Crossbow\] Hdr=ff, RolA=035d, PitA=0474, HdgA=1d89
13:40:10.493 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 163.14 : P = \-167.32 : Y =&nbsp; \-70.15
13:40:11.494 INFO \[Crossbow\] Hdr=ff, RolA=035b, PitA=0478, HdgA=1d86
13:40:11.496 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 168.77 : P = \-171.54 : Y =&nbsp; \-23.75
13:40:12.497 INFO \[Crossbow\] Hdr=ff, RolA=035e, PitA=0475, HdgA=1d94
13:40:12.498 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp; \-15.31
13:40:13.500 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0477, HdgA=1d8f
13:40:13.501 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 167.36 : P = \-158.88 : Y =&nbsp;&nbsp; 11.41
13:40:14.504 INFO \[Crossbow\] Hdr=ff, RolA=035b, PitA=0477, HdgA=1d91
13:40:14.505 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 167.36 : P = \-156.07 : Y =&nbsp;&nbsp;&nbsp; 1.57
13:40:15.508 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0474, HdgA=1d8e
13:40:15.509 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 163.14 : P = \-160.29 : Y =&nbsp;&nbsp; \-1.25
13:40:16.512 INFO \[Crossbow\] Hdr=ff, RolA=035b, PitA=0473, HdgA=1d8e
13:40:16.513 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 161.74 : P = \-160.29 : Y =&nbsp; \-65.93
13:40:17.516 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0477, HdgA=1d8f
13:40:17.517 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 167.36 : P = \-158.88 : Y =&nbsp;&nbsp; 21.25
13:40:18.512 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=0476, HdgA=1d8f
13:40:18.513 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 165.95 : P = \-158.88 : Y =&nbsp;&nbsp; \-9.68
13:40:19.516 INFO \[Crossbow\] Hdr=ff, RolA=035b, PitA=0476, HdgA=1d92
13:40:19.517 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 165.95 : P = \-154.67 : Y =&nbsp;&nbsp; 57.82
13:40:20.516 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0477, HdgA=1d8e
13:40:20.517 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 167.36 : P = \-160.29 : Y =&nbsp;&nbsp;&nbsp; 5.78
13:40:21.520 INFO \[Crossbow\] Hdr=ff, RolA=035f, PitA=0478, HdgA=1d8e
13:40:21.521 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 168.77 : P = \-160.29 : Y =&nbsp; \-15.31
13:40:22.524 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=0476, HdgA=1d8f
13:40:22.525 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 165.95 : P = \-158.88 : Y =&nbsp; \-13.90
13:40:23.528 INFO \[Crossbow\] Hdr=ff, RolA=035b, PitA=047a, HdgA=1d90
13:40:23.529 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 171.58 : P = \-157.48 : Y =&nbsp;&nbsp; 35.32
13:40:24.532 INFO \[Crossbow\] Hdr=ff, RolA=035e, PitA=0477, HdgA=1d94
13:40:24.533 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 167.36 : P = \-151.85 : Y =&nbsp;&nbsp;&nbsp; 5.78
13:40:25.536 INFO \[Crossbow\] Hdr=ff, RolA=035b, PitA=047a, HdgA=1d93
13:40:25.537 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 171.58 : P = \-153.26 : Y =&nbsp; \-13.90
13:40:26.540 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0475, HdgA=1d93
13:40:26.541 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-153.26 : Y =&nbsp;&nbsp; 25.47
13:40:27.544 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0477, HdgA=1d94
13:40:27.545 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 167.36 : P = \-151.85 : Y =&nbsp;&nbsp; 45.16
13:40:28.548 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0479, HdgA=1d92
13:40:28.549 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 170.17 : P = \-154.67 : Y =&nbsp; \-23.75
13:40:29.552 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0478, HdgA=1d93
13:40:29.553 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 168.77 : P = \-153.26 : Y =&nbsp;&nbsp; 11.41
13:40:30.556 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=0479, HdgA=1d93
13:40:30.557 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 170.17 : P = \-153.26 : Y =&nbsp; \-57.50
13:40:31.560 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0474, HdgA=1d92
13:40:31.561 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 163.14 : P = \-154.67 : Y =&nbsp;&nbsp; 25.47
13:40:32.564 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=047a, HdgA=1d96
13:40:32.565 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 171.58 : P = \-149.04 : Y =&nbsp; \-19.53

&nbsp;
** \[Bug - minor\] Serial number is read incorrectly
*** 12:54:51.390 INFO \[Crossbow\] Serial Number: ff000043
*** 12:54:51.393 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 4278190147 (ff000043)&nbsp; <<-\- 4278190147 looks incorrect.
*** According to the Manual: &nbsp;* The DMU will respond with a serial number datapacket that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.&nbsp; The serial number bytes should be interpreted as a 32-bit unsigned integer. For example, the serial number 9911750 would be sent as the four bytes 00 97 3D C6.
* &nbsp;
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00

E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080

007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF468

19F04C10088000000000000000000000000010A0031004400008000800080008000800080008000800

08000800080008000800080008000800080008000800080008000800080008000800080008000800080

00800080008000800080008000800080008000800080008000800080008000800080008000800080008

00080008000800080008000800080008000800080008000800080008000800080008000800080008000

80008000800080008000800080008000800080008000800080008000800080008000800080008000800

080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C06

0E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090

306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F45393

5362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B

2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B

2625272B2625272B2625282B2625282B00046400000000006400000064000000640000006400000064

00000064000000640000006400000064000000640000006400000064000000640000006400000064000

00064000000640000006400000064000000640000006400000064000000640000006400000601000000

DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A

0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5374775</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5407503</id>
<property name="body"><![CDATA[*Auv Driver Portnig Links*
* *[AUV Linux - Driver Port and Validation]*
* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
\\
\\

h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
*** July 9:&nbsp; Hans has made the docking vehicle available to finish the porting / validation.&nbsp;&nbsp; The 3dmgx1 is not on the vehicle, but rather the Crossbow DMU
**** The DMU baud rate can be changed per the following procedure:
**** 1. Start with the DMU connected to the serial interface, with your software set to the default baud rate of 38400.
**** 2. Send the ASCII character "b" (0x62 hex) to the DMU. In a terminal program&nbsp;like minicom simply type the letter "b". The DMU is case sensitive. The DMU will respond "B" (0x42 hex).
**** 3. Now change the baud rate of your terminal software.&nbsp;
**** 4. Send the ASCII character "a" (61 hex). The DMU will detect the character and automatically match the baud rate your software is using. Upon successful operation, the DMU will return the character "A" (0x41 hex) at the new baud rate.
**** 5. You can now use the DMU at the new baud rate. The new baud rate setting is not permanent; therefore, this process must be repeated after any power reset.
**** Sanity check the Crossbow* *Command* *Query DMU Version,* *Character(s) Sent* v, *Response* ASCII string* &nbsp;*Command* Query DMU Serial Number, *Character(s) Sent S*, *Response* Binary serial number data packet that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.
** Fixed a bug in checkChecksum.&nbsp;&nbsp; The struct overlay on the record was reading testPacket->Checksum as zero.&nbsp;&nbsp; There were two many castings, so rewrote the routine to operate directly on the char record - BUG FIXED.
\\
 parosci \-&nbsp; Paroscientific pressure sensor
* devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
* ./parosci \-dev /dev/ttyS4
** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
* Actions:
** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
** Have obtained manual - parosci is unresponsive to serial commands via minicom
** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
*** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
*** No response to \*9900VR
*** No response to \*0100SN
** Write a simple serial program to make sure the correct byte string is sent to parosci.
*** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
** \*0100P3<0x0d><0x0a> responds with \*000116.02
** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
* Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
* With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
** &nbsp;Protocol Notes:
*** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
 * Status (+)
** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
** Fixed bug in baud set
** Fixed bug in read serial number (sscanf and retries)
** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
*** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
 sonardyne usbl
* No test executable available
\\
 tailcone
* changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
* ./tailcone \-dev /dev/ttyS2
* Cautions:
** Recommend running tailcone tests while observing the tailcone
** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
* Status (/)
** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
 Teledyne dvl - Doppler Velocity Log
* changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
* Actions
** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
*** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
*** In progress Reading up on termio and analyzing termio setup...
*** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
*** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
* Status (/)
** In progress...&nbsp;&nbsp;
** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
*** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
*** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
*** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
*** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
*** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
*** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
*** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
*** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
*** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\
h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}
\\
\\
\\
*Status details:*
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00

E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080

007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF468

19F04C10088000000000000000000000000010A0031004400008000800080008000800080008000800

08000800080008000800080008000800080008000800080008000800080008000800080008000800080

00800080008000800080008000800080008000800080008000800080008000800080008000800080008

00080008000800080008000800080008000800080008000800080008000800080008000800080008000

80008000800080008000800080008000800080008000800080008000800080008000800080008000800

080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C06

0E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090

306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F45393

5362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B

2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B

2625272B2625272B2625282B2625282B00046400000000006400000064000000640000006400000064

00000064000000640000006400000064000000640000006400000064000000640000006400000064000

00064000000640000006400000064000000640000006400000064000000640000006400000601000000

DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A

0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5374773</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8388976</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup

\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come
\\

Build Server

No easy access to a DVD burner, went with net install from previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop+Standard configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.
\\

h3.

From a post on the subject of java install of jdk 1.6 on Debian Etch

cp \-p /etc/apt/sources.list /etc/apt/sources.list_backup

emacs /etc/apt/sources.list

And add the line:
deb [http://www.backports.org/debian] etch-backports main contrib non-free

Then install it with

aptitude update
aptitude \-t etch-backports install sun-java6-jdk

And select the new java version:

update-alternatives \--config java
\\

Test Server

\\
&nbsp;

T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)

Intel 82551 ethernet (e100) device, not autoprobed by debian installer

Installed using net-install&nbsp;debian 4.0r3 and mirror with standard (not desktop like build server).

Note: there were several DVD read failures on the DVD media during the install which thru re-run (retry) in the installer were worked around.
\\

Generating Java proxy classes from .idl
idlj \-td /idlj InsIF.idl
com.sun.tools.corba.se.idl.InvalidArgument: Invalid argument:&nbsp; \-td.

Compiler Usage:

&nbsp;&nbsp;&nbsp; java com.sun.tools.corba.se.idl.toJavaPortable.Compile \[options\] <idl file>

where <idl file> is the name of a file containing IDL definitions, and
\[options\] is any combination of the options listed below.&nbsp; The options
are optional and may appear in any order; <idl file> is required and
must appear last.
&nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8356230</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9404785</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* config out the audio support (kahlua)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
* 25 July 2008 - looks like there is a memory leak in the ashtec driver (based on the overnight test).
** download duma_2_5_14, untar and run 'make install'
** Modify linker command file to add \-lduma
** &nbsp;

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.
\\

Xtreme104 Serial Setup
\\

serial.conf looks like

mvc-debian4:/proc# cat /etc/serial.conf
/dev/ttyS1 uart 16450 port 0x2F8 irq 3

\#Xtreme card
\# Group A
/dev/ttyS2 uart 16850 port 0x380 irq 9&nbsp; baud_base 1500000
/dev/ttyS3 uart 16850 port 0x388 irq 9&nbsp; baud_base 1500000
/dev/ttyS4 uart 16850 port 0x390 irq 9&nbsp; baud_base 1500000
/dev/ttyS5 uart 16850 port 0x398 irq 9&nbsp; baud_base 1500000

\# Group B
/dev/ttyS6 uart 16850 port 0x300 irq 9&nbsp; baud_base 1500000
/dev/ttyS7 uart 16850 port 0x308 irq 9&nbsp; baud_base 1500000
/dev/ttyS8 uart 16850 port 0x310 irq 9&nbsp; baud_base 1500000
/dev/ttyS9 uart 16850 port 0x318 irq 9&nbsp; baud_base 1500000

\# Group C
/dev/ttyS10 uart 16850 port 0x150 irq 9 baud_base 1500000
/dev/ttyS11 uart 16850 port 0x158 irq 9 baud_base 1500000
/dev/ttyS12 uart 16850 port 0x160 irq 9 baud_base 1500000
/dev/ttyS13 uart 16850 port 0x168 irq 9 baud_base 1500000
&nbsp;
\\

mvc-debian4:/proc# cat /proc/interrupts
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU0
&nbsp; 0:&nbsp;&nbsp; 45634199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; timer
&nbsp; 1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; i8042
&nbsp; 2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; cascade
&nbsp; 6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; floppy
&nbsp; 7:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; parport0
&nbsp; 8:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; rtc
&nbsp; 9:&nbsp;&nbsp; 67591801&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; serial
&nbsp;11:&nbsp;&nbsp;&nbsp;&nbsp; 865812&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; eth0
&nbsp;14:&nbsp;&nbsp;&nbsp;&nbsp; 153327&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; ide0
NMI:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
LOC:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
ERR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
MIS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
mvc-debian4:/proc# setserial \-g /dev/ttyS5
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
mvc-debian4:/proc# setserial \-g /dev/ttyS\*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16450, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: 16850, Port: 0x0150, IRQ: 2
/dev/ttyS11, UART: 16850, Port: 0x0158, IRQ: 2
/dev/ttyS2, UART: 16850, Port: 0x0380, IRQ: 2
/dev/ttyS3, UART: 16850, Port: 0x0388, IRQ: 2
/dev/ttyS4, UART: 16850, Port: 0x0390, IRQ: 2
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
/dev/ttyS6, UART: 16850, Port: 0x0300, IRQ: 2
/dev/ttyS7, UART: 16850, Port: 0x0308, IRQ: 2
/dev/ttyS8, UART: 16850, Port: 0x0310, IRQ: 2
/dev/ttyS9, UART: 16850, Port: 0x0318, IRQ: 2
&nbsp;

&nbsp;mvc-debian4:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0150-0157 : serial
0158-015f : serial
01f0-01f7 : ide0
02f8-02ff : serial
0300-0307 : serial
0308-030f : serial
0310-0317 : serial
0318-031f : serial
0378-037a : parport0
037b-037f : parport0
0380-0387 : serial
0388-038f : serial
0390-0397 : serial
0398-039f : serial
03c0-03df : vga\+
03f2-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-03ff : serial
0cf8-0cff : PCI conf1
e000-e03f : 0000:00:11.0
&nbsp; e000-e03f : e100
f000-f00f : 0000:00:12.2
&nbsp; f000-f007 : ide0
&nbsp; f008-f00f : ide1
\\

h4. Useful Debian links

** www.google.com
** [http://www.debianhelp.org]
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
**** create a file called 'startCorba'
***** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notificatino service.
***** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
***** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
***** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
**** make sure startCorba has execute permissions (chmod a+x startCorba)&nbsp;
**** Create a symbolic link using update-rc.d (Debian command)
***** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** edit */etc/dhcp3/dhclient.conf* to add the following line:
****** send host-name "foce2.shore.mbari.org"
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\
\\

Notes from ConnectTech Support site for Xtreme104 Isolated 12 port serial card
\\

&nbsp;Configuring the Kernel(2.6.x){color:black}The 2.6 kernel has support for the 8250/16650 UART in <src>/drivers/serial/8250.c. You should be able to run our ISA serial cards(Echo, DFlex, Xtreme/104) with this driver and the proper Kernel configuration.{color}{color:black}You'll need to edit your serial.h file in <src>/include/asm and add in the extra serial ports of the card.{color}{color:black}Here's what I added in red for a 4 port Xtreme/104 card at I/O 300 and IRQ 5. You can do the same with your card settings. If your card is using a higher clock than be sure to adjust your BAUD_BAUD value accordingly{color}

/\* Base baud for CTI boards. Default Max Baud = 115200 bps \*/

define CTI_BAUD (1843200 /16){color:black}define STD_SERIAL_PORT_DFNS \{color}{color}{color:black}&nbsp;/\*{color} UARTCLKPORT{color:black}IRQ FLAGS \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS0 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS1 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS2 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS3 \*/ \{color}{color}

{ 0, CTI_BAUD, 0x300, 5, STD_COM_FLAGS }{color:black}, /\* ttyS4 \*/ \{}{color}
{ 0, CTI_BAUD, 0x308, 5, STD_COM_FLAGS }{color:red}, /\* ttyS5 \*/ \{}{color}
{ 0, CTI_BAUD, 0x310, 5, STD_COM_FLAGS }{color:red}, /\* ttyS6 \*/ \{}{color}
{ 0, CTI_BAUD, 0x318, 5, STD_COM_FLAGS }{color:red}, /\* ttyS7 \*/{color}
If your board has a difference clock, be sure to change the CTI_BAUD value appropriately.
\\
\\
\\
\\
\\
\\
\\
\\
Re-Compiling the Kernel(Linux 2.6)
\\
\\

\*# cd
{Linux}*

At this point, you have a choice of two configuration utilities that you can use to configure your kernel. One utility, named config, is text based, and the other, named menuconfig, has a simple GUI (Graphical User Interface). The menuconfig utility is easier to use than config, so unless you have specific reasons use the menuconfig utility.

To use the menuconfig / config utility:

*\# make menuconfig*
Or
*\# make config* Once the configuration utility you choose is running, make sure that the following options are selected. Below shows the setting that must be enabled using the menuconfig and config utilities.

config: CONFIG_PCI
menuconfig: (Bus Options \-> PCI Support)\\

config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> 8250/16550 and compatible serial support)
 

config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Extended 8250/16550 serial driver options)

config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support more than 4 legacy serial ports)
 

config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support for sharing serial interrupts)

After all of the options have been checked and enabled, select exit. You will be prompted to save the new kernel configuration. Select yes. After you have finished configuring your kernel, issue the two following commands:

*\# make clean*
*\# make bzImage*
*\# make modules*
*\# make modules_install{*}Building/Installing the Kernel
NOTE: These instructions are for Red Hat standard installs. If you use a different distribution, or have set up your own system, these instructions will likely not help you. In that case please contact Connect Tech support at support@connecttech.com

Copy the kernel and system map to the boot partition:

The "make bzImage" step created the kernel in the subdirectory {Linux}
/arch//boot. If you don't know what CPU type you're using, you can find the new kernel by:
\\
# ls \-l
{Linux}/arch/*/boot/bzImage

The < cpu type > is the "*" part of the pathname of the newest kernel.
/arch//boot will be referenced by {arch}.

# cp {Linux}
/
{arch}
/bzImage /boot/vmlinuz-bh
# cp
{Linux}
/System.map /boot/System.map-bh

You may choose any postfix, \-df is a handy one. The postfix merely distinguishes between the kernel you've just built and other kernels already installed. It has no other purpose.
&nbsp;
Creating Nodes (Ports) For the Host Adapter
NOTE: Depending on your kernel distribution and configuration, nodes(ports) are often created automatically and you can skip this step. Check to see if they exist before proceeding.

Now that we have the new kernel in place capable of supporting the Blue Heat serial adapter we must create nodes, or ports, to allow the host adapter to communicate with other devices.

To begin, boot the new kernel. After the kernel has booted, open up the messages file using Vi, or your favorite text editor:
# vi
{log_path}/messages
Where {log_path}
is where the system logs are stored. Typically,
{log_path} = /var/log but this may be different in some distributions/systems.

Go to the bottom of the file and search backwards for references to "ttySxx" where xx is a number. You should see ttyS0 and ttyS1 for the standard serial ports, as well as a ttySxx entrie for each installed Echo/Dflex port. In order to use the new ports, these ttySxx entries must exist in the /dev directory. If they do not exist (they aren't created automatically, but do persist after reboots) you must make them with the following command:

# mknod -m [mode] /dev/ttySxx c 4 yy
[mode] is the file mode (permissions) you wish the device to have. 600 is often good.
xx is the number associated with the device which you have seen in the messages file.
yy is just xx + 64

You may also wish to make the corresponding cuaxx devices, but they are being phased out:

# mknod -m {mode} /dev/cuaxx c 5 yy
xx and yy should match the xx and yy from the previous mknod command

Here is an example of what you would do to add the nodes to your /dev directory:
First I opened the Vi editor and search for ttyS*. The results of the search show me that I have ttyS00 and ttyS01 (the standard serial ports) entries, as well as four other entries: ttyS05, ttyS06, ttyS07 and ttyS08. These four entries correspond to the four new ports for my CTI host adapter. (Right now, we are assuming a four-port card. You may have fewer or more ports, depending on the type of card you have). I've written down the four entries on a sheet of paper, seeing how my memory is a little short. Now I would like to make the nodes. From the command line, I type in the four following entries:

# mknod -m 600 /dev/ttyS05 c 4 69
# mknod -m 600 /dev/ttyS06 c 4 70
# mknod -m 600 /dev/ttyS06 c 4 71
# mknod -m 600 /dev/ttyS07 c 4 72

and optionally execute:

# mknod -m 600 /dev/cua12 c 5 69
# mknod -m 600 /dev/cua13 c 5 70
# mknod -m 600 /dev/cua14 c 5 71
# mknod -m 600 /dev/cua15 c 5 72

With the nodes in place, this finishes off our installation
 
Multiport Support
NOTE: Multiport support is not necessary for your boards to operate properly. This may safely be skipped. It is only a performance tweak available for users with older systems. Newer PCs do not gain much performance from this tweak.

Check {log_path}
/messages again. Each serial port will have a line; all the ports on each board will be listed in sequence. An eight port board might look like:

ttyS4 at port 0x300 (irq = 5) is a ST16654
ttyS5 at port 0x308 (irq = 5) is a ST16654
ttyS6 at port 0x310 (irq = 5) is a ST16654
ttyS7 at port 0x318 (irq = 5) is a ST16654
ttyS8 at port 0x320 (irq = 5) is a ST16654
ttyS9 at port 0x328 (irq = 5) is a ST16654
ttyS10 at port 0x330 (irq = 5) is a ST16654
ttyS11 at port 0x338 (irq = 5) is a ST16654

"port" in the above listing is really short for "port address". To avoid confusion, I will refer to the port address as the "address" instead.

Your board will have a table of the port addresses in the manual that came with it. You will need to look up the address that the board has been configured for; the line will also tell you what address the status port is at.
{mask} is determined by the following table:
Number of ports       {mask}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffsetserial is used to inform the driver about the status port, in the following manner:
\\
# setserial
{port} set_multiport portX {status port address} maskX {mask} matchX 0x0
where {port}
is any one port on a given board (using the first port is usually the best way),
{status port address}
is the address of the status port as determined above,
{mask}
is the appropriate mask value for the board from the table above, and X is a multiport setting number between 1 and 4.

The multiport setting number will usually be 1, but can be other values. There may be other multiport settings on the irq that your board is using, set by other boards in your system, including other Connect Tech boards.
# setserial
{port} get_setserial
where {port}
is a port on a board that you are going to use the status port on, will reveal if there are other multiport settings in effect already. If so, take care to choose X to be the lowest empty setting number.

This needs be done only once per board that you wish to have the status port used on.

Example:
You have two boards installed, an 8 port and a 2 port. The ports on each board are:
ttyS4 at port 0x300 (irq = 5) is a ST16654
.
.
ttyS11 at port 0x338 (irq = 5) is a ST16654
ttyS12 at port 0x200 (irq = 10) is a ST16654
ttyS13 at port 0x208 (irq = 10) is a ST16654

Check to see if any other multiport settings are already in use:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0One multiport setting is already in use by another board.

This works on a per irq basis, so each irq that is used by a board needs to be checked:
# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0No multiport settings are in use.

The commands to enable use of the status port on each board would be:
# setserial /dev/ttyS4 set_multiport port2 0x340 mask2 0xff match2 0x00
# setserial /dev/ttyS12 set_multiport port1 0x240 mask1 0x03 match1 0x00

Check that the settings are in place:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x340, mask=0xff, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x240, mask=0x3, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# man setserial

may be of help also.
&nbsp;
RS-485 Line Modes Support
The utility set485 can be used to set the line mode interactively or from a startup script. Settings stick until changed or the system is rebooted.

The Linux header file ioctls.h now contains definitions for TIOCSER485GET and TIOCSER485SET. These ioctls can be used on Connect Tech 485 capable boards to set the line mode. The mode (passed as an integer) can be one of TIOCSER485FULLDUPLEX, TIOCSER485HALFDUPLEX or TIOCSER485SLAVEMULTIPLEX for full or half duplex or slave multidrop mode, respectively.
&nbsp;
The Linux 2.6 standard serial driver does not have advanced RS485 mode support as of yet. If you require this functionality please contactsupport@connecttech.comfor the latest status of patches available.
\\
More stream of consciousness ramblings:

*OmniNotify v2.1 will not compile with the latest C+\+ offerings from GNU and Microsoft.*

Why?&nbsp; Because support for the header <iostream.h> has been removed.

It is replaced by <iostream> (without the .h) and requires use of namespaces to access.

A patch to v2.1 that fixes this is attached
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372039</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5407509</id>
<property name="body"><![CDATA[*Auv Driver Portnig Links*
* *[AUV Linux - Driver Port and Validation]*
* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
\\
\\

h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
*** July 9:&nbsp; Hans has made the docking vehicle available to finish the porting / validation.&nbsp;&nbsp; The 3dmgx1 is not on the vehicle, but rather the Crossbow DMU
**** The DMU baud rate can be changed per the following procedure:
**** 1. Start with the DMU connected to the serial interface, with your software set to the default baud rate of 38400.
**** 2. Send the ASCII character "b" (0x62 hex) to the DMU. In a terminal program&nbsp;like minicom simply type the letter "b". The DMU is case sensitive. The DMU will respond "B" (0x42 hex).
**** 3. Now change the baud rate of your terminal software.&nbsp;
**** 4. Send the ASCII character "a" (61 hex). The DMU will detect the character and automatically match the baud rate your software is using. Upon successful operation, the DMU will return the character "A" (0x41 hex) at the new baud rate.
**** 5. You can now use the DMU at the new baud rate. The new baud rate setting is not permanent; therefore, this process must be repeated after any power reset.
**** Sanity check the Crossbow\* *Command* *Query DMU Version,* *Character(s) Sent* v, *Response* ASCII string\* &nbsp;*Command* Query DMU Serial Number, *Character(s) Sent S*, *Response* Binary serial number data packet that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.
** Fixed a bug in checkChecksum.&nbsp;&nbsp; The struct overlay on the record was reading testPacket->Checksum as zero.&nbsp;&nbsp; There were two many castings, so rewrote the routine to operate directly on the char record - BUG FIXED.
\\
parosci \-&nbsp; Paroscientific pressure sensor
* devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
* ./parosci \-dev /dev/ttyS4
** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
* Actions:
** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
** Have obtained manual - parosci is unresponsive to serial commands via minicom
** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
*** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
*** No response to \*9900VR
*** No response to \*0100SN
** Write a simple serial program to make sure the correct byte string is sent to parosci.
*** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
** \*0100P3<0x0d><0x0a> responds with \*000116.02
** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
* Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
* With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
** &nbsp;Protocol Notes:
*** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
* Status (+)
** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
** Fixed bug in baud set
** Fixed bug in read serial number (sscanf and retries)
** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
*** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
sonardyne usbl
* No test executable available
\\
tailcone
* changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
* ./tailcone \-dev /dev/ttyS2
* Cautions:
** Recommend running tailcone tests while observing the tailcone
** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
* Status (/)
** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
Teledyne dvl - Doppler Velocity Log
* changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
* Actions
** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
*** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
*** In progress Reading up on termio and analyzing termio setup...
*** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
*** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
* Status (/)
** In progress...&nbsp;&nbsp;
** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
*** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
*** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
*** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
*** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
*** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
*** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
*** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
*** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
*** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\
h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}
\\
\\
\\
*Status details:*
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* \[9 July 2008\] Crossbow
Table 4. CrossBow AHRS300CA Data Packet Format
| Byte | VG Mode | Scaled Sensor Mode | Voltage Mode |
| 0 | Header (255) | Header (255) | Header (255) |
| 1 | Roll Angle (MSB) | Roll Angular Rate (MSB) | Roll Gyro Voltage (MSB) |
| 2 | Roll Angle (LSB) | Roll Angular Rate (LSB) | Roll Gyro Voltage (LSB) |
| 3 | Pitch Angle (MSB) | Pitch Angular Rate (MSB) | Pitch Gyro Voltage (MSB) |
| 4 | Pitch Angle (LSB) | Pitch Angular Rate (LSB) | Pitch Gyro Voltage (LSB) |
| 5 | Heading Angle (MSB) | Yaw Angular Rate (MSB) | Yaw Gyro Voltage (MSB) |
| 6 | Heading Angle (LSB) | Yaw Angular Rate (LSB) | Yaw Gyro Voltage (LSB) |
| 7 | Roll Angular Rate (MSB) | X-Axis Acceleration (MSB) | X-Axis Accel Voltage (MSB) |
| 8 | Roll Angular Rate (LSB) | X-Axis Acceleration (LSB) | X-Axis Accel Voltage (LSB) |
| 9 | Pitch Angular Rate (MSB) | Y-Axis Acceleration (MSB) | Y-Axis Accel Voltage (MSB) |
| 10 | Pitch Angular Rate (LSB) | Y-Axis Acceleration (LSB) | Y-Axis Accel Voltage (LSB) |
| 11 | Yaw Angular Rate (MSB) | Z-Axis Acceleration (MSB) | Z-Axis Accel Voltage (MSB) |
| 12 | Yaw Angular Rate (LSB) | Z-Axis Acceleration (LSB) | Z-Axis Accel Voltage (LSB) |
| 13 | X-Axis Acceleration (MSB) | X-Axis Magnetic Field (MSB) | X-Axis Mag Voltage (MSB) |
| 14 | X-Axis Acceleration (LSB) | X-Axis Magnetic Field (LSB) | X-Axis Mag Voltage (LSB) |
| 15 | Y-Axis Acceleration (MSB) | Y-Axis Magnetic Field (MSB) | Y-Axis Mag Voltage (MSB) |
| 16 | Y-Axis Acceleration (LSB) | Y-Axis Magnetic Field (LSB) | Y-Axis Mag Voltage (LSB) |
| 17 | Z-Axis Acceleration (MSB) | Z-Axis Magnetic Field (MSB) | Z-Axis Mag Voltage (MSB) |
| 18 | Z-Axis Acceleration (LSB) | Z-Axis Magnetic Field (LSB) | Z-Axis Mag Voltage (LSB) |
| 19 | X-Axis Magnetic Field (MSB) | Temp Sensor Voltage (MSB) | Temp Sensor Voltage (MSB) |
| 20 | X-Axis Magnetic Field (LSB) | Temp Sensor Voltage (LSB) | Temp Sensor Voltage (LSB) |
| 21 | Y-Axis Magnetic Field (MSB) | Time (MSB) | Time (MSB) |
| 22 | Y-Axis Magnetic Field (LSB) | Time (LSB) | Time (LSB) |
| 23 | Z-Axis Magnetic Field (MSB) | Checksum | Checksum |
| 24 | Z-Axis Magnetic Field (LSB) | | |
| 25 | Temp Sensor Voltage (MSB) | | |
| 26 | Temp Sensor Voltage (LSB) | | |
| 27 | Time (MSB) | | |
| 28 | Time (LSB) | | |
| 29 | Checksum | | |
*** \[Bug - build\] Top level build fails, though enough is built to enable&nbsp;driver development
*** \[Bug - major\] Fixed bug in 'checkChecksum that was blocking processRecord.&nbsp;&nbsp;&nbsp;Due to&nbsp;unpacked data (code is not compiled to pack on byte boundary, pragma pack(1))&nbsp;struct overly on serial byte stream (testPacket->checksum was zero, yet the proper checksum is in the 'record' byte buf).&nbsp;&nbsp; Changed checkChecksum to operate on byte stream with fixed offset for checksum location.
*** Output looks wrong after fixing checksum problem.&nbsp;&nbsp;&nbsp; Confirmed to be the&nbsp;'pack' problem.&nbsp;&nbsp; Bug fixed by building the data structure from the bytes, rather than overlaying and byte swapping.
*** Here's the output&nbsp;showing raw data stability but bad data (before bug fix).
**** 13:40:00.467 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=047a, HdgA=1d89
13:40:00.469 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 171.58 : P = \-167.32 : Y =&nbsp;&nbsp;&nbsp; 7.19
13:40:01.471 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0472, HdgA=1d86
13:40:01.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 160.33 : P = \-171.54 : Y =&nbsp;&nbsp;&nbsp; 1.57
13:40:02.471 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0475, HdgA=1d94
13:40:02.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp; \-84.22
13:40:03.476 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0475, HdgA=1d94
13:40:03.477 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp;&nbsp;&nbsp; 5.78
13:40:04.479 INFO \[Crossbow\] Hdr=ff, RolA=035d, PitA=0475, HdgA=1d89
13:40:04.481 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-167.32 : Y =&nbsp;&nbsp; \-5.47
13:40:05.483 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0475, HdgA=1d87
13:40:05.485 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-170.13 : Y =&nbsp;&nbsp; 17.03
13:40:06.488 INFO \[Crossbow\] Hdr=ff, RolA=035b, PitA=0476, HdgA=1d86
13:40:06.489 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 165.95 : P = \-171.54 : Y =&nbsp;&nbsp; \-5.47
13:40:07.492 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0477, HdgA=1d93
**** Here's the data after the bug fix.
14:16:37.203 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=0478, HdgA=1d97
14:16:37.204 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
14:16:38.206 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0479, HdgA=1d96
14:16:38.207 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.29 : Y =&nbsp;&nbsp; 41.61
14:16:39.210 INFO \[Crossbow\] Hdr=ff, RolA=0356, PitA=0476, HdgA=1d93
14:16:39.211 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 41.59
14:16:40.214 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0478, HdgA=1d94
14:16:40.215 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.59
14:16:41.218 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=047a, HdgA=1d94
14:16:41.219 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.30 : Y =&nbsp;&nbsp; 41.59
14:16:42.223 INFO \[Crossbow\] Hdr=ff, RolA=0356, PitA=0477, HdgA=1d96
14:16:42.223 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
14:16:43.227 INFO \[Crossbow\] Hdr=ff, RolA=035f, PitA=0474, HdgA=1d96
14:16:43.227 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.74 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 41.61
14:16:44.231 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0473, HdgA=1d96
14:16:44.232 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 41.61
14:16:45.235 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0476, HdgA=1d96
14:16:45.235 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 41.61
14:16:46.239 INFO \[Crossbow\] Hdr=ff, RolA=0360, PitA=0478, HdgA=1d96
14:16:46.240 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.75 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
\\
** \[Bug - minor\] Serial number is read incorrectly.&nbsp;&nbsp; NOT FIXED as it does not block tank test on July 17&nbsp;
*** 12:54:51.390 INFO \[Crossbow\] Serial Number: ff000043
*** 12:54:51.393 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 4278190147 (ff000043)&nbsp; <<-\- 4278190147 looks incorrect.
*** According to the Manual: &nbsp;\* The DMU will respond with a serial number datapacket that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.&nbsp; The serial number bytes should be interpreted as a 32-bit unsigned integer. For example, the serial number 9911750 would be sent as the four bytes 00 97 3D C6.
* &nbsp;
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00

E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080

007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF468

19F04C10088000000000000000000000000010A0031004400008000800080008000800080008000800

08000800080008000800080008000800080008000800080008000800080008000800080008000800080

00800080008000800080008000800080008000800080008000800080008000800080008000800080008

00080008000800080008000800080008000800080008000800080008000800080008000800080008000

80008000800080008000800080008000800080008000800080008000800080008000800080008000800

080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C06

0E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090

306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F45393

5362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B

2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B

2625272B2625272B2625282B2625282B00046400000000006400000064000000640000006400000064

00000064000000640000006400000064000000640000006400000064000000640000006400000064000

00064000000640000006400000064000000640000006400000064000000640000006400000601000000

DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A

0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5374779</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5407507</id>
<property name="body"><![CDATA[*Auv Driver Portnig Links*
* *[AUV Linux - Driver Port and Validation]*
* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
\\
\\

h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
*** July 9:&nbsp; Hans has made the docking vehicle available to finish the porting / validation.&nbsp;&nbsp; The 3dmgx1 is not on the vehicle, but rather the Crossbow DMU
**** The DMU baud rate can be changed per the following procedure:
**** 1. Start with the DMU connected to the serial interface, with your software set to the default baud rate of 38400.
**** 2. Send the ASCII character "b" (0x62 hex) to the DMU. In a terminal program&nbsp;like minicom simply type the letter "b". The DMU is case sensitive. The DMU will respond "B" (0x42 hex).
**** 3. Now change the baud rate of your terminal software.&nbsp;
**** 4. Send the ASCII character "a" (61 hex). The DMU will detect the character and automatically match the baud rate your software is using. Upon successful operation, the DMU will return the character "A" (0x41 hex) at the new baud rate.
**** 5. You can now use the DMU at the new baud rate. The new baud rate setting is not permanent; therefore, this process must be repeated after any power reset.
**** Sanity check the Crossbow\* *Command* *Query DMU Version,* *Character(s) Sent* v, *Response* ASCII string\* &nbsp;*Command* Query DMU Serial Number, *Character(s) Sent S*, *Response* Binary serial number data packet that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.
** Fixed a bug in checkChecksum.&nbsp;&nbsp; The struct overlay on the record was reading testPacket->Checksum as zero.&nbsp;&nbsp; There were two many castings, so rewrote the routine to operate directly on the char record - BUG FIXED.
\\
parosci \-&nbsp; Paroscientific pressure sensor
* devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
* ./parosci \-dev /dev/ttyS4
** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
* Actions:
** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
** Have obtained manual - parosci is unresponsive to serial commands via minicom
** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
*** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
*** No response to \*9900VR
*** No response to \*0100SN
** Write a simple serial program to make sure the correct byte string is sent to parosci.
*** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
** \*0100P3<0x0d><0x0a> responds with \*000116.02
** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
* Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
* With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
** &nbsp;Protocol Notes:
*** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
* Status (+)
** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
** Fixed bug in baud set
** Fixed bug in read serial number (sscanf and retries)
** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
*** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
sonardyne usbl
* No test executable available
\\
tailcone
* changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
* ./tailcone \-dev /dev/ttyS2
* Cautions:
** Recommend running tailcone tests while observing the tailcone
** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
* Status (/)
** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
Teledyne dvl - Doppler Velocity Log
* changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
* Actions
** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
*** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
*** In progress Reading up on termio and analyzing termio setup...
*** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
*** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
* Status (/)
** In progress...&nbsp;&nbsp;
** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
*** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
*** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
*** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
*** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
*** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
*** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
*** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
*** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
*** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\
h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}
\\
\\
\\
*Status details:*
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* \[9 July 2008\] Crossbow
Table 4. CrossBow AHRS300CA Data Packet Format
| Byte | VG Mode | Scaled Sensor Mode | Voltage Mode |
| 0 | Header (255) | Header (255) | Header (255) |
| 1 | Roll Angle (MSB) | Roll Angular Rate (MSB) | Roll Gyro Voltage (MSB) |
| 2 | Roll Angle (LSB) | Roll Angular Rate (LSB) | Roll Gyro Voltage (LSB) |
| 3 | Pitch Angle (MSB) | Pitch Angular Rate (MSB) | Pitch Gyro Voltage (MSB) |
| 4 | Pitch Angle (LSB) | Pitch Angular Rate (LSB) | Pitch Gyro Voltage (LSB) |
| 5 | Heading Angle (MSB) | Yaw Angular Rate (MSB) | Yaw Gyro Voltage (MSB) |
| 6 | Heading Angle (LSB) | Yaw Angular Rate (LSB) | Yaw Gyro Voltage (LSB) |
| 7 | Roll Angular Rate (MSB) | X-Axis Acceleration (MSB) | X-Axis Accel Voltage (MSB) |
| 8 | Roll Angular Rate (LSB) | X-Axis Acceleration (LSB) | X-Axis Accel Voltage (LSB) |
| 9 | Pitch Angular Rate (MSB) | Y-Axis Acceleration (MSB) | Y-Axis Accel Voltage (MSB) |
| 10 | Pitch Angular Rate (LSB) | Y-Axis Acceleration (LSB) | Y-Axis Accel Voltage (LSB) |
| 11 | Yaw Angular Rate (MSB) | Z-Axis Acceleration (MSB) | Z-Axis Accel Voltage (MSB) |
| 12 | Yaw Angular Rate (LSB) | Z-Axis Acceleration (LSB) | Z-Axis Accel Voltage (LSB) |
| 13 | X-Axis Acceleration (MSB) | X-Axis Magnetic Field (MSB) | X-Axis Mag Voltage (MSB) |
| 14 | X-Axis Acceleration (LSB) | X-Axis Magnetic Field (LSB) | X-Axis Mag Voltage (LSB) |
| 15 | Y-Axis Acceleration (MSB) | Y-Axis Magnetic Field (MSB) | Y-Axis Mag Voltage (MSB) |
| 16 | Y-Axis Acceleration (LSB) | Y-Axis Magnetic Field (LSB) | Y-Axis Mag Voltage (LSB) |
| 17 | Z-Axis Acceleration (MSB) | Z-Axis Magnetic Field (MSB) | Z-Axis Mag Voltage (MSB) |
| 18 | Z-Axis Acceleration (LSB) | Z-Axis Magnetic Field (LSB) | Z-Axis Mag Voltage (LSB) |
| 19 | X-Axis Magnetic Field (MSB) | Temp Sensor Voltage (MSB) | Temp Sensor Voltage (MSB) |
| 20 | X-Axis Magnetic Field (LSB) | Temp Sensor Voltage (LSB) | Temp Sensor Voltage (LSB) |
| 21 | Y-Axis Magnetic Field (MSB) | Time (MSB) | Time (MSB) |
| 22 | Y-Axis Magnetic Field (LSB) | Time (LSB) | Time (LSB) |
| 23 | Z-Axis Magnetic Field (MSB) | Checksum | Checksum |
| 24 | Z-Axis Magnetic Field (LSB) | | |
| 25 | Temp Sensor Voltage (MSB) | | |
| 26 | Temp Sensor Voltage (LSB) | | |
| 27 | Time (MSB) | | |
| 28 | Time (LSB) | | |
| 29 | Checksum | | |
*** \[Bug - build\] Top level build fails, though enough is built to enable&nbsp;driver development
*** \[Bug - major\] Fixed bug in 'checkChecksum that was blocking processRecord.&nbsp;&nbsp;&nbsp;Due to&nbsp;unpacked data (code is not compiled to pack on byte boundary, pragma pack(1))&nbsp;struct overly on serial byte stream (testPacket->checksum was zero, yet the proper checksum is in the 'record' byte buf).&nbsp;&nbsp; Changed checkChecksum to operate on byte stream with fixed offset for checksum location.
*** Output looks wrong after fixing checksum problem.&nbsp;&nbsp;&nbsp; Confirmed to be the&nbsp;'pack' problem.&nbsp;&nbsp; Bug fixed by building the data structure from the bytes, rather than overlaying and byte swapping.
*** Here's the output&nbsp;showing raw data stability but bad data (before bug fix).
**** 13:40:00.467 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=047a, HdgA=1d89
13:40:00.469 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 171.58 : P = \-167.32 : Y =&nbsp;&nbsp;&nbsp; 7.19
13:40:01.471 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0472, HdgA=1d86
13:40:01.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 160.33 : P = \-171.54 : Y =&nbsp;&nbsp;&nbsp; 1.57
13:40:02.471 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0475, HdgA=1d94
13:40:02.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp; \-84.22
13:40:03.476 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0475, HdgA=1d94
13:40:03.477 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp;&nbsp;&nbsp; 5.78
13:40:04.479 INFO \[Crossbow\] Hdr=ff, RolA=035d, PitA=0475, HdgA=1d89
13:40:04.481 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-167.32 : Y =&nbsp;&nbsp; \-5.47
13:40:05.483 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0475, HdgA=1d87
13:40:05.485 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-170.13 : Y =&nbsp;&nbsp; 17.03
13:40:06.488 INFO \[Crossbow\] Hdr=ff, RolA=035b, PitA=0476, HdgA=1d86
13:40:06.489 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 165.95 : P = \-171.54 : Y =&nbsp;&nbsp; \-5.47
13:40:07.492 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0477, HdgA=1d93
**** Here's the data after the bug fix.
14:16:37.203 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=0478, HdgA=1d97
14:16:37.204 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
14:16:38.206 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0479, HdgA=1d96
14:16:38.207 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.29 : Y =&nbsp;&nbsp; 41.61
14:16:39.210 INFO \[Crossbow\] Hdr=ff, RolA=0356, PitA=0476, HdgA=1d93
14:16:39.211 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 41.59
14:16:40.214 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0478, HdgA=1d94
14:16:40.215 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.59
14:16:41.218 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=047a, HdgA=1d94
14:16:41.219 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.30 : Y =&nbsp;&nbsp; 41.59
14:16:42.223 INFO \[Crossbow\] Hdr=ff, RolA=0356, PitA=0477, HdgA=1d96
14:16:42.223 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
14:16:43.227 INFO \[Crossbow\] Hdr=ff, RolA=035f, PitA=0474, HdgA=1d96
14:16:43.227 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.74 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 41.61
14:16:44.231 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0473, HdgA=1d96
14:16:44.232 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 41.61
14:16:45.235 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0476, HdgA=1d96
14:16:45.235 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 41.61
14:16:46.239 INFO \[Crossbow\] Hdr=ff, RolA=0360, PitA=0478, HdgA=1d96
14:16:46.240 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.75 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61\\
** \[Bug - minor\] Serial number is read incorrectly
*** 12:54:51.390 INFO \[Crossbow\] Serial Number: ff000043
*** 12:54:51.393 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 4278190147 (ff000043)&nbsp; <<-\- 4278190147 looks incorrect.
*** According to the Manual: &nbsp;\* The DMU will respond with a serial number datapacket that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.&nbsp; The serial number bytes should be interpreted as a 32-bit unsigned integer. For example, the serial number 9911750 would be sent as the four bytes 00 97 3D C6.
* &nbsp;
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00

E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080

007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF468

19F04C10088000000000000000000000000010A0031004400008000800080008000800080008000800

08000800080008000800080008000800080008000800080008000800080008000800080008000800080

00800080008000800080008000800080008000800080008000800080008000800080008000800080008

00080008000800080008000800080008000800080008000800080008000800080008000800080008000

80008000800080008000800080008000800080008000800080008000800080008000800080008000800

080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C06

0E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090

306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F45393

5362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B

2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B

2625272B2625272B2625282B2625282B00046400000000006400000064000000640000006400000064

00000064000000640000006400000064000000640000006400000064000000640000006400000064000

00064000000640000006400000064000000640000006400000064000000640000006400000601000000

DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A

0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5374777</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">15663615</id>
<property name="body"><![CDATA[{section}
{column:width=75%}
[Lessons Learned from June 29th-30th Drifter following Experiment|AUV:Lessons Learned Drifter Following Expt June'10]
{column}
{column:width=25%}
{panel:title=Developer Resources}
# Client Frameworks
## Comparisons
## [Java Posse Rundown|http://javaposse.com/java_posse_320_roundup_10_rich_client_vs_web]
## Google Web Toolkit
### [GWT and HTML5 - Google I/O|http://www.java-tv.com/2010/08/11/gwt-html5-can-do-what/]
## Messaging Frameworks (think events)
### [Lightweight AMQP|http://soa.dzone.com/articles/lightweight-alternative]
# Security
## [Securing GWT Clients|http://java.dzone.com/articles/securing-gwt-client-acris]
# Testing
## [GWT Testing Best Practices|http://www.softdevtube.com/2010/08/09/gwt-testing-best-practices/]
## [Testing Web Clients (Selenium)|http://weblogs.java.net/blog/johnsmart/archive/2010/08/09/selenium-2web-driver-land-where-page-objects-are-king]
# Utilities
## uDig - userfriendly desktop GIS
## 
{panel}
{column}
{section}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">15630861</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5407511</id>
<property name="body"><![CDATA[*Auv Driver Portnig Links*
* *[AUV Linux - Driver Port and Validation]*
* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
\\
\\

h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
*** July 9:&nbsp; Hans has made the docking vehicle available to finish the porting / validation.&nbsp;&nbsp; The 3dmgx1 is not on the vehicle, but rather the Crossbow DMU
**** The DMU baud rate can be changed per the following procedure:
**** 1. Start with the DMU connected to the serial interface, with your software set to the default baud rate of 38400.
**** 2. Send the ASCII character "b" (0x62 hex) to the DMU. In a terminal program&nbsp;like minicom simply type the letter "b". The DMU is case sensitive. The DMU will respond "B" (0x42 hex).
**** 3. Now change the baud rate of your terminal software.&nbsp;
**** 4. Send the ASCII character "a" (61 hex). The DMU will detect the character and automatically match the baud rate your software is using. Upon successful operation, the DMU will return the character "A" (0x41 hex) at the new baud rate.
**** 5. You can now use the DMU at the new baud rate. The new baud rate setting is not permanent; therefore, this process must be repeated after any power reset.
**** Sanity check the Crossbow\* *Command* *Query DMU Version,* *Character(s) Sent* v, *Response* ASCII string\* &nbsp;*Command* Query DMU Serial Number, *Character(s) Sent S*, *Response* Binary serial number data packet that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.
** Fixed a bug in checkChecksum.&nbsp;&nbsp; The struct overlay on the record was reading testPacket->Checksum as zero.&nbsp;&nbsp; There were two many castings, so rewrote the routine to operate directly on the char record - BUG FIXED.
\\
parosci \-&nbsp; Paroscientific pressure sensor
* devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
* ./parosci \-dev /dev/ttyS4
** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
* Actions:
** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
** Have obtained manual - parosci is unresponsive to serial commands via minicom
** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
*** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
*** No response to \*9900VR
*** No response to \*0100SN
** Write a simple serial program to make sure the correct byte string is sent to parosci.
*** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
** \*0100P3<0x0d><0x0a> responds with \*000116.02
** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
* Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
* With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
** &nbsp;Protocol Notes:
*** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
* Status (+)
** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
** Fixed bug in baud set
** Fixed bug in read serial number (sscanf and retries)
** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
*** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
sonardyne usbl
* No test executable available
\\
tailcone
* changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
* ./tailcone \-dev /dev/ttyS2
* Cautions:
** Recommend running tailcone tests while observing the tailcone
** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
* Status (/)
** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
Teledyne dvl - Doppler Velocity Log
* changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
* Actions
** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
*** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
*** In progress Reading up on termio and analyzing termio setup...
*** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
*** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
* Status (/)
** In progress...&nbsp;&nbsp;
** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
*** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
*** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
*** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
*** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
*** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
*** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
*** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
*** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
*** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
*** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\
h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}
\\
\\
\\
*Status details:*
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* \[9 July 2008\] Crossbow
Table 4. CrossBow AHRS300CA Data Packet Format
| Byte | VG Mode | Scaled Sensor Mode | Voltage Mode |
| 0 | Header (255) | Header (255) | Header (255) |
| 1 | Roll Angle (MSB) | Roll Angular Rate (MSB) | Roll Gyro Voltage (MSB) |
| 2 | Roll Angle (LSB) | Roll Angular Rate (LSB) | Roll Gyro Voltage (LSB) |
| 3 | Pitch Angle (MSB) | Pitch Angular Rate (MSB) | Pitch Gyro Voltage (MSB) |
| 4 | Pitch Angle (LSB) | Pitch Angular Rate (LSB) | Pitch Gyro Voltage (LSB) |
| 5 | Heading Angle (MSB) | Yaw Angular Rate (MSB) | Yaw Gyro Voltage (MSB) |
| 6 | Heading Angle (LSB) | Yaw Angular Rate (LSB) | Yaw Gyro Voltage (LSB) |
| 7 | Roll Angular Rate (MSB) | X-Axis Acceleration (MSB) | X-Axis Accel Voltage (MSB) |
| 8 | Roll Angular Rate (LSB) | X-Axis Acceleration (LSB) | X-Axis Accel Voltage (LSB) |
| 9 | Pitch Angular Rate (MSB) | Y-Axis Acceleration (MSB) | Y-Axis Accel Voltage (MSB) |
| 10 | Pitch Angular Rate (LSB) | Y-Axis Acceleration (LSB) | Y-Axis Accel Voltage (LSB) |
| 11 | Yaw Angular Rate (MSB) | Z-Axis Acceleration (MSB) | Z-Axis Accel Voltage (MSB) |
| 12 | Yaw Angular Rate (LSB) | Z-Axis Acceleration (LSB) | Z-Axis Accel Voltage (LSB) |
| 13 | X-Axis Acceleration (MSB) | X-Axis Magnetic Field (MSB) | X-Axis Mag Voltage (MSB) |
| 14 | X-Axis Acceleration (LSB) | X-Axis Magnetic Field (LSB) | X-Axis Mag Voltage (LSB) |
| 15 | Y-Axis Acceleration (MSB) | Y-Axis Magnetic Field (MSB) | Y-Axis Mag Voltage (MSB) |
| 16 | Y-Axis Acceleration (LSB) | Y-Axis Magnetic Field (LSB) | Y-Axis Mag Voltage (LSB) |
| 17 | Z-Axis Acceleration (MSB) | Z-Axis Magnetic Field (MSB) | Z-Axis Mag Voltage (MSB) |
| 18 | Z-Axis Acceleration (LSB) | Z-Axis Magnetic Field (LSB) | Z-Axis Mag Voltage (LSB) |
| 19 | X-Axis Magnetic Field (MSB) | Temp Sensor Voltage (MSB) | Temp Sensor Voltage (MSB) |
| 20 | X-Axis Magnetic Field (LSB) | Temp Sensor Voltage (LSB) | Temp Sensor Voltage (LSB) |
| 21 | Y-Axis Magnetic Field (MSB) | Time (MSB) | Time (MSB) |
| 22 | Y-Axis Magnetic Field (LSB) | Time (LSB) | Time (LSB) |
| 23 | Z-Axis Magnetic Field (MSB) | Checksum | Checksum |
| 24 | Z-Axis Magnetic Field (LSB) | | |
| 25 | Temp Sensor Voltage (MSB) | | |
| 26 | Temp Sensor Voltage (LSB) | | |
| 27 | Time (MSB) | | |
| 28 | Time (LSB) | | |
| 29 | Checksum | | |
*** \[Bug - build\] Top level build fails, though enough is built to enable&nbsp;driver development
*** \[Bug - major\] Fixed bug in 'checkChecksum that was blocking processRecord.&nbsp;&nbsp;&nbsp;Due to&nbsp;unpacked data (code is not compiled to pack on byte boundary, pragma pack(1))&nbsp;struct overly on serial byte stream (testPacket->checksum was zero, yet the proper checksum is in the 'record' byte buf).&nbsp;&nbsp; Changed checkChecksum to operate on byte stream with fixed offset for checksum location.
*** Output looks wrong after fixing checksum problem.&nbsp;&nbsp;&nbsp; Confirmed to be the&nbsp;'pack' problem.&nbsp;&nbsp; Bug fixed by building the data structure from the bytes, rather than overlaying and byte swapping.
*** Here's the output&nbsp;showing raw data stability but bad data (before bug fix).
**** 13:40:00.467 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=047a, HdgA=1d89
13:40:00.469 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 171.58 : P = \-167.32 : Y =&nbsp;&nbsp;&nbsp; 7.19
13:40:01.471 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0472, HdgA=1d86
13:40:01.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 160.33 : P = \-171.54 : Y =&nbsp;&nbsp;&nbsp; 1.57
13:40:02.471 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0475, HdgA=1d94
13:40:02.473 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp; \-84.22
13:40:03.476 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0475, HdgA=1d94
13:40:03.477 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-151.85 : Y =&nbsp;&nbsp;&nbsp; 5.78
13:40:04.479 INFO \[Crossbow\] Hdr=ff, RolA=035d, PitA=0475, HdgA=1d89
13:40:04.481 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-167.32 : Y =&nbsp;&nbsp; \-5.47
13:40:05.483 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0475, HdgA=1d87
13:40:05.485 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 164.55 : P = \-170.13 : Y =&nbsp;&nbsp; 17.03
13:40:06.488 INFO \[Crossbow\] Hdr=ff, RolA=035b, PitA=0476, HdgA=1d86
13:40:06.489 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp; 165.95 : P = \-171.54 : Y =&nbsp;&nbsp; \-5.47
13:40:07.492 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0477, HdgA=1d93
**** Here's the data after the bug fix.
14:16:37.203 INFO \[Crossbow\] Hdr=ff, RolA=035a, PitA=0478, HdgA=1d97
14:16:37.204 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
14:16:38.206 INFO \[Crossbow\] Hdr=ff, RolA=0359, PitA=0479, HdgA=1d96
14:16:38.207 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.29 : Y =&nbsp;&nbsp; 41.61
14:16:39.210 INFO \[Crossbow\] Hdr=ff, RolA=0356, PitA=0476, HdgA=1d93
14:16:39.211 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 41.59
14:16:40.214 INFO \[Crossbow\] Hdr=ff, RolA=0358, PitA=0478, HdgA=1d94
14:16:40.215 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.59
14:16:41.218 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=047a, HdgA=1d94
14:16:41.219 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.30 : Y =&nbsp;&nbsp; 41.59
14:16:42.223 INFO \[Crossbow\] Hdr=ff, RolA=0356, PitA=0477, HdgA=1d96
14:16:42.223 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
14:16:43.227 INFO \[Crossbow\] Hdr=ff, RolA=035f, PitA=0474, HdgA=1d96
14:16:43.227 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.74 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 41.61
14:16:44.231 INFO \[Crossbow\] Hdr=ff, RolA=0357, PitA=0473, HdgA=1d96
14:16:44.232 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 41.61
14:16:45.235 INFO \[Crossbow\] Hdr=ff, RolA=035c, PitA=0476, HdgA=1d96
14:16:45.235 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 41.61
14:16:46.239 INFO \[Crossbow\] Hdr=ff, RolA=0360, PitA=0478, HdgA=1d96
14:16:46.240 INFO \[Crossbow\]&nbsp;&nbsp;&nbsp; R =&nbsp;&nbsp;&nbsp; 4.75 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 41.61
\\
** \[Bug - minor\] Serial number is read incorrectly.&nbsp;&nbsp; NOT FIXED as it does not block tank test on July 17&nbsp;
*** 12:54:51.390 INFO \[Crossbow\] Serial Number: ff000043
*** 12:54:51.393 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 4278190147 (ff000043)&nbsp; <<-\- 4278190147 looks incorrect.
*** According to the Manual: &nbsp;\* The DMU will respond with a serial number datapacket that consists of a header byte (FF), the serial number in 4 bytes, and a checksum byte.&nbsp; The serial number bytes should be interpreted as a 32-bit unsigned integer. For example, the serial number 9911750 would be sent as the four bytes 00 97 3D C6.
** \[Bug - minor\] termios set baud failure.&nbsp;&nbsp; Port is operational at 38400, but attempts to set it fail.&nbsp;&nbsp; This will be pushed off until after tank test.
*** 14:56:03.785 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
14:56:03.785 ERROR \[SerialDevice\] cfsetospeed() failed
*** &nbsp;
* &nbsp;
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00

E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080

007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF468

19F04C10088000000000000000000000000010A0031004400008000800080008000800080008000800

08000800080008000800080008000800080008000800080008000800080008000800080008000800080

00800080008000800080008000800080008000800080008000800080008000800080008000800080008

00080008000800080008000800080008000800080008000800080008000800080008000800080008000

80008000800080008000800080008000800080008000800080008000800080008000800080008000800

080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C06

0E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090

306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F45393

5362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B

2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B

2625272B2625272B2625282B2625282B00046400000000006400000064000000640000006400000064

00000064000000640000006400000064000000640000006400000064000000640000006400000064000

00064000000640000006400000064000000640000006400000064000000640000006400000601000000

DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A

0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74 \\

CrossBow Output


auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
14:56:03.622 DEBUG \[CorbaUtils\] get ORB:
14:56:03.642 DEBUG \[CorbaUtils\] get POA:
14:56:03.664 DEBUG \[CorbaUtils\] Looking for event channel "EventChannel" in name service:

14:56:03.669 DEBUG \[CorbaUtils\] Found event channel "EventChannel"

14:56:03.675 DEBUG \[CorbaUtils\] Create provider servant

14:56:03.693 DEBUG \[CorbaUtils\] Create consumer servant

14:56:03.701 DEBUG \[parseComplex\] isIdentifier \-\- I've been asked to test the word crossbowPeriod
14:56:03.701 DEBUG \[parseComplex\] isIdentifier \-\- I've been asked to test the word 100
14:56:03.702 DEBUG \[parseComplex\] Parsing attribute crossbowPeriod = 100
14:56:03.703 DEBUG \[parseComplex\] No current item .. using the provided attributes CrossbowConstants
14:56:03.704 DEBUG \[Attributes\] Attributes::parse() - size=3

14:56:03.705 DEBUG \[Attributes\] Attributes::parse() - compare attribute name crossbowPeriod to input name crossbowPeriod

14:56:03.706 DEBUG \[Attributes\] Attributes::parse() \-\- Found value for crossbowPeriod
14:56:03.706 DEBUG \[Attributes\] Attributes::parse() \-\- crossbowPeriod is set
14:56:03.708 DEBUG \[Attributes\] Attribute crossbowPeriod is hasDefault = true, isSet = true
14:56:03.708 DEBUG \[Attributes\] Attribute debug is hasDefault = true, isSet = false
14:56:03.709 DEBUG \[Attributes\] Attribute dumpHex is hasDefault = true, isSet = false
14:56:03.710 DEBUG \[Attributes\] Attributes::verify() \-\- Attribute set CrossbowConstants is done
14:56:03.730 DEBUG \[CrossbowApp\] Launch instrument driver thread
IOR:010000001300000049444c3a6175762f4168727349463a312e300000010000000000000064000000010102000d0000003133342e38392e33322e31360000750e0e000000fef3d6774800001553000000000200000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
14:56:03.734 DEBUG \[CorbaUtils\] Ahrs already active...
14:56:03.737 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for Ahrs
14:56:03.746 DEBUG \[CorbaUtils\] context already bound
14:56:03.749 DEBUG \[CorbaUtils\] call bind() for Ahrs
14:56:03.759 DEBUG \[CorbaUtils\] call rebind() for Ahrs
14:56:03.763 DEBUG \[CorbaUtils\] invoke prepareToRun()

14:56:03.764 DEBUG \[CorbaUtils\] Activate POA manager
14:56:03.765 DEBUG \[CorbaUtils\] Run the ORB in a new thread
14:56:03.766 DEBUG \[CorbaUtils\] return from registerService()

14:56:03.767 DEBUG \[CrossbowApp\] Leaving CrossbowApp.initialize()
14:56:03.781 INFO \[AuvApplication\] run() - just sleeps by default
14:56:03.768 DEBUG \[Crossbow\] Crossbow::initialize : Initializing Crossbow driver
14:56:03.785 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
14:56:03.785 ERROR \[SerialDevice\] cfsetospeed() failed
14:56:03.786 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.789 DEBUG \[Crossbow\] Crossbow::initialize :&nbsp;&nbsp;&nbsp;&nbsp; ...done\!
14:56:03.789 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.790 DEBUG \[Crossbow\] Crossbow.cc: In getSerialNumber()
AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec14:56:03.816 INFO \[Crossbow\] Crossbow.cc: device->read succeeded
14:56:03.818 INFO \[Crossbow\] Crossbow.cc: The serial number is 4278190147 (ff000043)
14:56:03.821 DEBUG \[Crossbow\] Crossbow.cc: Setting polled mode
14:56:03.860 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.16
14:56:04.852 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.13
14:56:05.856 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.12
14:56:06.860 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.11
14:56:07.864 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.73 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.12
14:56:08.868 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.25 : Y =&nbsp;&nbsp; 43.21
14:56:09.872 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.71 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.19
14:56:10.876 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.13
14:56:11.880 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.29 : Y =&nbsp;&nbsp; 43.11
14:56:12.884 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.11
14:56:13.888 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.70 : P =&nbsp;&nbsp;&nbsp; 6.26 : Y =&nbsp;&nbsp; 43.10
14:56:14.893 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.72 : P =&nbsp;&nbsp;&nbsp; 6.28 : Y =&nbsp;&nbsp; 43.23
14:56:15.896 DEBUG \[Crossbow\] R =&nbsp;&nbsp;&nbsp; 4.69 : P =&nbsp;&nbsp;&nbsp; 6.27 : Y =&nbsp;&nbsp; 43.17
&nbsp;

\\
&nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5374781</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21397629</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

{toc}

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

h4. get short help

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}

h4. TREX version

{panel}
{panel:title=TREX version}
 * *format:* 
 ** GET http://<host>/rest/version
 * Gets information of the currently running version of trex
 * *output:*
 {code:javascript}
{
    "version_major": "0",
    "version_minor": "5",
    "version_release": "0",
    "version_rc": "1",
    "svn_root": "trunk",
    "svn_rev": "1450",
    "version_str": "0.5.0-rc1 (svn:trunk[1450])"
} 
{code}
 ** *note* svn_rev may not be a integer but is the output of the svnversion command. Which mean that ift can be a range of version (eg 1447:1450) and/or be postfixed by a modification flag letter (M for locally modified, S for a branch of tag instead of the trunk)  
{panel}

h3. Tick and date related services

h4. Current tick

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "2656",
    "date": "2013-06-04T15:29:04.923976"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. Next tick

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "2658",
    "date": "2013-06-04T15:31:04.923976"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. Initial tick

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/initial
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/initial
 {code:javascript}
{
    "value": "0",
    "date": "2013-06-02T19:13:04.923976"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. Final tick

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "1000000",
    "date": "2015-04-28T05:53:04.923976"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. tick info

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/2658
 {code:javascript}
{
    "value": "2658",
    "date": "2013-06-04T15:31:04.923976"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. tick at a date

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-01-01
 {code:javascript}
{
    "value": "305566",
    "date": "2013-12-31T23:59:04.923976"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. tick rate/duration

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}

h4. Wait for new tick

{panel:title=Wait for new tick}
* *format:* GET http://<host>/rest/tick/wait
* This request implements a long pull in order for the client to be notified when the next tick occurs. 
The request will not respond until the next tick occurs.
* *output:* similar to GET http://<host>/rest/tick  
{panel}

h3. Timelines and goals services

h4. List of trex existing timelines

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "alive": "true",
            "accept_goals": "false",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_state"
        },
        {
            "name": "dorado_survey",
            "alive": "true",
            "accept_goals": "true",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "1",
                "duration": "00:01:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_survey"
        },
        ...
    ]
}
 {code}
 
 ** "timelines" is the table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 *** "alive" a boolean indicating whether this timeline is still managed or "dead" (resulting on a Failed state)
 *** "accept_goals" a boolean indicating if this timeline accept goals or not (for example position updates on assets do not accept goals)
 *** "publish_plan" a boolean indicating if this timeline will publish its future when it has a plan or can only display its past and current state
 *** "latency" The expected maximum delay until a received goal on this timeline will be processed
 *** "look_ahead" How far ahead in the future this timeline is usually planned for 
 ** booth look_ahead and latency are json object giving their value both in term of TREX tick and real-time duration 
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically). Similarly all the attached information (except for their name) can change as the mission advance (although we often avoid it).
{panel}


h4. Contents of a timeline

{panel:title=Contents of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}&to=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{date\}&format=date
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}&format=tick
 * *input:*
 ** \{name\} the name of the timeline
 ** _format_ the format used to specify _from_ and _to_ . Possible formats are:
 *** *date* : _from_ and _to_ are specified as date (eg 2013-06-03T16:04:57.330-07:00)
 *** *tick* : _from_ and _to_ are given as integer which are directly trex tick values
 *** If not specified the default format is *date*
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. Meaning all the token which
 *** can end after _from_ (ie their largest possible end time is >= to _from_)
 *** can start before _to_ (ie their smallest possible start time is <= to _to_)
 ** While the json format id still underwork here's an example of what I have now :
(the request: http://<host>/rest/timeline/dorado_survey?from=2013-06-03T16:04:57.330-07:00&to=2013-06-13T16:10:29.449-07:00)
 {code:javascript}
{
  "name": "dorado_survey"  
  "requested_tick_range": {
    "int": {
      "max": "16077",
      "min": "1671"
    }
  },
  "tokens": [
    {
      "pred": "None",
      "on": "dorado_survey"
      "Variable": [
        {
          "name": "start",
          "type": "date",
          "date": {
            "value": "2013-06-02T19:13:04.923976"
          }
        },
        {
          "name": "end",
          "type": "date",
          "date": {
            "min": "2013-06-04T15:36:04.923976"
          }
        },
        {
          "name": "duration",
          "type": "duration",
          "duration": {
            "min": "44:23:00"
          }
        }
      ]
    }
  ]
}
{code}
 ** In this example the result has the following attributes :
 *** "name" : The name of the timeline
 *** "alive" : Indicates if this timeline is currently still managed
 *** "requested_tick_range" : an interval giving the range \[_from_, _to_\] into ticks
 *** "token" : A table with all the tokens that match this range. Tokens are sorted by occurrence order

 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 ** 400: parsing error from the optionals fields 
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=2013-May-23&to=2013-may-31%2012:00:00
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100&format=tick
{panel}

h4. Post a new goal

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
** Associated data: the goal in json format (request header need to set Content-Type to application/json)
 * *example of a curl command:*
 {code:none}
   curl -X POST --header 'Content-Type:application/json' -d '
   {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable": [
            { "name": "drifter",
              "type": "enum",
              "enum": { "elem": [ { "value": "MBARI21" } ] }
            },
            { "name": "lagrangian",
              "type": "bool",
              "bool": { "value": "1" }
            },
            { "name": "path",
              "enum": { "elem": [ { "value": "square" } ] }
            },
            { "name": "size", 
              "float": { "value": 1000.0 }
            },
            { "name": "start",
              "type": "date",
              "date": { "min": "2013-May-16 15:53:00" }
            },
            { "name": "duration"
              "duration": { "max": "18:00:00" },
              "type": "duration"
            }
        ]
    }
   }' http://<host>/rest/goal
 {code}
* *output on success:* A json structure with the following attributes:
** _id_ : A unique identifier for the goal
** _href_: URL where this goal can be accessed (through GET or DELETE)
** _Goal_: The goal representation (should be fairly similar to what data was posted but with small tweaks such as updated start duration and end information)
* *example output* from the command above:
{code:javascript}
{
    "id": "0xb0425cb0",
    "href": "/rest/goal/0xb0425cb0",
    "Goal":
    {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable":
        [
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "spotSim"
                        }
                    ]
                },
                "type": "enum",
                "name": "drifter"
            },
            {
                "bool":
                {
                    "value": "1"
                },
                "type": "bool",
                "name": "lagrangian"
            },
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "square"
                        }
                    ]
                },
                "type": "enum",
                "name": "path"
            },
            {
                "float":
                {
                    "value": "1000.0000000000000000"
                },
                "type": "float",
                "name": "size"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:16:01.566673"
                },
                "type": "date",
                "name": "start"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:17:01.566673"
                },
                "type": "date",
                "name": "end"
            },
            {
                "duration":
                {
                    "min": "00:01:00",
                    "max": "18:00:00"
                },
                "type": "duration",
                "name": "duration"
            }
        ]
    }
}
{code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

h4. Modify an existing goal

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

h4. Cancel a goal

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned


{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">21364862</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21397626</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

{toc}

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

h4. get short help

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}

h4. TREX version

{panel}
{panel:title=TREX version}
 * *format:* 
 ** GET http://<host>/rest/version
 * Gets information of the currently running version of trex
 * *output:*
 {code:javascript}
{
    "version_major": "0",
    "version_minor": "5",
    "version_release": "0",
    "version_rc": "1",
    "svn_root": "trunk",
    "svn_rev": "1450",
    "version_str": "0.5.0-rc1 (svn:trunk[1450])"
} 
{code}
 ** *note* svn_rev may not be a integer but is the output of the svnversion command. Which mean that ift can be a range of version (eg 1447:1450) and/or be postfixed by a modification flag letter (M for locally modified, S for a branch of tag instead of the trunk)  
{panel}

h3. Tick and date related services

h4. Current tick

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. Next tick

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. Initial tick

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. Final tick

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. tick info

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. tick at a date

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. tick rate/duration

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}

h4. Wait for new tick

{panel:title=Wait for new tick}
* *format:* GET http://<host>/rest/tick/wait
* This request implements a long pull in order for the client to be notified when the next tick occurs. 
The request will not respond until the next tick occurs.
* *output:* similar to GET http://<host>/rest/tick  
{panel}

h3. Timelines and goals services

h4. List of trex existing timelines

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "alive": "true",
            "accept_goals": "false",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_state"
        },
        {
            "name": "dorado_survey",
            "alive": "true",
            "accept_goals": "true",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "1",
                "duration": "00:01:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_survey"
        },
        ...
    ]
}
 {code}
 
 ** "timelines" is the table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 *** "alive" a boolean indicating whether this timeline is still managed or "dead" (resulting on a Failed state)
 *** "accept_goals" a boolean indicating if this timeline accept goals or not (for example position updates on assets do not accept goals)
 *** "publish_plan" a boolean indicating if this timeline will publish its future when it has a plan or can only display its past and current state
 *** "latency" The expected maximum delay until a received goal on this timeline will be processed
 *** "look_ahead" How far ahead in the future this timeline is usually planned for 
 ** booth look_ahead and latency are json object giving their value both in term of TREX tick and real-time duration 
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically). Similarly all the attached information (except for their name) can change as the mission advance (although we often avoid it).
{panel}


h4. Contents of a timeline

{panel:title=Contents of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}&to=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{date\}&format=date
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}&format=tick
 * *input:*
 ** \{name\} the name of the timeline
 ** _format_ the format used to specify _from_ and _to_ . Possible formats are:
 *** *date* : _from_ and _to_ are specified as date (eg 2013-May-23%2012:00:00)
 *** *tick* : _from_ and _to_ are given as integer which are directly trex tick values
 *** If not specified the default format is *date*
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. Meaning all the token which
 *** can end after _from_ (ie their largest possible end time is >= to _from_)
 *** can start before _to_ (ie their smallest possible start time is <= to _to_)
 ** While the json format id still underwork here's an example of what I have now :
 {code:javascript}
{
    "name": "time_b",
    "alive": "true",
    "requested_tick_range":
    {
        "int":
        {
            "min": "-32888"
            "max": "16549"
        }
    },
    "token":
    [
         {
            "on": "time_b",
            "pred": "Holds",
            "Variable":
            {
                "float":
                {
                    "value": "0.9902680687415706"
                },
                "type": "float",
                "name": "cos_t"
            },
            "Variable":
            {
                "float":
                {
                    "value": "0.1391731009600664"
                },
                "type": "float",
                "name": "sin_t"
            },
            "Variable":
            {
                "date":
                {
                    "value": "2013-May-23 20:16:26.690742"
                },
                "type": "date",
                "name": "start"
            },
            "Variable":
            {
                "date":
                {
                    "value": "2013-May-23 20:17:26.690742"
                },
                "type": "date",
                "name": "end"
            },
            "Variable":
            {
                "duration":
                {
                    "value": "00:01:00"
                },
                "type": "duration",
                "name": "duration"
            }
        },
        {
            "on": "time_b",
            "pred": "Holds",
            "Variable":
            [
                {
                    "float":
                    {
                        "value": "0.9876883405951381"
                    },
                    "type": "float",
                    "name": "cos_t"
                },
                {
                    "float":
                    {
                        "value": "0.1564344650402325"
                    },
                    "type": "float",
                    "name": "sin_t"
                },
                {
                    "date":
                    {
                        "value": "2013-May-23 20:17:26.690742"
                    },
                    "type": "date",
                    "name": "start"
                },
                {
                    "date":
                    {
                        "min": "2013-May-23 20:18:26.690742"
                    },
                    "type": "date",
                    "name": "end"
                }
            ]
        }
    ]
} {code}
 ** In this example the result has the following attributes :
 *** "name" : The name of the timeline
 *** "alive" : Indicates if this timeline is currently still managed
 *** "requested_tick_range" : an interval giving the range \[_from_, _to_\] into ticks
 *** "token" : A table with all the tokens that match this range. Tokens are sorted by occurrence order

 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 ** 400: parsing error from the optionals fields 
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=2013-May-23&to=2013-may-31%2012:00:00
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100&format=tick
{panel}

h4. Post a new goal

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
** Associated data: the goal in json format (request header need to set Content-Type to application/json)
 * *example of a curl command:*
 {code:none}
   curl -X POST --header 'Content-Type:application/json' -d '
   {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable": [
            { "name": "drifter",
              "type": "enum",
              "enum": { "elem": [ { "value": "MBARI21" } ] }
            },
            { "name": "lagrangian",
              "type": "bool",
              "bool": { "value": "1" }
            },
            { "name": "path",
              "enum": { "elem": [ { "value": "square" } ] }
            },
            { "name": "size", 
              "float": { "value": 1000.0 }
            },
            { "name": "start",
              "type": "date",
              "date": { "min": "2013-May-16 15:53:00" }
            },
            { "name": "duration"
              "duration": { "max": "18:00:00" },
              "type": "duration"
            }
        ]
    }
   }' http://<host>/rest/goal
 {code}
* *output on success:* A json structure with the following attributes:
** _id_ : A unique identifier for the goal
** _href_: URL where this goal can be accessed (through GET or DELETE)
** _Goal_: The goal representation (should be fairly similar to what data was posted but with small tweaks such as updated start duration and end information)
* *example output* from the command above:
{code:javascript}
{
    "id": "0xb0425cb0",
    "href": "/rest/goal/0xb0425cb0",
    "Goal":
    {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable":
        [
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "spotSim"
                        }
                    ]
                },
                "type": "enum",
                "name": "drifter"
            },
            {
                "bool":
                {
                    "value": "1"
                },
                "type": "bool",
                "name": "lagrangian"
            },
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "square"
                        }
                    ]
                },
                "type": "enum",
                "name": "path"
            },
            {
                "float":
                {
                    "value": "1000.0000000000000000"
                },
                "type": "float",
                "name": "size"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:16:01.566673"
                },
                "type": "date",
                "name": "start"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:17:01.566673"
                },
                "type": "date",
                "name": "end"
            },
            {
                "duration":
                {
                    "min": "00:01:00",
                    "max": "18:00:00"
                },
                "type": "duration",
                "name": "duration"
            }
        ]
    }
}
{code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

h4. Modify an existing goal

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

h4. Cancel a goal

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned


{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">21364859</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9405136</id>
<property name="body"><![CDATA[h4. Debian 4.0 (Etch) Install

\\
* Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
* Debian install time: \~45 min depending on harddisk format time and machine speed
\\
*# Burn DVD with&nbsp;Debian 4.0 r7 net install and&nbsp;boot internet connected&nbsp;PC from DVD
*## Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
*## Domain: shore.mbari.org
*## Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
*## users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
*## Use network mirror for complete package list (if internet connected)
*## Software install: For embedded Linux machine Standard (only), For desktop development Standard+Desktop
*## Install Grub to the master boot record
*# Remove DVD and allow boot from harddisk
*# Standard installs require additional debian packages,&nbsp;these are&nbsp;installed by&nbsp;running the&nbsp;script included in auv-pkgs/debian-pkg directory.&nbsp;&nbsp; Login as root and type:&nbsp;*source /home/dorado1/prj/auv-pkgs/debian-pkg/deb-packages*
*## &nbsp;
*# Java Installation
*## Create a java installation specific to the auv-linux and auv-autonomy development and decouple from the debian system java:
*### Install in a named directory in opt, example: /opt/jdk_1.6u12.&nbsp;&nbsp;
*### Download jdk to /home/dorado1/tools/java
*### login *as root*&nbsp;and enter root password.
*### Change directory to /opt. Type: *cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
*### Change the permission of the bin&nbsp;file to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
*### Verify that you have permission to execute the file. Type:
*ls \-l*
*### Start the installation process.Type:&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*
*### Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.
*### exit from root back to user dorado1
*### In the dorado1 user profile, set the java&nbsp;environment variable to /opt/jdk_1.6u12&nbsp;
\\
\\

\\
&nbsp;

h5. Autonomy Software checkout:

cd /home/dorado1/prj&nbsp;

svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk TREX&nbsp;

copy Europa from threadfish (Yikes\! NASA version is moving ahead of TREX)
\\

Build failed (jam in TREX) due to missing boost regex loadable module.&nbsp;&nbsp;&nbsp; To resolve this, a debian package was installed (developer version) which is a bit of a sledge hammer.&nbsp;&nbsp; Need to determine of this is a standard component of the OS or a developer package specific to TREX (judged it to be an OS component)

apt-get install _libboost-regex-dev_

Build failed due to libSystem.so missing

Fix:&nbsp; add $PLASMA_HOME/lib to LD_LIBRARY_PATH

\\
&nbsp;
\\
\\
* \\
*# Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*#* as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*#* export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*#* cvs login
*#* cvs checkout auv-pkgs
*#* cvs checkout auv-shared
*#* cvs checkout auv-linux
*#* cd /home/auv/prj/auv-pkgs
*#* source set-auv-env (or ". set-auv-env")
*#* edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*#* setup, build and install auv-pkgs
*#** su root
*#** cd $AUV_PKGS
*#** . 1_omniORB.bat
*#** . 2_omniNotify.bat
*#** . 3_gctpc.bat
*#** . 4_apr.bat
*#** . 5_apr-util.bat
*#** . 6_log4cxx.bat
*#** . 7_netcdb.bat
*#** . 8_newmat.bat
*#** . 9_cppunit.bat
*#** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*#* As root, add auv startup script to /etc/init.d:&nbsp;&nbsp; /etc/init.d/auv-startup.sh
*#** \#\!/bin/sh
\# auv startup script
*#** &nbsp;
*#** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
*#** chmod 777 /dev/mqueue
*#* chmod a+x auv-startup.sh&nbsp;
*#* Then (as root) update the startup sequence:&nbsp;update-rc.d \-f auv-startup.sh start 80 2 3 4 5 .
*#** *\#*\*\* Note to remove: update-rc.d S80auv-startup.sh remove
*#** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*#* exit back to user 'auv'
*#* build auv-shared
*#** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
*#** apt-get install xutils-dev to get gccmakedep
*#* build auv-linux
*#** edit taskIF Makefile - comment out idlj and javac lines
*#* Run supervisor (this creates logs/latest link)
*#** from auv-linux/onboard, run
*#*** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
*#*** &nbsp;
*# Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*#* Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*#* logged in as root
*#* cp&nbsp;serial.conf /etc&nbsp;
*#* cd /usr/src
*#* tar jxf linux-source-2.6.18.tar.bz2
*#* cd linux-source-2.6.18
*#* make clean && make mrproper
*#* uname \-r to get /boot/config-'uname \-r' name
*#* cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*#* make menuconfig
*#** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
*#** Device Drivers&nbsp; \--> Character devices
*#** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
*#** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
*#** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
*#** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
*#** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
*#** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*#* make-kpkg clean
*#* fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
*#** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*#* dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*#* _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*#* serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*#* To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
*#** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
*#** &nbsp;
*#** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
*#*** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
*#*** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*#* To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
*#** create a file called 'startCorba.sh'
*#*** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notification service.
*#*** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
*#*** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
*#*** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*#** make sure startCorba has execute permissions (chmod a+x startCorba.sh)&nbsp;
*#** Create a symbolic link using update-rc.d (Debian command)&nbsp;
*#*** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
*#* TODO:
*#** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
*# Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*#* Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
*#** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
*#** ifup eth0 will also show the error
\\
*#* Network Settings (/etc/network/interfaces)
*#** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
*#*** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
*#*** edit */etc/dhcp3/dhclient.conf* to add the following line:
*#**** send host-name "foce2.shore.mbari.org"
*#*** 127.0.0.1 localhost.localdomain localhost
*#*** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
*#*** hostname mvc-debian.shore.mbari.org
*#*** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
*#**** address 134.89.32.16
*#**** netmask 255.255.254.0
*#**** gateway 134.89.32.1
*#**** broadcast 134.89.32.255
*#*** to check the hostname is set properly
*#**** uname \-n
*#**** hostname \-a
*#**** hostname \-s
*#**** hostname \-d
*#**** hostname \-f
*#**** hostname
*#** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
** Debian Packages required to build auv-linux and TREX:
**# apt-get install ant
**# apt-get install ant-optional
**# apt-get install autoconf
**# apt-get install autogen
**# apt-get install automake
**# apt-get install binutils
**# apt-get install bison
**# apt-get install cvs
**# apt-get install doxygen
**# apt-get install flex
**# apt-get install g+\+
**# apt-get install libtool
**# apt-get install make
**# apt-get install subversion
**# apt-get install libtool
**# apt-get install gdb
**# apt-get install openssl
**# apt-get install ssh
**# apt-get install minicom
**# apt-get install python-all
**# apt-get install python-all-dev
**# apt-get install lirc setserial
**# apt-get install linux-source-2.6.18
**# apt-get install kernel-package libncurses5-dev fakeroot wget build-essential
**# apt-get install xutils-dev
**# apt-get install linux-doc-2.6.18
**# apt-get install linux-manual-2.6.18
**# apt-get install manpages-dev
**# apt-get install xutils-dev
**# apt-get install jam
**# apt-get install swig
**# apt-get install libboost-regex-dev&nbsp;
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372404</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9405137</id>
<property name="body"><![CDATA[h4. Debian 4.0 (Etch) Install

\\
* Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
* Debian install time: \~45 min depending on harddisk format time and machine speed
\\
*# Burn DVD with&nbsp;Debian 4.0 r7 net install and&nbsp;boot internet connected&nbsp;PC from DVD
*## Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
*## Domain: shore.mbari.org
*## Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
*## users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
*## Use network mirror for complete package list (if internet connected)
*## Software install: For embedded Linux machine Standard (only), For desktop development Standard+Desktop
*## Install Grub to the master boot record
*# Remove DVD and allow boot from harddisk
*# Standard installs require additional debian packages,&nbsp;these are&nbsp;installed by&nbsp;running the&nbsp;script included in auv-pkgs/debian-pkg directory.&nbsp;&nbsp; Login as root and type:&nbsp;*source /home/dorado1/prj/auv-pkgs/debian-pkg/deb-packages*
*## &nbsp;
*# Java Installation
*## Create a java installation specific to the auv-linux and auv-autonomy development and decouple from the debian system java:
*### Install in a named directory in opt, example: /opt/jdk_1.6u12.&nbsp;&nbsp;
*### Download jdk to /home/dorado1/tools/java
*### login *as root*&nbsp;and enter root password.
*### Change directory to /opt. Type: *cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
*### Change the permission of the bin&nbsp;file to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
*### Verify that you have permission to execute the file. Type:
*ls \-l*
*### Start the installation process.Type:&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*
*### Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.
*### exit from root back to user dorado1
*### In the dorado1 user profile, set the java&nbsp;environment variable to /opt/jdk_1.6u12&nbsp;
\\
\\

h4. \\
AUV-Linux Install and Setup
\\
\\

\\
# Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
#* as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
#* export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
#* cvs login
#* cvs checkout auv-pkgs
#* cvs checkout auv-shared
#* cvs checkout auv-linux
#* cd /home/auv/prj/auv-pkgs
#* source set-auv-env (or ". set-auv-env")
#* edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
#* setup, build and install auv-pkgs
#** su root
#** cd $AUV_PKGS
#** . 1_omniORB.bat
#** . 2_omniNotify.bat
#** . 3_gctpc.bat
#** . 4_apr.bat
#** . 5_apr-util.bat
#** . 6_log4cxx.bat
#** . 7_netcdb.bat
#** . 8_newmat.bat
#** . 9_cppunit.bat
#** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
#* As root, add auv startup script to /etc/init.d:&nbsp;&nbsp; /etc/init.d/auv-startup.sh
#** \#\!/bin/sh
\# auv startup script
#** &nbsp;
#** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
#** chmod 777 /dev/mqueue
#* chmod a+x auv-startup.sh&nbsp;
#* Then (as root) update the startup sequence:&nbsp;update-rc.d \-f auv-startup.sh start 80 2 3 4 5 .
#** *\#*\*\* Note to remove: update-rc.d S80auv-startup.sh remove
#** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
#* exit back to user 'auv'
#* build auv-shared
#** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
#** apt-get install xutils-dev to get gccmakedep
#* build auv-linux
#** edit taskIF Makefile - comment out idlj and javac lines
#* Run supervisor (this creates logs/latest link)
#** from auv-linux/onboard, run
#*** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg\\ \\

\\
&nbsp;

h5. Autonomy Software checkout:

cd /home/dorado1/prj&nbsp;

svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk TREX&nbsp;

copy Europa from threadfish (Yikes\! NASA version is moving ahead of TREX)
\\

Build failed (jam in TREX) due to missing boost regex loadable module.&nbsp;&nbsp;&nbsp; To resolve this, a debian package was installed (developer version) which is a bit of a sledge hammer.&nbsp;&nbsp; Need to determine of this is a standard component of the OS or a developer package specific to TREX (judged it to be an OS component)

apt-get install _libboost-regex-dev_

Build failed due to libSystem.so missing

Fix:&nbsp; add $PLASMA_HOME/lib to LD_LIBRARY_PATH\\ \\
# Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
#* Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
#* logged in as root
#* cp&nbsp;serial.conf /etc&nbsp;
#* cd /usr/src
#* tar jxf linux-source-2.6.18.tar.bz2
#* cd linux-source-2.6.18
#* make clean && make mrproper
#* uname \-r to get /boot/config-'uname \-r' name
#* cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
#* make menuconfig
#** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
#** Device Drivers&nbsp; \--> Character devices
#** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
#** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
#** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
#** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
#** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
#** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
#* make-kpkg clean
#* fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
#** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
#* dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
#* _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
#* serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
#* To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
#** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
#** &nbsp;
#** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
#*** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
#*** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
#* To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
#** create a file called 'startCorba.sh'
#*** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notification service.
#*** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
#*** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
#*** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
#** make sure startCorba has execute permissions (chmod a+x startCorba.sh)&nbsp;
#** Create a symbolic link using update-rc.d (Debian command)&nbsp;
#*** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
#* TODO:
#** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
# Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
#* Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
#** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
#** ifup eth0 will also show the error
\\
#* Network Settings (/etc/network/interfaces)
#** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
#*** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
#*** edit */etc/dhcp3/dhclient.conf* to add the following line:
#**** send host-name "foce2.shore.mbari.org"
#*** 127.0.0.1 localhost.localdomain localhost
#*** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
#*** hostname mvc-debian.shore.mbari.org
#*** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
#**** address 134.89.32.16
#**** netmask 255.255.254.0
#**** gateway 134.89.32.1
#**** broadcast 134.89.32.255
#*** to check the hostname is set properly
#**** uname \-n
#**** hostname \-a
#**** hostname \-s
#**** hostname \-d
#**** hostname \-f
#**** hostname
#** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\

* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
** Debian Packages required to build auv-linux and TREX:
**# apt-get install ant
**# apt-get install ant-optional
**# apt-get install autoconf
**# apt-get install autogen
**# apt-get install automake
**# apt-get install binutils
**# apt-get install bison
**# apt-get install cvs
**# apt-get install doxygen
**# apt-get install flex
**# apt-get install g+\+
**# apt-get install libtool
**# apt-get install make
**# apt-get install subversion
**# apt-get install libtool
**# apt-get install gdb
**# apt-get install openssl
**# apt-get install ssh
**# apt-get install minicom
**# apt-get install python-all
**# apt-get install python-all-dev
**# apt-get install lirc setserial
**# apt-get install linux-source-2.6.18
**# apt-get install kernel-package libncurses5-dev fakeroot wget build-essential
**# apt-get install xutils-dev
**# apt-get install linux-doc-2.6.18
**# apt-get install linux-manual-2.6.18
**# apt-get install manpages-dev
**# apt-get install xutils-dev
**# apt-get install jam
**# apt-get install swig
**# apt-get install libboost-regex-dev&nbsp;
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372405</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9405131</id>
<property name="body"><![CDATA[h4. Debian 4.0 (Etch) Install

\\
* Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
* Debian install time: \~45 min depending on harddisk format time and machine speed
\\
*# Burn DVD with&nbsp;net install and&nbsp;boot internet connected&nbsp;PC from DVD
*## Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
*## Domain: shore.mbari.org
*## Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
*## users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
*## Use network mirror for complete package list (if internet connected)
*## Software install: For embedded Linux machine Standard (only), For desktop development Standard+Desktop
*## Install Grub to the master boot record
*# Remove DVD and allow boot from harddisk
*# After boot, login as root and re-insert Debian 4.0 r7 net install DVD.
*# Standard installs require the following packages, (source the deb-packages script as root):
*# \*## apt-get install ant
*## apt-get install ant-optional
*## apt-get install autoconf
*## apt-get install autogen
*## apt-get install automake
*## apt-get install binutils
*## apt-get install bison
*## apt-get install cvs
*## apt-get install doxygen
*## apt-get install flex
*## apt-get install g+\+
*## apt-get install libtool
*## apt-get install make
*## apt-get install subversion
*## apt-get install libtool
*## apt-get install gdb
*## apt-get install openssl
*## apt-get install ssh
*## apt-get install minicom
*## apt-get install python-all
*## apt-get install python-all-dev
*## apt-get install lirc setserial
*## apt-get install linux-source-2.6.18
*## apt-get install kernel-package libncurses5-dev fakeroot wget build-essential
*## apt-get install xutils-dev
*## apt-get install linux-doc-2.6.18
*## apt-get install linux-manual-2.6.18
*## apt-get install manpages-dev
*## apt-get install xutils-dev
*## apt-get install jam
*## apt-get install swig
*## apt-get install libboost-regex-dev&nbsp;&nbsp;
*# Java Installation
*## Create a java installation specific to the auv-linux and auv-autonomy development and decouple from the debian system java:
*### Install in a named directory in opt, example: /opt/jdk_1.6u12.&nbsp;&nbsp;
*### Download jdk to /home/dorado1/tools/java
*### login *as root*&nbsp;and enter root password.
*### Change directory to /opt. Type: *cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
*### Change the permission of the bin&nbsp;file to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
*### Verify that you have permission to execute the file. Type:
*ls \-l*
*### Start the installation process.Type:&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*
*### Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.
*### In the dorado1 user profile, set the java&nbsp;environment variable to /opt/jdk_1.6u12&nbsp;
\\
\\

\\
&nbsp;

h5. Autonomy Software checkout:

cd /home/dorado1/prj&nbsp;

svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk TREX&nbsp;

copy Europa from threadfish (Yikes\! NASA version is moving ahead of TREX)
\\

Build failed (jam in TREX) due to missing boost regex loadable module.&nbsp;&nbsp;&nbsp; To resolve this, a debian package was installed (developer version) which is a bit of a sledge hammer.&nbsp;&nbsp; Need to determine of this is a standard component of the OS or a developer package specific to TREX (judged it to be an OS component)

apt-get install _libboost-regex-dev_

Build failed due to libSystem.so missing

Fix:&nbsp; add $PLASMA_HOME/lib to LD_LIBRARY_PATH

\\
&nbsp;
\\
\\
* \\
*# Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*#* as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*#* export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*#* cvs login
*#* cvs checkout auv-pkgs
*#* cvs checkout auv-shared
*#* cvs checkout auv-linux
*#* cd /home/auv/prj/auv-pkgs
*#* source set-auv-env (or ". set-auv-env")
*#* edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*#* setup, build and install auv-pkgs
*#** su root
*#** cd $AUV_PKGS
*#** . 1_omniORB.bat
*#** . 2_omniNotify.bat
*#** . 3_gctpc.bat
*#** . 4_apr.bat
*#** . 5_apr-util.bat
*#** . 6_log4cxx.bat
*#** . 7_netcdb.bat
*#** . 8_newmat.bat
*#** . 9_cppunit.bat
*#** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*#* As root, add auv startup script to /etc/init.d:&nbsp;&nbsp; /etc/init.d/auv-startup.sh
*#** \#\!/bin/sh
\# auv startup script
*#** &nbsp;
*#** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
*#** chmod 777 /dev/mqueue
*#* chmod a+x auv-startup.sh&nbsp;
*#* Then (as root) update the startup sequence:&nbsp;update-rc.d \-f auv-startup.sh start 80 2 3 4 5 .
*#** *\#*\*\* Note to remove: update-rc.d S80auv-startup.sh remove
*#** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*#* exit back to user 'auv'
*#* build auv-shared
*#** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
*#** apt-get install xutils-dev to get gccmakedep
*#* build auv-linux
*#** edit taskIF Makefile - comment out idlj and javac lines
*#* Run supervisor (this creates logs/latest link)
*#** from auv-linux/onboard, run
*#*** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
*#*** &nbsp;
*# Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*#* Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*#* logged in as root
*#* cp&nbsp;serial.conf /etc&nbsp;
*#* cd /usr/src
*#* tar jxf linux-source-2.6.18.tar.bz2
*#* cd linux-source-2.6.18
*#* make clean && make mrproper
*#* uname \-r to get /boot/config-'uname \-r' name
*#* cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*#* make menuconfig
*#** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
*#** Device Drivers&nbsp; \--> Character devices
*#** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
*#** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
*#** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
*#** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
*#** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
*#** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*#* make-kpkg clean
*#* fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
*#** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*#* dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*#* _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*#* serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*#* To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
*#** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
*#** &nbsp;
*#** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
*#*** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
*#*** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*#* To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
*#** create a file called 'startCorba.sh'
*#*** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notification service.
*#*** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
*#*** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
*#*** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*#** make sure startCorba has execute permissions (chmod a+x startCorba.sh)&nbsp;
*#** Create a symbolic link using update-rc.d (Debian command)&nbsp;
*#*** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
*#* TODO:
*#** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
*# Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*#* Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
*#** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
*#** ifup eth0 will also show the error
\\
*#* Network Settings (/etc/network/interfaces)
*#** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
*#*** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
*#*** edit */etc/dhcp3/dhclient.conf* to add the following line:
*#**** send host-name "foce2.shore.mbari.org"
*#*** 127.0.0.1 localhost.localdomain localhost
*#*** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
*#*** hostname mvc-debian.shore.mbari.org
*#*** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
*#**** address 134.89.32.16
*#**** netmask 255.255.254.0
*#**** gateway 134.89.32.1
*#**** broadcast 134.89.32.255
*#*** to check the hostname is set properly
*#**** uname \-n
*#**** hostname \-a
*#**** hostname \-s
*#**** hostname \-d
*#**** hostname \-f
*#**** hostname
*#** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372399</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9405133</id>
<property name="body"><![CDATA[h4. Debian 4.0 (Etch) Install

\\
* Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
* Debian install time: \~45 min depending on harddisk format time and machine speed
\\
*# Burn DVD with&nbsp;net install and&nbsp;boot internet connected&nbsp;PC from DVD
*## Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
*## Domain: shore.mbari.org
*## Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
*## users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
*## Use network mirror for complete package list (if internet connected)
*## Software install: For embedded Linux machine Standard (only), For desktop development Standard+Desktop
*## Install Grub to the master boot record
*# Remove DVD and allow boot from harddisk
*# After boot, login as root and re-insert Debian 4.0 r7 net install DVD.
*# Standard installs require the set of packages in auv-pkgs/debian-pkg&nbsp;following packages, (source the deb-packages script as root):
*## apt-get install ant
*## apt-get install ant-optional
*## apt-get install autoconf
*## apt-get install autogen
*## apt-get install automake
*## apt-get install binutils
*## apt-get install bison
*## apt-get install cvs
*## apt-get install doxygen
*## apt-get install flex
*## apt-get install g+\+
*## apt-get install libtool
*## apt-get install make
*## apt-get install subversion
*## apt-get install libtool
*## apt-get install gdb
*## apt-get install openssl
*## apt-get install ssh
*## apt-get install minicom
*## apt-get install python-all
*## apt-get install python-all-dev
*## apt-get install lirc setserial
*## apt-get install linux-source-2.6.18
*## apt-get install kernel-package libncurses5-dev fakeroot wget build-essential
*## apt-get install xutils-dev
*## apt-get install linux-doc-2.6.18
*## apt-get install linux-manual-2.6.18
*## apt-get install manpages-dev
*## apt-get install xutils-dev
*## apt-get install jam
*## apt-get install swig
*## apt-get install libboost-regex-dev&nbsp;&nbsp;
*# Java Installation
*## Create a java installation specific to the auv-linux and auv-autonomy development and decouple from the debian system java:
*### Install in a named directory in opt, example: /opt/jdk_1.6u12.&nbsp;&nbsp;
*### Download jdk to /home/dorado1/tools/java
*### login *as root*&nbsp;and enter root password.
*### Change directory to /opt. Type: *cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
*### Change the permission of the bin&nbsp;file to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
*### Verify that you have permission to execute the file. Type:
*ls \-l*
*### Start the installation process.Type:&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*
*### Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.
*### exit from root back to user dorado1
*### In the dorado1 user profile, set the java&nbsp;environment variable to /opt/jdk_1.6u12&nbsp;
\\
\\

\\
&nbsp;

h5. Autonomy Software checkout:

cd /home/dorado1/prj&nbsp;

svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk TREX&nbsp;

copy Europa from threadfish (Yikes\! NASA version is moving ahead of TREX)
\\

Build failed (jam in TREX) due to missing boost regex loadable module.&nbsp;&nbsp;&nbsp; To resolve this, a debian package was installed (developer version) which is a bit of a sledge hammer.&nbsp;&nbsp; Need to determine of this is a standard component of the OS or a developer package specific to TREX (judged it to be an OS component)

apt-get install _libboost-regex-dev_

Build failed due to libSystem.so missing

Fix:&nbsp; add $PLASMA_HOME/lib to LD_LIBRARY_PATH

\\
&nbsp;
\\
\\
* \\
*# Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*#* as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*#* export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*#* cvs login
*#* cvs checkout auv-pkgs
*#* cvs checkout auv-shared
*#* cvs checkout auv-linux
*#* cd /home/auv/prj/auv-pkgs
*#* source set-auv-env (or ". set-auv-env")
*#* edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*#* setup, build and install auv-pkgs
*#** su root
*#** cd $AUV_PKGS
*#** . 1_omniORB.bat
*#** . 2_omniNotify.bat
*#** . 3_gctpc.bat
*#** . 4_apr.bat
*#** . 5_apr-util.bat
*#** . 6_log4cxx.bat
*#** . 7_netcdb.bat
*#** . 8_newmat.bat
*#** . 9_cppunit.bat
*#** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*#* As root, add auv startup script to /etc/init.d:&nbsp;&nbsp; /etc/init.d/auv-startup.sh
*#** \#\!/bin/sh
\# auv startup script
*#** &nbsp;
*#** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
*#** chmod 777 /dev/mqueue
*#* chmod a+x auv-startup.sh&nbsp;
*#* Then (as root) update the startup sequence:&nbsp;update-rc.d \-f auv-startup.sh start 80 2 3 4 5 .
*#** *\#*\*\* Note to remove: update-rc.d S80auv-startup.sh remove
*#** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*#* exit back to user 'auv'
*#* build auv-shared
*#** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
*#** apt-get install xutils-dev to get gccmakedep
*#* build auv-linux
*#** edit taskIF Makefile - comment out idlj and javac lines
*#* Run supervisor (this creates logs/latest link)
*#** from auv-linux/onboard, run
*#*** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
*#*** &nbsp;
*# Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*#* Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*#* logged in as root
*#* cp&nbsp;serial.conf /etc&nbsp;
*#* cd /usr/src
*#* tar jxf linux-source-2.6.18.tar.bz2
*#* cd linux-source-2.6.18
*#* make clean && make mrproper
*#* uname \-r to get /boot/config-'uname \-r' name
*#* cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*#* make menuconfig
*#** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
*#** Device Drivers&nbsp; \--> Character devices
*#** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
*#** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
*#** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
*#** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
*#** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
*#** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*#* make-kpkg clean
*#* fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
*#** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*#* dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*#* _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*#* serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*#* To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
*#** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
*#** &nbsp;
*#** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
*#*** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
*#*** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*#* To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
*#** create a file called 'startCorba.sh'
*#*** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notification service.
*#*** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
*#*** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
*#*** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*#** make sure startCorba has execute permissions (chmod a+x startCorba.sh)&nbsp;
*#** Create a symbolic link using update-rc.d (Debian command)&nbsp;
*#*** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
*#* TODO:
*#** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
*# Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*#* Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
*#** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
*#** ifup eth0 will also show the error
\\
*#* Network Settings (/etc/network/interfaces)
*#** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
*#*** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
*#*** edit */etc/dhcp3/dhclient.conf* to add the following line:
*#**** send host-name "foce2.shore.mbari.org"
*#*** 127.0.0.1 localhost.localdomain localhost
*#*** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
*#*** hostname mvc-debian.shore.mbari.org
*#*** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
*#**** address 134.89.32.16
*#**** netmask 255.255.254.0
*#**** gateway 134.89.32.1
*#**** broadcast 134.89.32.255
*#*** to check the hostname is set properly
*#**** uname \-n
*#**** hostname \-a
*#**** hostname \-s
*#**** hostname \-d
*#**** hostname \-f
*#**** hostname
*#** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372401</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9405127</id>
<property name="body"><![CDATA[h4. Debian 4.0 (Etch) Install

\\
* Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
* Debian install time: \~45 min depending on harddisk format time and machine speed
\\
*# Burn DVD with&nbsp;net install and&nbsp;boot internet connected&nbsp;PC from DVD
*## Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
*## Domain: shore.mbari.org
*## Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
*## users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
*## Use network mirror for complete package list (if internet connected)
*## Software install: For embedded Linux machine Standard (only), For desktop development Standard+Desktop
*## Install Grub to the master boot record
*# Remove DVD and allow boot from harddisk
*# After boot, login as root and re-insert Debian 4.0 r7 net install DVD.
*# Standard installs require the following packages, (source the deb-packages script as root):
*# *## apt-get install ant
*## apt-get install ant-optional
*## apt-get install autoconf
*## apt-get install autogen
*## apt-get install automake
*## apt-get install binutils
*## apt-get install bison
*## apt-get install cvs
*## apt-get install doxygen
*## apt-get install flex
*## apt-get install g+\+
*## apt-get install libtool
*## apt-get install make
*## apt-get install subversion
*## apt-get install libtool
*## apt-get install gdb
*## apt-get install openssl
*## apt-get install ssh
*## apt-get install minicom
*## apt-get install python-all
*## apt-get install python-all-dev
*## apt-get install lirc setserial
*## apt-get install linux-source-2.6.18
*## apt-get install kernel-package libncurses5-dev fakeroot wget build-essential
*## apt-get install xutils-dev
*## apt-get install linux-doc-2.6.18
*## apt-get install linux-manual-2.6.18
*## apt-get install manpages-dev
*## apt-get install xutils-dev
\\
*# Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*#* as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*#* export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*#* cvs login
*#* cvs checkout auv-pkgs
*#* cvs checkout auv-shared
*#* cvs checkout auv-linux
*#* cd /home/auv/prj/auv-pkgs
*#* source set-auv-env (or ". set-auv-env")
*#* edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*#* setup, build and install auv-pkgs
*#** su root
*#** cd $AUV_PKGS
*#** . 1_omniORB.bat
*#** . 2_omniNotify.bat
*#** . 3_gctpc.bat
*#** . 4_apr.bat
*#** . 5_apr-util.bat
*#** . 6_log4cxx.bat
*#** . 7_netcdb.bat
*#** . 8_newmat.bat
*#** . 9_cppunit.bat
*#** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*#* As root, add auv startup script to /etc/init.d:&nbsp;&nbsp; /etc/init.d/auv-startup.sh
*#** \#\!/bin/sh
\# auv startup script
*#** &nbsp;
*#** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
*#** chmod 777 /dev/mqueue
*#* chmod a+x auv-startup.sh&nbsp;
*#* Then (as root) update the startup sequence:&nbsp;update-rc.d \-f auv-startup.sh start 80 2 3 4 5 .
*#** *\#*\*\* Note to remove: update-rc.d S80auv-startup.sh remove
*#** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*#* exit back to user 'auv'
*#* build auv-shared
*#** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
*#** apt-get install xutils-dev to get gccmakedep
*#* build auv-linux
*#** edit taskIF Makefile - comment out idlj and javac lines
*#* Run supervisor (this creates logs/latest link)
*#** from auv-linux/onboard, run
*#*** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
*#*** &nbsp;
*# Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*#* Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*#* logged in as root
*#* cp&nbsp;serial.conf /etc&nbsp;
*#* cd /usr/src
*#* tar jxf linux-source-2.6.18.tar.bz2
*#* cd linux-source-2.6.18
*#* make clean && make mrproper
*#* uname \-r to get /boot/config-'uname \-r' name
*#* cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*#* make menuconfig
*#** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
*#** Device Drivers&nbsp; \--> Character devices
*#** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
*#** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
*#** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
*#** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
*#** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
*#** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*#* make-kpkg clean
*#* fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
*#** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*#* dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*#* _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*#* serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*#* To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
*#** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
*#** &nbsp;
*#** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
*#*** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
*#*** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*#* To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
*#** create a file called 'startCorba.sh'
*#*** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notification service.
*#*** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
*#*** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
*#*** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*#** make sure startCorba has execute permissions (chmod a+x startCorba.sh)&nbsp;
*#** Create a symbolic link using update-rc.d (Debian command)&nbsp;
*#*** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
*#* TODO:
*#** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
*# Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*#* Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
*#** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
*#** ifup eth0 will also show the error
\\
*#* Network Settings (/etc/network/interfaces)
*#** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
*#*** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
*#*** edit */etc/dhcp3/dhclient.conf* to add the following line:
*#**** send host-name "foce2.shore.mbari.org"
*#*** 127.0.0.1 localhost.localdomain localhost
*#*** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
*#*** hostname mvc-debian.shore.mbari.org
*#*** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
*#**** address 134.89.32.16
*#**** netmask 255.255.254.0
*#**** gateway 134.89.32.1
*#**** broadcast 134.89.32.255
*#*** to check the hostname is set properly
*#**** uname \-n
*#**** hostname \-a
*#**** hostname \-s
*#**** hostname \-d
*#**** hostname \-f
*#**** hostname
*#** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372395</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9405129</id>
<property name="body"><![CDATA[h4. Debian 4.0 (Etch) Install

\\
* Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
* Debian install time: \~45 min depending on harddisk format time and machine speed
\\
*# Burn DVD with&nbsp;net install and&nbsp;boot internet connected&nbsp;PC from DVD
*## Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
*## Domain: shore.mbari.org
*## Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
*## users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
*## Use network mirror for complete package list (if internet connected)
*## Software install: For embedded Linux machine Standard (only), For desktop development Standard+Desktop
*## Install Grub to the master boot record
*# Remove DVD and allow boot from harddisk
*# After boot, login as root and re-insert Debian 4.0 r7 net install DVD.
*# Standard installs require the following packages, (source the deb-packages script as root):
*# \*## apt-get install ant
*## apt-get install ant-optional
*## apt-get install autoconf
*## apt-get install autogen
*## apt-get install automake
*## apt-get install binutils
*## apt-get install bison
*## apt-get install cvs
*## apt-get install doxygen
*## apt-get install flex
*## apt-get install g+\+
*## apt-get install libtool
*## apt-get install make
*## apt-get install subversion
*## apt-get install libtool
*## apt-get install gdb
*## apt-get install openssl
*## apt-get install ssh
*## apt-get install minicom
*## apt-get install python-all
*## apt-get install python-all-dev
*## apt-get install lirc setserial
*## apt-get install linux-source-2.6.18
*## apt-get install kernel-package libncurses5-dev fakeroot wget build-essential
*## apt-get install xutils-dev
*## apt-get install linux-doc-2.6.18
*## apt-get install linux-manual-2.6.18
*## apt-get install manpages-dev
*## apt-get install xutils-dev
*## apt-get install jam
*## apt-get install swig
*## apt-get install libboost-regex-dev&nbsp;&nbsp;
*# Java Installation
*## Create a java installation specific to the auv-linux and auv-autonomy development and decouple from the debian system java:
*### Install in a named directory in opt, example: /opt/jdk_1.6u12
*### In the dorado1 user profile, set the environment variable to /opt/jdk_1.6u12&nbsp;
*### Download jdk to /home/dorado1/tools/java
*### At the terminal: Type:
*su*
*### Enter the root password.
*### Change to the directory in which you want to install and copy the java installer bin to this directory. Type:
*cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
*### Change the permission of the bin&nbsp;file to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
*### Verify that you have permission to execute the file. Type:
*ls \-l*
*### Start the installation process.Type:&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*
*### Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.
\\
\\

\\
&nbsp;

h5. Autonomy Software checkout:

cd /home/dorado1/prj&nbsp;

svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk TREX&nbsp;

copy Europa from threadfish (Yikes\! NASA version is moving ahead of TREX)
\\

Build failed (jam in TREX) due to missing boost regex loadable module.&nbsp;&nbsp;&nbsp; To resolve this, a debian package was installed (developer version) which is a bit of a sledge hammer.&nbsp;&nbsp; Need to determine of this is a standard component of the OS or a developer package specific to TREX (judged it to be an OS component)

apt-get install _libboost-regex-dev_

Build failed due to libSystem.so missing

Fix:&nbsp; add $PLASMA_HOME/lib to LD_LIBRARY_PATH

\\
&nbsp;\\ \\
* \\
*# Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*#* as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*#* export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*#* cvs login
*#* cvs checkout auv-pkgs
*#* cvs checkout auv-shared
*#* cvs checkout auv-linux
*#* cd /home/auv/prj/auv-pkgs
*#* source set-auv-env (or ". set-auv-env")
*#* edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*#* setup, build and install auv-pkgs
*#** su root
*#** cd $AUV_PKGS
*#** . 1_omniORB.bat
*#** . 2_omniNotify.bat
*#** . 3_gctpc.bat
*#** . 4_apr.bat
*#** . 5_apr-util.bat
*#** . 6_log4cxx.bat
*#** . 7_netcdb.bat
*#** . 8_newmat.bat
*#** . 9_cppunit.bat
*#** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*#* As root, add auv startup script to /etc/init.d:&nbsp;&nbsp; /etc/init.d/auv-startup.sh
*#** \#\!/bin/sh
\# auv startup script
*#** &nbsp;
*#** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
*#** chmod 777 /dev/mqueue
*#* chmod a+x auv-startup.sh&nbsp;
*#* Then (as root) update the startup sequence:&nbsp;update-rc.d \-f auv-startup.sh start 80 2 3 4 5 .
*#** *\#*\*\* Note to remove: update-rc.d S80auv-startup.sh remove
*#** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*#* exit back to user 'auv'
*#* build auv-shared
*#** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
*#** apt-get install xutils-dev to get gccmakedep
*#* build auv-linux
*#** edit taskIF Makefile - comment out idlj and javac lines
*#* Run supervisor (this creates logs/latest link)
*#** from auv-linux/onboard, run
*#*** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
*#*** &nbsp;
*# Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*#* Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*#* logged in as root
*#* cp&nbsp;serial.conf /etc&nbsp;
*#* cd /usr/src
*#* tar jxf linux-source-2.6.18.tar.bz2
*#* cd linux-source-2.6.18
*#* make clean && make mrproper
*#* uname \-r to get /boot/config-'uname \-r' name
*#* cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*#* make menuconfig
*#** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
*#** Device Drivers&nbsp; \--> Character devices
*#** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
*#** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
*#** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
*#** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
*#** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
*#** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*#* make-kpkg clean
*#* fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
*#** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*#* dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*#* _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*#* serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*#* To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
*#** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
*#** &nbsp;
*#** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
*#*** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
*#*** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*#* To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
*#** create a file called 'startCorba.sh'
*#*** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notification service.
*#*** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
*#*** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
*#*** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*#** make sure startCorba has execute permissions (chmod a+x startCorba.sh)&nbsp;
*#** Create a symbolic link using update-rc.d (Debian command)&nbsp;
*#*** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
*#* TODO:
*#** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
*# Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*#* Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
*#** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
*#** ifup eth0 will also show the error
\\
*#* Network Settings (/etc/network/interfaces)
*#** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
*#*** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
*#*** edit */etc/dhcp3/dhclient.conf* to add the following line:
*#**** send host-name "foce2.shore.mbari.org"
*#*** 127.0.0.1 localhost.localdomain localhost
*#*** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
*#*** hostname mvc-debian.shore.mbari.org
*#*** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
*#**** address 134.89.32.16
*#**** netmask 255.255.254.0
*#**** gateway 134.89.32.1
*#**** broadcast 134.89.32.255
*#*** to check the hostname is set properly
*#**** uname \-n
*#**** hostname \-a
*#**** hostname \-s
*#**** hostname \-d
*#**** hostname \-f
*#**** hostname
*#** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372397</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9405125</id>
<property name="body"><![CDATA[h4. Debian 4.0 (Etch) Install
\\
* Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
* Debian install time: \~45 min depending on harddisk format time and machine speed\\
*# Burn DVD with&nbsp;net install and&nbsp;boot internet connected&nbsp;PC from DVD
*## Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
*## Domain: shore.mbari.org
*## Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
*## users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
*## Use network mirror for complete package list (if internet connected)
*## Software install: For embedded Linux machine Standard (only), For desktop development Standard+Desktop
*## Install Grub to the master boot record
*# Remove DVD and allow boot from harddisk
*# After boot, login as root and re-insert Debian 4 r3 net install DVD.
*# Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*# Standard installs require the following packages:
*## apt-get install ant
*## apt-get install ant-optional
*## apt-get install autoconf
*## apt-get install autogen
*## apt-get install automake
*## apt-get install binutils
*## apt-get install bison
*## apt-get install cvs
*## apt-get install doxygen
*## apt-get install flex
*## apt-get install g+\+
*## apt-get install libtool
*## apt-get install make
*## apt-get install subversion
*## apt-get install libtool
*## apt-get install gdb
*## apt-get install openssl
*## apt-get install ssh
*## apt-get install minicom
*## apt-get install python-all
*## apt-get install python-all-dev
*## apt-get install lirc setserial
*## apt-get install linux-source-2.6.18
*## apt-get install kernel-package libncurses5-dev fakeroot wget build-essential
*## apt-get install xutils-dev
*## apt-get install linux-doc-2.6.18
*## apt-get install linux-manual-2.6.18
*## apt-get install manpages-dev
*## apt-get install xutils-dev\\
*# Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*#* as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*#* export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*#* cvs login
*#* cvs checkout auv-pkgs
*#* cvs checkout auv-shared
*#* cvs checkout auv-linux
*#* cd /home/auv/prj/auv-pkgs
*#* source set-auv-env (or ". set-auv-env")
*#* edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*#* setup, build and install auv-pkgs
*#** su root
*#** cd $AUV_PKGS
*#** . 1_omniORB.bat
*#** . 2_omniNotify.bat
*#** . 3_gctpc.bat
*#** . 4_apr.bat
*#** . 5_apr-util.bat
*#** . 6_log4cxx.bat
*#** . 7_netcdb.bat
*#** . 8_newmat.bat
*#** . 9_cppunit.bat
*#** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*#* As root, add auv startup script to /etc/init.d:&nbsp;&nbsp; /etc/init.d/auv-startup.sh
*#** \#\!/bin/sh
\# auv startup script
*#** &nbsp;
*#** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
*#** chmod 777 /dev/mqueue
*#* chmod a+x auv-startup.sh&nbsp;
*#* Then (as root) update the startup sequence:&nbsp;update-rc.d \-f auv-startup.sh start 80 2 3 4 5 .
*#** *#*** Note to remove: update-rc.d S80auv-startup.sh remove
*#** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*#* exit back to user 'auv'
*#* build auv-shared
*#** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
*#** apt-get install xutils-dev to get gccmakedep
*#* build auv-linux
*#** edit taskIF Makefile - comment out idlj and javac lines
*#* Run supervisor (this creates logs/latest link)
*#** from auv-linux/onboard, run
*#*** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
*#*** &nbsp;
*# Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*#* Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*#* logged in as root
*#* cp&nbsp;serial.conf /etc&nbsp;
*#* cd /usr/src
*#* tar jxf linux-source-2.6.18.tar.bz2
*#* cd linux-source-2.6.18
*#* make clean && make mrproper
*#* uname \-r to get /boot/config-'uname \-r' name
*#* cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*#* make menuconfig
*#** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
*#** Device Drivers&nbsp; \--> Character devices
*#** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
*#** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
*#** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
*#** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
*#** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
*#** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*#* make-kpkg clean
*#* fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
*#** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*#* dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*#* _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*#* serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*#* To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
*#** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
*#** &nbsp;
*#** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
*#*** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
*#*** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*#* To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
*#** create a file called 'startCorba.sh'
*#*** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notification service.
*#*** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
*#*** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
*#*** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*#** make sure startCorba has execute permissions (chmod a+x startCorba.sh)&nbsp;
*#** Create a symbolic link using update-rc.d (Debian command)&nbsp;
*#*** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
*#* TODO:
*#** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
*# Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*#* Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
*#** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
*#** ifup eth0 will also show the error
\\
*#* Network Settings (/etc/network/interfaces)
*#** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
*#*** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
*#*** edit */etc/dhcp3/dhclient.conf* to add the following line:
*#**** send host-name "foce2.shore.mbari.org"
*#*** 127.0.0.1 localhost.localdomain localhost
*#*** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
*#*** hostname mvc-debian.shore.mbari.org
*#*** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
*#**** address 134.89.32.16
*#**** netmask 255.255.254.0
*#**** gateway 134.89.32.1
*#**** broadcast 134.89.32.255
*#*** to check the hostname is set properly
*#**** uname \-n
*#**** hostname \-a
*#**** hostname \-s
*#**** hostname \-d
*#**** hostname \-f
*#**** hostname
*#** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372393</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9405143</id>
<property name="body"><![CDATA[h4. Debian 4.0 (Etch) Install

\\
* Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
* Debian install time: \~45 min depending on harddisk format time and machine speed
\\
*# Burn DVD with&nbsp;Debian 4.0 r7 net install and&nbsp;boot internet connected&nbsp;PC from DVD
*## Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
*## Domain: shore.mbari.org
*## Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
*## users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
*## Use network mirror for complete package list (if internet connected)
*## Software install: For embedded Linux machine Standard (only), For desktop development Standard+Desktop
*## Install Grub to the master boot record
*# Remove DVD and allow boot from harddisk
*# Standard installs require additional debian packages,&nbsp;these are&nbsp;installed by&nbsp;running the&nbsp;script included in auv-pkgs/debian-pkg directory.&nbsp;&nbsp; Login as root and type:&nbsp;*source /home/dorado1/prj/auv-pkgs/debian-pkg/deb-packages*
*## &nbsp;
*# Java Installation
*## Create a java installation specific to the auv-linux and auv-autonomy development and decouple from the debian system java:
*### Install in a named directory in opt, example: /opt/jdk_1.6u12.&nbsp;&nbsp;
*### Download jdk to /home/dorado1/tools/java
*### login *as root*&nbsp;and enter root password.
*### Change directory to /opt. Type: *cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
*### Change the permission of the bin&nbsp;file to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
*### Verify that you have permission to execute the file. Type:
*ls \-l*
*### Start the installation process.Type:&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*
*### Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.
*### exit from root back to user dorado1
*### In the dorado1 user profile, set the java&nbsp;environment variable to /opt/jdk_1.6u12
\\

h4. AUV-Linux Install and Setup

# Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
#* as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
#* export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
#* cvs login
#* cvs checkout auv-pkgs
#* cvs checkout auv-shared
#* cvs checkout auv-linux
#* cd /home/auv/prj/auv-pkgs
#* source set-auv-env (or ". set-auv-env")
#* edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
#* setup, build and install auv-pkgs
#** su root
#** cd $AUV_PKGS
#** . 1_omniORB.bat
#** . 2_omniNotify.bat
#** . 3_gctpc.bat
#** . 4_apr.bat
#** . 5_apr-util.bat
#** . 6_log4cxx.bat
#** . 7_netcdb.bat
#** . 8_newmat.bat
#** . 9_cppunit.bat
#** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
#* As root, add auv startup script to /etc/init.d:&nbsp;&nbsp; /etc/init.d/auv-startup.sh
#** \#\!/bin/sh
\# auv startup script
#** &nbsp;
#** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
#** chmod 777 /dev/mqueue
#* chmod a+x auv-startup.sh&nbsp;
#* Then (as root) update the startup sequence:&nbsp;update-rc.d \-f auv-startup.sh start 80 2 3 4 5 .
#** *\#*\*\* Note to remove: update-rc.d S80auv-startup.sh remove
#** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
#* exit back to user 'auv'
#* build auv-shared
#** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
#** apt-get install xutils-dev to get gccmakedep
#* build auv-linux
#** edit taskIF Makefile - comment out idlj and javac lines
#* Run supervisor (this creates logs/latest link)
#** from auv-linux/onboard, run
#*** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
\\
\\

\\
&nbsp;

h5. Autonomy Software checkout:

cd /home/dorado1/prj&nbsp;

svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk TREX&nbsp;

copy Europa from threadfish (Yikes\! NASA version is moving ahead of TREX)
\\

Build failed (jam in TREX) due to missing boost regex loadable module.&nbsp;&nbsp;&nbsp; To resolve this, a debian package was installed (developer version) which is a bit of a sledge hammer.&nbsp;&nbsp; Need to determine of this is a standard component of the OS or a developer package specific to TREX (judged it to be an OS component)

apt-get install _libboost-regex-dev_

Build failed due to libSystem.so missing

Fix:&nbsp; add $PLASMA_HOME/lib to LD_LIBRARY_PATH
\\
\\
# Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
#* Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
#* logged in as root
#* cp&nbsp;serial.conf /etc&nbsp;
#* cd /usr/src
#* tar jxf linux-source-2.6.18.tar.bz2
#* cd linux-source-2.6.18
#* make clean && make mrproper
#* uname \-r to get /boot/config-'uname \-r' name
#* cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
#* make menuconfig
#** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
#** Device Drivers&nbsp; \--> Character devices
#** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
#** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
#** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
#** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
#** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
#** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
#* make-kpkg clean
#* fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
#** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
#* dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
#* _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
#* serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
#* To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
#** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
#** &nbsp;
#** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
#*** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
#*** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
#* To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
#** create a file called 'startCorba.sh'
#*** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notification service.
#*** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
#*** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
#*** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
#** make sure startCorba has execute permissions (chmod a+x startCorba.sh)&nbsp;
#** Create a symbolic link using update-rc.d (Debian command)&nbsp;
#*** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
#* TODO:
#** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
# Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
#* Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
#** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
#** ifup eth0 will also show the error
\\
#* Network Settings (/etc/network/interfaces)
#** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
#*** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
#*** edit */etc/dhcp3/dhclient.conf* to add the following line:
#**** send host-name "foce2.shore.mbari.org"
#*** 127.0.0.1 localhost.localdomain localhost
#*** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
#*** hostname mvc-debian.shore.mbari.org
#*** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
#**** address 134.89.32.16
#**** netmask 255.255.254.0
#**** gateway 134.89.32.1
#**** broadcast 134.89.32.255
#*** to check the hostname is set properly
#**** uname \-n
#**** hostname \-a
#**** hostname \-s
#**** hostname \-d
#**** hostname \-f
#**** hostname
#** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\

* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
** Debian Packages required to build auv-linux and TREX:
**# apt-get install ant
**# apt-get install ant-optional
**# apt-get install autoconf
**# apt-get install autogen
**# apt-get install automake
**# apt-get install binutils
**# apt-get install bison
**# apt-get install cvs
**# apt-get install doxygen
**# apt-get install flex
**# apt-get install g+\+
**# apt-get install libtool
**# apt-get install make
**# apt-get install subversion
**# apt-get install libtool
**# apt-get install gdb
**# apt-get install openssl
**# apt-get install ssh
**# apt-get install minicom
**# apt-get install python-all
**# apt-get install python-all-dev
**# apt-get install lirc setserial
**# apt-get install linux-source-2.6.18
**# apt-get install kernel-package libncurses5-dev fakeroot wget build-essential
**# apt-get install xutils-dev
**# apt-get install linux-doc-2.6.18
**# apt-get install linux-manual-2.6.18
**# apt-get install manpages-dev
**# apt-get install xutils-dev
**# apt-get install jam
**# apt-get install swig
**# apt-get install libboost-regex-dev&nbsp;
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372411</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9405093</id>
<property name="body"><![CDATA[Debian 4.0 (Etch) Install

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** As root, add auv startup script to /etc/init.d:&nbsp;&nbsp; /etc/init.d/auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** chmod a+x auv-startup.sh&nbsp;
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f auv-startup.sh start 80 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp;
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
**** create a file called 'startCorba.sh'
***** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notification service.
***** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
***** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
***** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
**** make sure startCorba has execute permissions (chmod a+x startCorba.sh)&nbsp;
**** Create a symbolic link using update-rc.d (Debian command)&nbsp;
***** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** edit */etc/dhcp3/dhclient.conf* to add the following line:
****** send host-name "foce2.shore.mbari.org"
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372361</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9405091</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* config out the audio support (kahlua)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
* 25 July 2008 - looks like there is a memory leak in the ashtec driver (based on the overnight test).
** download duma_2_5_14, untar and run 'make install'
** Modify linker command file to add \-lduma
** &nbsp;

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.
\\

Xtreme104 Serial Setup
\\

serial.conf looks like

mvc-debian4:/proc# cat /etc/serial.conf
/dev/ttyS1 uart 16450 port 0x2F8 irq 3

\#Xtreme card
\# Group A
/dev/ttyS2 uart 16850 port 0x380 irq 9&nbsp; baud_base 1500000
/dev/ttyS3 uart 16850 port 0x388 irq 9&nbsp; baud_base 1500000
/dev/ttyS4 uart 16850 port 0x390 irq 9&nbsp; baud_base 1500000
/dev/ttyS5 uart 16850 port 0x398 irq 9&nbsp; baud_base 1500000

\# Group B
/dev/ttyS6 uart 16850 port 0x300 irq 9&nbsp; baud_base 1500000
/dev/ttyS7 uart 16850 port 0x308 irq 9&nbsp; baud_base 1500000
/dev/ttyS8 uart 16850 port 0x310 irq 9&nbsp; baud_base 1500000
/dev/ttyS9 uart 16850 port 0x318 irq 9&nbsp; baud_base 1500000

\# Group C
/dev/ttyS10 uart 16850 port 0x150 irq 9 baud_base 1500000
/dev/ttyS11 uart 16850 port 0x158 irq 9 baud_base 1500000
/dev/ttyS12 uart 16850 port 0x160 irq 9 baud_base 1500000
/dev/ttyS13 uart 16850 port 0x168 irq 9 baud_base 1500000
&nbsp;
\\

mvc-debian4:/proc# cat /proc/interrupts
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU0
&nbsp; 0:&nbsp;&nbsp; 45634199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; timer
&nbsp; 1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; i8042
&nbsp; 2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; cascade
&nbsp; 6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; floppy
&nbsp; 7:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; parport0
&nbsp; 8:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; rtc
&nbsp; 9:&nbsp;&nbsp; 67591801&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; serial
&nbsp;11:&nbsp;&nbsp;&nbsp;&nbsp; 865812&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; eth0
&nbsp;14:&nbsp;&nbsp;&nbsp;&nbsp; 153327&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; ide0
NMI:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
LOC:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
ERR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
MIS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
mvc-debian4:/proc# setserial \-g /dev/ttyS5
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
mvc-debian4:/proc# setserial \-g /dev/ttyS\*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16450, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: 16850, Port: 0x0150, IRQ: 2
/dev/ttyS11, UART: 16850, Port: 0x0158, IRQ: 2
/dev/ttyS2, UART: 16850, Port: 0x0380, IRQ: 2
/dev/ttyS3, UART: 16850, Port: 0x0388, IRQ: 2
/dev/ttyS4, UART: 16850, Port: 0x0390, IRQ: 2
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
/dev/ttyS6, UART: 16850, Port: 0x0300, IRQ: 2
/dev/ttyS7, UART: 16850, Port: 0x0308, IRQ: 2
/dev/ttyS8, UART: 16850, Port: 0x0310, IRQ: 2
/dev/ttyS9, UART: 16850, Port: 0x0318, IRQ: 2
&nbsp;

&nbsp;mvc-debian4:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0150-0157 : serial
0158-015f : serial
01f0-01f7 : ide0
02f8-02ff : serial
0300-0307 : serial
0308-030f : serial
0310-0317 : serial
0318-031f : serial
0378-037a : parport0
037b-037f : parport0
0380-0387 : serial
0388-038f : serial
0390-0397 : serial
0398-039f : serial
03c0-03df : vga\+
03f2-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-03ff : serial
0cf8-0cff : PCI conf1
e000-e03f : 0000:00:11.0
&nbsp; e000-e03f : e100
f000-f00f : 0000:00:12.2
&nbsp; f000-f007 : ide0
&nbsp; f008-f00f : ide1
\\

h4. Useful Debian links

** www.google.com
** [http://www.debianhelp.org/]
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** As root, add auv startup script to /etc/init.d:&nbsp;&nbsp; /etc/init.d/auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** chmod a+x auv-startup.sh&nbsp;
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f auv-startup.sh start 80 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
**** create a file called 'startCorba.sh'
***** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notification service.
***** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
***** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
***** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
**** make sure startCorba has execute permissions (chmod a+x startCorba.sh)&nbsp;
**** Create a symbolic link using update-rc.d (Debian command)&nbsp;
***** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** edit */etc/dhcp3/dhclient.conf* to add the following line:
****** send host-name "foce2.shore.mbari.org"
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\
\\

Notes from ConnectTech Support site for Xtreme104 Isolated 12 port serial card
\\

&nbsp;Configuring the Kernel(2.6.x){color:black}The 2.6 kernel has support for the 8250/16650 UART in <src>/drivers/serial/8250.c. You should be able to run our ISA serial cards(Echo, DFlex, Xtreme/104) with this driver and the proper Kernel configuration.{color}{color:black}You'll need to edit your serial.h file in <src>/include/asm and add in the extra serial ports of the card.{color}{color:black}Here's what I added in red for a 4 port Xtreme/104 card at I/O 300 and IRQ 5. You can do the same with your card settings. If your card is using a higher clock than be sure to adjust your BAUD_BAUD value accordingly{color}

Base baud for CTI boards. Default Max Baud = 115200 bps

define CTI_BAUD (1843200 /16){color:black}define STD_SERIAL_PORT_DFNS{color}
{color:black}UARTCLKPORT{color}{color:black}IRQ FLAGS \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }
ttyS0
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }
ttyS1
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }
ttyS2
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM_FLAGS }
ttyS3
{ 0, CTI_BAUD, 0x300, 5, STD_COM_FLAGS }
ttyS4
{ 0, CTI_BAUD, 0x308, 5, STD_COM_FLAGS }
ttyS5
{ 0, CTI_BAUD, 0x310, 5, STD_COM_FLAGS }
ttyS6
{ 0, CTI_BAUD, 0x318, 5, STD_COM_FLAGS }
ttyS7
\\

If your board has a difference clock, be sure to change the CTI_BAUD value appropriately.
\\
\\
\\
\\
\\
\\
\\
\\
Re-Compiling the Kernel(Linux 2.6)
\\
\\
\*# cd
{Linux}*

At this point, you have a choice of two configuration utilities that you can use to configure your kernel. One utility, named config, is text based, and the other, named menuconfig, has a simple GUI (Graphical User Interface). The menuconfig utility is easier to use than config, so unless you have specific reasons use the menuconfig utility.

To use the menuconfig / config utility:

*\# make menuconfig*
Or
*\# make config* Once the configuration utility you choose is running, make sure that the following options are selected. Below shows the setting that must be enabled using the menuconfig and config utilities.

config: CONFIG_PCI
menuconfig: (Bus Options \-> PCI Support)\\

config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> 8250/16550 and compatible serial support)
 

config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Extended 8250/16550 serial driver options)

config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support more than 4 legacy serial ports)
 

config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support for sharing serial interrupts)

After all of the options have been checked and enabled, select exit. You will be prompted to save the new kernel configuration. Select yes. After you have finished configuring your kernel, issue the two following commands:

*\# make clean*
*\# make bzImage*
*\# make modules*
*\# make modules_install{*}Building/Installing the Kernel
NOTE: These instructions are for Red Hat standard installs. If you use a different distribution, or have set up your own system, these instructions will likely not help you. In that case please contact Connect Tech support at support@connecttech.com

Copy the kernel and system map to the boot partition:

The "make bzImage" step created the kernel in the subdirectory {Linux}
/arch//boot. If you don't know what CPU type you're using, you can find the new kernel by:
\\
# ls \-l
{Linux}/arch/*/boot/bzImage

The < cpu type > is the "*" part of the pathname of the newest kernel.
/arch//boot will be referenced by {arch}.

# cp {Linux}
/
{arch}
/bzImage /boot/vmlinuz-bh
# cp
{Linux}
/System.map /boot/System.map-bh

You may choose any postfix, \-df is a handy one. The postfix merely distinguishes between the kernel you've just built and other kernels already installed. It has no other purpose.
&nbsp;
Creating Nodes (Ports) For the Host Adapter
NOTE: Depending on your kernel distribution and configuration, nodes(ports) are often created automatically and you can skip this step. Check to see if they exist before proceeding.

Now that we have the new kernel in place capable of supporting the Blue Heat serial adapter we must create nodes, or ports, to allow the host adapter to communicate with other devices.

To begin, boot the new kernel. After the kernel has booted, open up the messages file using Vi, or your favorite text editor:
# vi
{log_path}/messages
Where {log_path}
is where the system logs are stored. Typically,
{log_path} = /var/log but this may be different in some distributions/systems.

Go to the bottom of the file and search backwards for references to "ttySxx" where xx is a number. You should see ttyS0 and ttyS1 for the standard serial ports, as well as a ttySxx entrie for each installed Echo/Dflex port. In order to use the new ports, these ttySxx entries must exist in the /dev directory. If they do not exist (they aren't created automatically, but do persist after reboots) you must make them with the following command:

# mknod -m [mode] /dev/ttySxx c 4 yy
[mode] is the file mode (permissions) you wish the device to have. 600 is often good.
xx is the number associated with the device which you have seen in the messages file.
yy is just xx + 64

You may also wish to make the corresponding cuaxx devices, but they are being phased out:

# mknod -m {mode} /dev/cuaxx c 5 yy
xx and yy should match the xx and yy from the previous mknod command

Here is an example of what you would do to add the nodes to your /dev directory:
First I opened the Vi editor and search for ttyS*. The results of the search show me that I have ttyS00 and ttyS01 (the standard serial ports) entries, as well as four other entries: ttyS05, ttyS06, ttyS07 and ttyS08. These four entries correspond to the four new ports for my CTI host adapter. (Right now, we are assuming a four-port card. You may have fewer or more ports, depending on the type of card you have). I've written down the four entries on a sheet of paper, seeing how my memory is a little short. Now I would like to make the nodes. From the command line, I type in the four following entries:

# mknod -m 600 /dev/ttyS05 c 4 69
# mknod -m 600 /dev/ttyS06 c 4 70
# mknod -m 600 /dev/ttyS06 c 4 71
# mknod -m 600 /dev/ttyS07 c 4 72

and optionally execute:

# mknod -m 600 /dev/cua12 c 5 69
# mknod -m 600 /dev/cua13 c 5 70
# mknod -m 600 /dev/cua14 c 5 71
# mknod -m 600 /dev/cua15 c 5 72

With the nodes in place, this finishes off our installation
 
Multiport Support
NOTE: Multiport support is not necessary for your boards to operate properly. This may safely be skipped. It is only a performance tweak available for users with older systems. Newer PCs do not gain much performance from this tweak.

Check {log_path}
/messages again. Each serial port will have a line; all the ports on each board will be listed in sequence. An eight port board might look like:

ttyS4 at port 0x300 (irq = 5) is a ST16654
ttyS5 at port 0x308 (irq = 5) is a ST16654
ttyS6 at port 0x310 (irq = 5) is a ST16654
ttyS7 at port 0x318 (irq = 5) is a ST16654
ttyS8 at port 0x320 (irq = 5) is a ST16654
ttyS9 at port 0x328 (irq = 5) is a ST16654
ttyS10 at port 0x330 (irq = 5) is a ST16654
ttyS11 at port 0x338 (irq = 5) is a ST16654

"port" in the above listing is really short for "port address". To avoid confusion, I will refer to the port address as the "address" instead.

Your board will have a table of the port addresses in the manual that came with it. You will need to look up the address that the board has been configured for; the line will also tell you what address the status port is at.
{mask} is determined by the following table:
Number of ports       {mask}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffsetserial is used to inform the driver about the status port, in the following manner:
\\
# setserial
{port} set_multiport portX {status port address} maskX {mask} matchX 0x0
where {port}
is any one port on a given board (using the first port is usually the best way),
{status port address}
is the address of the status port as determined above,
{mask}
is the appropriate mask value for the board from the table above, and X is a multiport setting number between 1 and 4.

The multiport setting number will usually be 1, but can be other values. There may be other multiport settings on the irq that your board is using, set by other boards in your system, including other Connect Tech boards.
# setserial
{port} get_setserial
where {port}
is a port on a board that you are going to use the status port on, will reveal if there are other multiport settings in effect already. If so, take care to choose X to be the lowest empty setting number.

This needs be done only once per board that you wish to have the status port used on.

Example:
You have two boards installed, an 8 port and a 2 port. The ports on each board are:
ttyS4 at port 0x300 (irq = 5) is a ST16654
.
.
ttyS11 at port 0x338 (irq = 5) is a ST16654
ttyS12 at port 0x200 (irq = 10) is a ST16654
ttyS13 at port 0x208 (irq = 10) is a ST16654

Check to see if any other multiport settings are already in use:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0One multiport setting is already in use by another board.

This works on a per irq basis, so each irq that is used by a board needs to be checked:
# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0No multiport settings are in use.

The commands to enable use of the status port on each board would be:
# setserial /dev/ttyS4 set_multiport port2 0x340 mask2 0xff match2 0x00
# setserial /dev/ttyS12 set_multiport port1 0x240 mask1 0x03 match1 0x00

Check that the settings are in place:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x340, mask=0xff, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x240, mask=0x3, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# man setserial

may be of help also.
&nbsp;
RS-485 Line Modes Support
The utility set485 can be used to set the line mode interactively or from a startup script. Settings stick until changed or the system is rebooted.

The Linux header file ioctls.h now contains definitions for TIOCSER485GET and TIOCSER485SET. These ioctls can be used on Connect Tech 485 capable boards to set the line mode. The mode (passed as an integer) can be one of TIOCSER485FULLDUPLEX, TIOCSER485HALFDUPLEX or TIOCSER485SLAVEMULTIPLEX for full or half duplex or slave multidrop mode, respectively.
&nbsp;
The Linux 2.6 standard serial driver does not have advanced RS485 mode support as of yet. If you require this functionality please contactsupport@connecttech.comfor the latest status of patches available.
\\
More stream of consciousness ramblings:

*OmniNotify v2.1 will not compile with the latest C+\+ offerings from GNU and Microsoft.*

Why?&nbsp; Because support for the header <iostream.h> has been removed.

It is replaced by <iostream> (without the .h) and requires use of namespaces to access.

A patch to v2.1 that fixes this is attached
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372358</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9405095</id>
<property name="body"><![CDATA[h4. Debian 4.0 (Etch) Install


h4. &nbsp;

** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** As root, add auv startup script to /etc/init.d:&nbsp;&nbsp; /etc/init.d/auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** chmod a+x auv-startup.sh&nbsp;
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f auv-startup.sh start 80 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocesses.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** To auto start omniNames and&nbsp;omniNotify services at&nbsp;bootup:
**** create a file called 'startCorba.sh'
***** \#\!/bin/bash
\# Start CORBA (omniORB and omniNotify) services - name service and notification service.
***** \#&nbsp; . /etc/init.d/functions
export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):/usr/local/lib
export OMNIORB_HOME=/home/auv/prj/auv-pkgs/omniORB
export OMNIORB_CONFIG=$OMNIORB_HOME/omniORB.cfg
export OMNINAMES_LOGDIR=$OMNIORB_HOME/nameServiceLog
export OMNINOTIFY_DIR=/home/auv/prj/auv-pkgs/omniNotify
***** \# Start name service
echo "Start name service"
/usr/local/bin/omniNames &
***** \# Start notification service
echo "Start notification service"
/usr/local/bin/notifd \-c $OMNINOTIFY_DIR/channel.cfg &
**** make sure startCorba has execute permissions (chmod a+x startCorba.sh)&nbsp;
**** Create a symbolic link using update-rc.d (Debian command)&nbsp;
***** mvc-debian4:/etc/init.d# update-rc.d startCorba defaults
&nbsp;Adding system startup for /etc/init.d/startCorba ...
&nbsp;&nbsp; /etc/rc0.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc1.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc6.d/K20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc2.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc3.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc4.d/S20startCorba \-> ../init.d/startCorba
&nbsp;&nbsp; /etc/rc5.d/S20startCorba \-> ../init.d/startCorba
\\
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** edit */etc/dhcp3/dhclient.conf* to add the following line:
****** send host-name "foce2.shore.mbari.org"
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372363</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670313</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
* [Driver Porting Details]&nbsp;
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to develop termios serial driver and validate 12 port serial card kernel driver.&nbsp;&nbsp;Tune hardware
* Recommend build-up of a test PC104 (Lippert board) + Xtreme104 12 port serial card with harddisk.

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;


h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.&nbsp;
\\
\\
\\
\\
&nbsp;

h4. \\


h3.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637558</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670312</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
* [Driver Porting Details]&nbsp;
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to develop termios serial driver and validate 12 port serial card kernel driver.&nbsp;&nbsp;Tune hardware
* Recommend build-up of a test PC104 (Lippert board) + Xtreme104 12 port serial card with harddisk.

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;


h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.&nbsp;
\\
\\
\\
\\
&nbsp;

h4. \\


h3.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637557</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21397554</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}
{panel:title=TREX version}
 * *format:* 
 ** GET http://<host>/rest/version
 * Gets information of the currently running version of trex
 * *output:*
 {code:javascript}
{
    "version_major": "0",
    "version_minor": "5",
    "version_release": "0",
    "version_rc": "1",
    "svn_root": "trunk",
    "svn_rev": "1450",
    "version_str": "0.5.0-rc1 (svn:trunk[1450])"
} 
{code}
 ** *note* svn_rev may not be a integer but is the output of the svnversion command. Which mean that ift can be a range of version (eg 1447:1450) and/or be postfixed by a modification flag letter (M for locally modified, S for a branch of tag instead of the trunk)  
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}

{panel:title=Wait for new tick}
* *format:* GET http://<host>/rest/tick/wait
* This request implements a long pull in order for the client to be notified when the next tick occurs. 
The request will not respond until the next tick occurs.
* *output:* similar to GET http://<host>/rest/tick  
{panel}

h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "alive": "true",
            "accept_goals": "false",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_state"
        },
        {
            "name": "dorado_survey",
            "alive": "true",
            "accept_goals": "true",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "1",
                "duration": "00:01:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_survey"
        },
        ...
    ]
}
 {code}
 
 ** "timelines" is the table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 *** "alive" a boolean indicating whether this timeline is still managed or "dead" (resulting on a Failed state)
 *** "accept_goals" a boolean indicating if this timeline accept goals or not (for example position updates on assets do not accept goals)
 *** "publish_plan" a boolean indicating if this timeline will publish its future when it has a plan or can only display its past and current state
 *** "latency" The expected maximum delay until a received goal on this timeline will be processed
 *** "look_ahead" How far ahead in the future this timeline is usually planned for 
 ** booth look_ahead and latency are json object giving their value both in term of TREX tick and real-time duration 
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically). Similarly all the attached information (except for their name) can change as the mission advance (although we often avoid it).
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}&to=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{date\}&format=date
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}&format=tick
 * *input:*
 ** \{name\} the name of the timeline
 ** _format_ the format used to specify _from_ and _to_ . Possible formats are:
 *** *date* : _from_ and _to_ are specified as date (eg 2013-May-23%2012:00:00)
 *** *tick* : _from_ and _to_ are given as integer which are directly trex tick values
 *** If not specified the default format is *date*
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. Meaning all the token which
 *** can end after _from_ (ie their largest possible end time is >= to _from_)
 *** can start before _to_ (ie their smallest possible start time is <= to _to_)
 ** While the json format id still underwork here's an example of what I have now :
 {code:javascript}
{
    "name": "time_b",
    "alive": "true",
    "requested_tick_range":
    {
        "int":
        {
            "min": "-32888"
            "max": "16549"
        }
    },
    "token":
    [
         {
            "on": "time_b",
            "pred": "Holds",
            "Variable":
            {
                "float":
                {
                    "value": "0.9902680687415706"
                },
                "type": "float",
                "name": "cos_t"
            },
            "Variable":
            {
                "float":
                {
                    "value": "0.1391731009600664"
                },
                "type": "float",
                "name": "sin_t"
            },
            "Variable":
            {
                "date":
                {
                    "value": "2013-May-23 20:16:26.690742"
                },
                "type": "date",
                "name": "start"
            },
            "Variable":
            {
                "date":
                {
                    "value": "2013-May-23 20:17:26.690742"
                },
                "type": "date",
                "name": "end"
            },
            "Variable":
            {
                "duration":
                {
                    "value": "00:01:00"
                },
                "type": "duration",
                "name": "duration"
            }
        },
        {
            "on": "time_b",
            "pred": "Holds",
            "Variable":
            [
                {
                    "float":
                    {
                        "value": "0.9876883405951381"
                    },
                    "type": "float",
                    "name": "cos_t"
                },
                {
                    "float":
                    {
                        "value": "0.1564344650402325"
                    },
                    "type": "float",
                    "name": "sin_t"
                },
                {
                    "date":
                    {
                        "value": "2013-May-23 20:17:26.690742"
                    },
                    "type": "date",
                    "name": "start"
                },
                {
                    "date":
                    {
                        "min": "2013-May-23 20:18:26.690742"
                    },
                    "type": "date",
                    "name": "end"
                }
            ]
        }
    ]
} {code}
 ** In this example the result has the following attributes :
 *** "name" : The name of the timeline
 *** "alive" : Indicates if this timeline is currently still managed
 *** "requested_tick_range" : an interval giving the range \[_from_, _to_\] into ticks
 *** "token" : A table with all the tokens that match this range. Tokens are sorted by occurrence order

 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 ** 400: parsing error from the optionals fields 
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=2013-May-23&to=2013-may-31%2012:00:00
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100&format=tick
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
** Associated data: the goal in json format (request header need to set Content-Type to application/json)
 * *example of a curl command:*
 {code:none}
   curl -X POST --header 'Content-Type:application/json' -d '
   {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable": [
            { "name": "drifter",
              "type": "enum",
              "enum": { "elem": [ { "value": "MBARI21" } ] }
            },
            { "name": "lagrangian",
              "type": "bool",
              "bool": { "value": "1" }
            },
            { "name": "path",
              "enum": { "elem": [ { "value": "square" } ] }
            },
            { "name": "size", 
              "float": { "value": 1000.0 }
            },
            { "name": "start",
              "type": "date",
              "date": { "min": "2013-May-16 15:53:00" }
            },
            { "name": "duration"
              "duration": { "max": "18:00:00" },
              "type": "duration"
            }
        ]
    }
   }' http://<host>/rest/goal
 {code}
* *output on success:* A json structure with the following attributes:
** _id_ : A unique identifier for the goal
** _href_: URL where this goal can be accessed (through GET or DELETE)
** _Goal_: The goal representation (should be fairly similar to what data was posted but with small tweaks such as updated start duration and end information)
* *example output* from the command above:
{code:javascript}
{
    "id": "0xb0425cb0",
    "href": "/rest/goal/0xb0425cb0",
    "Goal":
    {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable":
        [
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "spotSim"
                        }
                    ]
                },
                "type": "enum",
                "name": "drifter"
            },
            {
                "bool":
                {
                    "value": "1"
                },
                "type": "bool",
                "name": "lagrangian"
            },
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "square"
                        }
                    ]
                },
                "type": "enum",
                "name": "path"
            },
            {
                "float":
                {
                    "value": "1000.0000000000000000"
                },
                "type": "float",
                "name": "size"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:16:01.566673"
                },
                "type": "date",
                "name": "start"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:17:01.566673"
                },
                "type": "date",
                "name": "end"
            },
            {
                "duration":
                {
                    "min": "00:01:00",
                    "max": "18:00:00"
                },
                "type": "duration",
                "name": "duration"
            }
        ]
    }
}
{code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned


{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">21364787</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21397539</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}
{panel:title=TREX version}
 * *format:* 
 ** GET http://<host>/rest/version
 * Gets information of the currently running version of trex
 * *output:*
 {code:javascript}
{
    "version_major": "0",
    "version_minor": "5",
    "version_release": "0",
    "version_rc": "1",
    "svn_root": "trunk",
    "svn_rev": "1450",
    "version_str": "0.5.0-rc1 (svn:trunk[1450])"
} 
{code}
 ** *note* svn_rev may not be a integer but is the output of the svnversion command. Which mean that ift can be a range of version (eg 1447:1450) and/or be postfixed by a modification flag letter (M for locally modified, S for a branch of tag instead of the trunk)  
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}

{panel:title=Wait for new tick}
* *format:* GET http://<host>/rest/tick/wait
* This request implements a long pull in order for the client to be notified when the next tick occurs. 
The request will not respond until the next tick occurs.
* *output:* similar to GET http://<host>/rest/tick  
{panel}

h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "alive": "true",
            "accept_goals": "false",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_state"
        },
        {
            "name": "dorado_survey",
            "alive": "true",
            "accept_goals": "true",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "1",
                "duration": "00:01:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_survey"
        },
        ...
    ]
}
 {code}
 
 ** "timelines" is the table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 *** "alive" a boolean indicating whether this timeline is still managed or "dead" (resulting on a Failed state)
 *** "accept_goals" a boolean indicating if this timeline accept goals or not (for example position updates on assets do not accept goals)
 *** "publish_plan" a boolean indicating if this timeline will publish its future when it has a plan or can only display its past and current state
 *** "latency" The expected maximum delay until a received goal on this timeline will be processed
 *** "look_ahead" How far ahead in the future this timeline is usually planned for 
 ** booth look_ahead and latency are json object giving their value both in term of TREX tick and real-time duration 
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically). Similarly all the attached information (except for their name) can change as the mission advance (although we often avoid it).
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
** Associated data: the goal in json format (request header need to set Content-Type to application/json)
 * *example of a curl command:*
 {code:none}
   curl -X POST --header 'Content-Type:application/json' -d '
   {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable": [
            { "name": "drifter",
              "type": "enum",
              "enum": { "elem": [ { "value": "MBARI21" } ] }
            },
            { "name": "lagrangian",
              "type": "bool",
              "bool": { "value": "1" }
            },
            { "name": "path",
              "enum": { "elem": [ { "value": "square" } ] }
            },
            { "name": "size", 
              "float": { "value": 1000.0 }
            },
            { "name": "start",
              "type": "date",
              "date": { "min": "2013-May-16 15:53:00" }
            },
            { "name": "duration"
              "duration": { "max": "18:00:00" },
              "type": "duration"
            }
        ]
    }
   }' http://<host>/rest/goal
 {code}
* *output on success:* A json structure with the following attributes:
** _id_ : A unique identifier for the goal
** _href_: URL where this goal can be accessed (through GET or DELETE)
** _Goal_: The goal representation (should be fairly similar to what data was posted but with small tweaks such as updated start duration and end information)
* *example output* from the command above:
{code:javascript}
{
    "id": "0xb0425cb0",
    "href": "/rest/goal/0xb0425cb0",
    "Goal":
    {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable":
        [
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "spotSim"
                        }
                    ]
                },
                "type": "enum",
                "name": "drifter"
            },
            {
                "bool":
                {
                    "value": "1"
                },
                "type": "bool",
                "name": "lagrangian"
            },
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "square"
                        }
                    ]
                },
                "type": "enum",
                "name": "path"
            },
            {
                "float":
                {
                    "value": "1000.0000000000000000"
                },
                "type": "float",
                "name": "size"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:16:01.566673"
                },
                "type": "date",
                "name": "start"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:17:01.566673"
                },
                "type": "date",
                "name": "end"
            },
            {
                "duration":
                {
                    "min": "00:01:00",
                    "max": "18:00:00"
                },
                "type": "duration",
                "name": "duration"
            }
        ]
    }
}
{code}

{panel}

 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned


{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">21364771</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21397541</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}
{panel:title=TREX version}
 * *format:* 
 ** GET http://<host>/rest/version
 * Gets information of the currently running version of trex
 * *output:*
 {code:javascript}
{
    "version_major": "0",
    "version_minor": "5",
    "version_release": "0",
    "version_rc": "1",
    "svn_root": "trunk",
    "svn_rev": "1450",
    "version_str": "0.5.0-rc1 (svn:trunk[1450])"
} 
{code}
 ** *note* svn_rev may not be a integer but is the output of the svnversion command. Which mean that ift can be a range of version (eg 1447:1450) and/or be postfixed by a modification flag letter (M for locally modified, S for a branch of tag instead of the trunk)  
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}

{panel:title=Wait for new tick}
* *format:* GET http://<host>/rest/tick/wait
* This request implements a long pull in order for the client to be notified when the next tick occurs. 
The request will not respond until the next tick occurs.
* *output:* similar to GET http://<host>/rest/tick  
{panel}

h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "alive": "true",
            "accept_goals": "false",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_state"
        },
        {
            "name": "dorado_survey",
            "alive": "true",
            "accept_goals": "true",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "1",
                "duration": "00:01:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_survey"
        },
        ...
    ]
}
 {code}
 
 ** "timelines" is the table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 *** "alive" a boolean indicating whether this timeline is still managed or "dead" (resulting on a Failed state)
 *** "accept_goals" a boolean indicating if this timeline accept goals or not (for example position updates on assets do not accept goals)
 *** "publish_plan" a boolean indicating if this timeline will publish its future when it has a plan or can only display its past and current state
 *** "latency" The expected maximum delay until a received goal on this timeline will be processed
 *** "look_ahead" How far ahead in the future this timeline is usually planned for 
 ** booth look_ahead and latency are json object giving their value both in term of TREX tick and real-time duration 
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically). Similarly all the attached information (except for their name) can change as the mission advance (although we often avoid it).
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}&to=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{date\}&format=date
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}&format=tick
 * *input:*
 ** \{name\} the name of the timeline
 ** _format_ the format used to specify _from_ and _to_ . Possible formats are:
 *** date : _[default]_ _from_ and _to_ are specified as date (eg 2013-May-23%2012:00:00)
 *** tick : _from_ and _to_ are given as integer which are directly trex tick values
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
** Associated data: the goal in json format (request header need to set Content-Type to application/json)
 * *example of a curl command:*
 {code:none}
   curl -X POST --header 'Content-Type:application/json' -d '
   {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable": [
            { "name": "drifter",
              "type": "enum",
              "enum": { "elem": [ { "value": "MBARI21" } ] }
            },
            { "name": "lagrangian",
              "type": "bool",
              "bool": { "value": "1" }
            },
            { "name": "path",
              "enum": { "elem": [ { "value": "square" } ] }
            },
            { "name": "size", 
              "float": { "value": 1000.0 }
            },
            { "name": "start",
              "type": "date",
              "date": { "min": "2013-May-16 15:53:00" }
            },
            { "name": "duration"
              "duration": { "max": "18:00:00" },
              "type": "duration"
            }
        ]
    }
   }' http://<host>/rest/goal
 {code}
* *output on success:* A json structure with the following attributes:
** _id_ : A unique identifier for the goal
** _href_: URL where this goal can be accessed (through GET or DELETE)
** _Goal_: The goal representation (should be fairly similar to what data was posted but with small tweaks such as updated start duration and end information)
* *example output* from the command above:
{code:javascript}
{
    "id": "0xb0425cb0",
    "href": "/rest/goal/0xb0425cb0",
    "Goal":
    {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable":
        [
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "spotSim"
                        }
                    ]
                },
                "type": "enum",
                "name": "drifter"
            },
            {
                "bool":
                {
                    "value": "1"
                },
                "type": "bool",
                "name": "lagrangian"
            },
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "square"
                        }
                    ]
                },
                "type": "enum",
                "name": "path"
            },
            {
                "float":
                {
                    "value": "1000.0000000000000000"
                },
                "type": "float",
                "name": "size"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:16:01.566673"
                },
                "type": "date",
                "name": "start"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:17:01.566673"
                },
                "type": "date",
                "name": "end"
            },
            {
                "duration":
                {
                    "min": "00:01:00",
                    "max": "18:00:00"
                },
                "type": "duration",
                "name": "duration"
            }
        ]
    }
}
{code}

{panel}

 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned


{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">21364774</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8946030</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup

\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come
\\

Build Server

No easy access to a DVD burner, went with net install from previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop+Standard configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.
\\

h3.

From a post on the subject of java install of jdk 1.6 on Debian Etch

cp \-p /etc/apt/sources.list /etc/apt/sources.list_backup

emacs /etc/apt/sources.list

And add the line:
deb [http://www.backports.org/debian] etch-backports main contrib non-free

Then install it with

aptitude update
aptitude \-t etch-backports install sun-java6-jdk

And select the new java version:

update-alternatives \--config java
\\

\\
&nbsp;apt-get install jam

\\
New plan for java, create a java specific to the auv-linux and auv-autonomy development and decouple from the debian system java:

Install in a named directory in opt, example: /opt/jdk_1.6u12

Create a generic opt link to java, /opt/jdk as an optional means for multiple projects to point to the 'active java'

In the dorado1 user profile, set the environment variable to /opt/jdk_1.6u12 - explicit references is better for config management, IMHO. &nbsp;

Download jdk to /home/dorado1/tools/java
# At the terminal: Type:
*su*
# Enter the root password.
# Change to the directory in which you want to install and copy the java installer bin to this directory. Type:
*cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
# Change the permission of the bin&nbsp;file to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
# Verify that you have permission to execute the file. Type:
*ls \-l*
# Start the installation process.Type:

*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*

Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.
\\
\\

Build failed (jam in TREX) due to missing boost regex loadable module.&nbsp;&nbsp;&nbsp; To resolve this, a debian package was installed (developer version) which is a bit of a sledge hammer.&nbsp;&nbsp; Need to determine of this is a standard component of the OS or a developer package specific to TREX (judged it to be an OS component)

apt-get install _libboost-regex-dev_
\\
\\

h4. Test Server

\\
\\
\\

For T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)

Intel 82551 ethernet (e100) device, not autoprobed by debian installer

Installed using net-install&nbsp;debian 4.0r3 and mirror with standard (not desktop like build server).

Note: there were several DVD read failures on the DVD media during the install which thru re-run (retry) in the installer were worked around.
\\

Generating Java proxy classes from .idl
idlj \-td /idlj InsIF.idl
com.sun.tools.corba.se.idl.InvalidArgument: Invalid argument:&nbsp; \-td.

Compiler Usage:

&nbsp;&nbsp;&nbsp; java com.sun.tools.corba.se.idl.toJavaPortable.Compile \[options\] <idl file>

where <idl file> is the name of a file containing IDL definitions, and
\[options\] is any combination of the options listed below.&nbsp; The options
are optional and may appear in any order; <idl file> is required and
must appear last.
&nbsp;

h4. T-Rex CheatSheet


h5. Directory structure :

For compiling/executing correctly TREX expects the following directory structure
<path>
auv-shared
auv-linux&nbsp;&nbsp;&nbsp;
auv (note: this is the auv-qnx directory and may be deprecated in the near future)
Europa
PLASMA
TREX
We will assume on the rest of the document that this structure is respected.
\\
\\

Initializing TREX environment variables:

The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
The compilation of TREX core libraries is done similarly
&nbsp;% cd $TREX_HOME
% jam
after that you can compile the binaries amc and sim
% cd ctd2007
% jam amc
% jam sim
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

Using TREX
TREX configuration files :
On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
amc.play.cfg: used to replay a mission for debugging purpose.
amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
&nbsp;vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :

<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
&nbsp;&nbsp;<Timeline name="vehicleState"&nbsp; command="0" />
&nbsp;<Timeline name="setpoint" class="Setpoint" command="1" />
&nbsp;<Timeline name="descend"&nbsp; class="Descend" command="1" />
&nbsp;<Timeline name="ascend"&nbsp;&nbsp; class="Ascend" command="1" />
&nbsp;<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
&nbsp;<Timeline name="getgps" class="GPS" command="1" />
&nbsp;<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>

remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
\*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
\*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

Note on AUV configuration files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that latitude and longitude&nbsp; on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
&nbsp;Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes depthn with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher
Starting AUV code for TREX
This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
On QNX
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer \[-v\] \[-sim\]
note:
\-v fro being verbose
\-sim when in simulation (ie not HW in the loop)&nbsp;

On Linux
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer \-proc <proc>.cfg \[-fastsim\]
note:
\-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
\-fastsim indicates to vcsServer that it will run into linux fast simulation&nbsp;
You can change how verbose auv-linux will be by editing log4cxx.cfg
Starting TREX in batch mode
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg \[-fast\|-sim\] \[<nstep>\]
note:
the argument order is fixed
\-fast indicates that the clock used would connect to auv-linux fast simulation clock
\-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
<nstep> indicates how much step TREX is allowed to do for deliberation&nbsp; at least on each tick&nbsp; when on \-fast or \-sim mode.
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
% cd $TREX_LOG_DIR
% tail \-F latest/TREX.log

Starting TREX in interactive mode
% cd $TREX_HOME
% sim_o_rt <mission> \[-sim\|-fast\] \[<nstep>\]
Options:
&nbsp;Q :\- Quit
&nbsp;N :\- Next
&nbsp;G :\- Goto <tick> e.g. g100
&nbsp;R :\- Reload Debug.cfg
&nbsp;\+ :\- enable pattern e.g. '+Agent'
&nbsp;\- :\- disable pattern e.g. '-Agent'
&nbsp;\! :\- disable all debug messages
>

You can see here that the command is quite similar to amc except&nbsp; that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick (n) , etc commands R/+/-/\! are used to manipulate how much data you want&nbsp; on the Debug.log starting from now.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913277</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21397543</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}
{panel:title=TREX version}
 * *format:* 
 ** GET http://<host>/rest/version
 * Gets information of the currently running version of trex
 * *output:*
 {code:javascript}
{
    "version_major": "0",
    "version_minor": "5",
    "version_release": "0",
    "version_rc": "1",
    "svn_root": "trunk",
    "svn_rev": "1450",
    "version_str": "0.5.0-rc1 (svn:trunk[1450])"
} 
{code}
 ** *note* svn_rev may not be a integer but is the output of the svnversion command. Which mean that ift can be a range of version (eg 1447:1450) and/or be postfixed by a modification flag letter (M for locally modified, S for a branch of tag instead of the trunk)  
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}

{panel:title=Wait for new tick}
* *format:* GET http://<host>/rest/tick/wait
* This request implements a long pull in order for the client to be notified when the next tick occurs. 
The request will not respond until the next tick occurs.
* *output:* similar to GET http://<host>/rest/tick  
{panel}

h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "alive": "true",
            "accept_goals": "false",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_state"
        },
        {
            "name": "dorado_survey",
            "alive": "true",
            "accept_goals": "true",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "1",
                "duration": "00:01:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_survey"
        },
        ...
    ]
}
 {code}
 
 ** "timelines" is the table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 *** "alive" a boolean indicating whether this timeline is still managed or "dead" (resulting on a Failed state)
 *** "accept_goals" a boolean indicating if this timeline accept goals or not (for example position updates on assets do not accept goals)
 *** "publish_plan" a boolean indicating if this timeline will publish its future when it has a plan or can only display its past and current state
 *** "latency" The expected maximum delay until a received goal on this timeline will be processed
 *** "look_ahead" How far ahead in the future this timeline is usually planned for 
 ** booth look_ahead and latency are json object giving their value both in term of TREX tick and real-time duration 
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically). Similarly all the attached information (except for their name) can change as the mission advance (although we often avoid it).
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}&to=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{date\}&format=date
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}&format=tick
 * *input:*
 ** \{name\} the name of the timeline
 ** _format_ the format used to specify _from_ and _to_ . Possible formats are:
 *** *date* : _from_ and _to_ are specified as date (eg 2013-May-23%2012:00:00)
 *** *tick* : _from_ and _to_ are given as integer which are directly trex tick values
 *** If not specified the default format is *date*
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
** Associated data: the goal in json format (request header need to set Content-Type to application/json)
 * *example of a curl command:*
 {code:none}
   curl -X POST --header 'Content-Type:application/json' -d '
   {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable": [
            { "name": "drifter",
              "type": "enum",
              "enum": { "elem": [ { "value": "MBARI21" } ] }
            },
            { "name": "lagrangian",
              "type": "bool",
              "bool": { "value": "1" }
            },
            { "name": "path",
              "enum": { "elem": [ { "value": "square" } ] }
            },
            { "name": "size", 
              "float": { "value": 1000.0 }
            },
            { "name": "start",
              "type": "date",
              "date": { "min": "2013-May-16 15:53:00" }
            },
            { "name": "duration"
              "duration": { "max": "18:00:00" },
              "type": "duration"
            }
        ]
    }
   }' http://<host>/rest/goal
 {code}
* *output on success:* A json structure with the following attributes:
** _id_ : A unique identifier for the goal
** _href_: URL where this goal can be accessed (through GET or DELETE)
** _Goal_: The goal representation (should be fairly similar to what data was posted but with small tweaks such as updated start duration and end information)
* *example output* from the command above:
{code:javascript}
{
    "id": "0xb0425cb0",
    "href": "/rest/goal/0xb0425cb0",
    "Goal":
    {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable":
        [
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "spotSim"
                        }
                    ]
                },
                "type": "enum",
                "name": "drifter"
            },
            {
                "bool":
                {
                    "value": "1"
                },
                "type": "bool",
                "name": "lagrangian"
            },
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "square"
                        }
                    ]
                },
                "type": "enum",
                "name": "path"
            },
            {
                "float":
                {
                    "value": "1000.0000000000000000"
                },
                "type": "float",
                "name": "size"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:16:01.566673"
                },
                "type": "date",
                "name": "start"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:17:01.566673"
                },
                "type": "date",
                "name": "end"
            },
            {
                "duration":
                {
                    "min": "00:01:00",
                    "max": "18:00:00"
                },
                "type": "duration",
                "name": "duration"
            }
        ]
    }
}
{code}

{panel}

 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned


{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">21364776</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21397545</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}
{panel:title=TREX version}
 * *format:* 
 ** GET http://<host>/rest/version
 * Gets information of the currently running version of trex
 * *output:*
 {code:javascript}
{
    "version_major": "0",
    "version_minor": "5",
    "version_release": "0",
    "version_rc": "1",
    "svn_root": "trunk",
    "svn_rev": "1450",
    "version_str": "0.5.0-rc1 (svn:trunk[1450])"
} 
{code}
 ** *note* svn_rev may not be a integer but is the output of the svnversion command. Which mean that ift can be a range of version (eg 1447:1450) and/or be postfixed by a modification flag letter (M for locally modified, S for a branch of tag instead of the trunk)  
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}

{panel:title=Wait for new tick}
* *format:* GET http://<host>/rest/tick/wait
* This request implements a long pull in order for the client to be notified when the next tick occurs. 
The request will not respond until the next tick occurs.
* *output:* similar to GET http://<host>/rest/tick  
{panel}

h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "alive": "true",
            "accept_goals": "false",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_state"
        },
        {
            "name": "dorado_survey",
            "alive": "true",
            "accept_goals": "true",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "1",
                "duration": "00:01:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_survey"
        },
        ...
    ]
}
 {code}
 
 ** "timelines" is the table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 *** "alive" a boolean indicating whether this timeline is still managed or "dead" (resulting on a Failed state)
 *** "accept_goals" a boolean indicating if this timeline accept goals or not (for example position updates on assets do not accept goals)
 *** "publish_plan" a boolean indicating if this timeline will publish its future when it has a plan or can only display its past and current state
 *** "latency" The expected maximum delay until a received goal on this timeline will be processed
 *** "look_ahead" How far ahead in the future this timeline is usually planned for 
 ** booth look_ahead and latency are json object giving their value both in term of TREX tick and real-time duration 
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically). Similarly all the attached information (except for their name) can change as the mission advance (although we often avoid it).
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}&to=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{date\}&format=date
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}&format=tick
 * *input:*
 ** \{name\} the name of the timeline
 ** _format_ the format used to specify _from_ and _to_ . Possible formats are:
 *** *date* : _from_ and _to_ are specified as date (eg 2013-May-23%2012:00:00)
 *** *tick* : _from_ and _to_ are given as integer which are directly trex tick values
 *** If not specified the default format is *date*
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. Meaning all the token which
 *** can end after _from_ (ie their largest possible end time is >= to _from_)
 *** can start before _to_ (ie their smallest possible start time is <= to _to_)
 ** While the json format id still underwork here's an example of what I have now :
 {code:javascript}
{
    "name": "time_b",
    "alive": "true",
    "requested_tick_range":
    {
        "int":
        {
            "min": "-32888"
            "max": "16549"
        }
    },
    "token":
    [
         {
            "on": "time_b",
            "pred": "Holds",
            "Variable":
            {
                "float":
                {
                    "value": "0.9902680687415706"
                },
                "type": "float",
                "name": "cos_t"
            },
            "Variable":
            {
                "float":
                {
                    "value": "0.1391731009600664"
                },
                "type": "float",
                "name": "sin_t"
            },
            "Variable":
            {
                "date":
                {
                    "value": "2013-May-23 20:16:26.690742"
                },
                "type": "date",
                "name": "start"
            },
            "Variable":
            {
                "date":
                {
                    "value": "2013-May-23 20:17:26.690742"
                },
                "type": "date",
                "name": "end"
            },
            "Variable":
            {
                "duration":
                {
                    "value": "00:01:00"
                },
                "type": "duration",
                "name": "duration"
            }
        },
        {
            "on": "time_b",
            "pred": "Holds",
            "Variable":
            [
                {
                    "float":
                    {
                        "value": "0.9876883405951381"
                    },
                    "type": "float",
                    "name": "cos_t"
                },
                {
                    "float":
                    {
                        "value": "0.1564344650402325"
                    },
                    "type": "float",
                    "name": "sin_t"
                },
                {
                    "date":
                    {
                        "value": "2013-May-23 20:17:26.690742"
                    },
                    "type": "date",
                    "name": "start"
                },
                {
                    "date":
                    {
                        "min": "2013-May-23 20:18:26.690742"
                    },
                    "type": "date",
                    "name": "end"
                }
            ]
        }
    ]
} {code}
 ** In this example the result has the following attributes :
 *** "name" : The name of the timeline
 *** "alive" : Indicates if this timeline is currently still managed
 *** "requested_tick_range" : an interval giving the range \[_from_, _to_\] into ticks
 *** "token" : A table with all the tokens that match this range. Tokens are sorted by occurrence order

 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 ** 400: parsing error from the optionals fields 
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=2013-May-23&to=2013-may-31%2012:00:00
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100&format=tick
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
** Associated data: the goal in json format (request header need to set Content-Type to application/json)
 * *example of a curl command:*
 {code:none}
   curl -X POST --header 'Content-Type:application/json' -d '
   {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable": [
            { "name": "drifter",
              "type": "enum",
              "enum": { "elem": [ { "value": "MBARI21" } ] }
            },
            { "name": "lagrangian",
              "type": "bool",
              "bool": { "value": "1" }
            },
            { "name": "path",
              "enum": { "elem": [ { "value": "square" } ] }
            },
            { "name": "size", 
              "float": { "value": 1000.0 }
            },
            { "name": "start",
              "type": "date",
              "date": { "min": "2013-May-16 15:53:00" }
            },
            { "name": "duration"
              "duration": { "max": "18:00:00" },
              "type": "duration"
            }
        ]
    }
   }' http://<host>/rest/goal
 {code}
* *output on success:* A json structure with the following attributes:
** _id_ : A unique identifier for the goal
** _href_: URL where this goal can be accessed (through GET or DELETE)
** _Goal_: The goal representation (should be fairly similar to what data was posted but with small tweaks such as updated start duration and end information)
* *example output* from the command above:
{code:javascript}
{
    "id": "0xb0425cb0",
    "href": "/rest/goal/0xb0425cb0",
    "Goal":
    {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable":
        [
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "spotSim"
                        }
                    ]
                },
                "type": "enum",
                "name": "drifter"
            },
            {
                "bool":
                {
                    "value": "1"
                },
                "type": "bool",
                "name": "lagrangian"
            },
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "square"
                        }
                    ]
                },
                "type": "enum",
                "name": "path"
            },
            {
                "float":
                {
                    "value": "1000.0000000000000000"
                },
                "type": "float",
                "name": "size"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:16:01.566673"
                },
                "type": "date",
                "name": "start"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:17:01.566673"
                },
                "type": "date",
                "name": "end"
            },
            {
                "duration":
                {
                    "min": "00:01:00",
                    "max": "18:00:00"
                },
                "type": "duration",
                "name": "duration"
            }
        ]
    }
}
{code}

{panel}

 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned


{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">21364778</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8946005</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup

\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come
\\

Build Server

No easy access to a DVD burner, went with net install from previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop+Standard configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.
\\

h3.

From a post on the subject of java install of jdk 1.6 on Debian Etch

cp \-p /etc/apt/sources.list /etc/apt/sources.list_backup

emacs /etc/apt/sources.list

And add the line:
deb [http://www.backports.org/debian] etch-backports main contrib non-free

Then install it with

aptitude update
aptitude \-t etch-backports install sun-java6-jdk

And select the new java version:

update-alternatives \--config java
\\

Test Server
\\

\\
New plan for java, create a java specific to the auv-linux and auv-autonomy development and decouple from the debian system java:

Install in a named directory in opt, example: /opt/jdk_1.6u12

Create a generic opt link to java, /opt/jdk as an optional means for multiple projects to point to the 'active java'

In the dorado1 user profile, set the environment variable to /opt/jdk_1.6u12 - explicit references is better for config management, IMHO. &nbsp;

Download jdk to /home/dorado1/tools/java

# At the terminal: Type:
*su*
# Enter the root password.
# Change to the directory in which you want to install and copy the java installer bin to this directory. Type:
*cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
# Change the permission of the file you downloaded to be executable. Type:
 *chmod a+x jdk-6u12-linux-i586.bin*
# Verify that you have permission to execute the file. Type:
*ls \-l*

&nbsp;

# Start the installation process.Type:&nbsp;&nbsp; *./jdk-6u12-linux-i586.bin*

This displays a binary license agreement. Read through the agreement. Press the spacebar to display the next page. At the end, enter *yes* to proceed with the installation.# Java is installed into its own directory. In this example, it is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.

&nbsp;

\\ \\ \\

For T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)

Intel 82551 ethernet (e100) device, not autoprobed by debian installer

Installed using net-install&nbsp;debian 4.0r3 and mirror with standard (not desktop like build server).

Note: there were several DVD read failures on the DVD media during the install which thru re-run (retry) in the installer were worked around.
\\

Generating Java proxy classes from .idl
idlj \-td /idlj InsIF.idl
com.sun.tools.corba.se.idl.InvalidArgument: Invalid argument:&nbsp; \-td.

Compiler Usage:

&nbsp;&nbsp;&nbsp; java com.sun.tools.corba.se.idl.toJavaPortable.Compile \[options\] <idl file>

where <idl file> is the name of a file containing IDL definitions, and
\[options\] is any combination of the options listed below.&nbsp; The options
are optional and may appear in any order; <idl file> is required and
must appear last.
&nbsp;

h4. T-Rex CheatSheet


h5. Directory structure :

For compiling/executing correctly TREX expects the following directory structure
<path>
auv-shared
auv-linux&nbsp;&nbsp;&nbsp;
auv (note: this is the auv-qnx directory and may be deprecated in the near future)
Europa
PLASMA
TREX
We will assume on the rest of the document that this structure is respected.
\\
\\

Initializing TREX environment variables:

The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
The compilation of TREX core libraries is done similarly
&nbsp;% cd $TREX_HOME
% jam
after that you can compile the binaries amc and sim
% cd ctd2007
% jam amc
% jam sim
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

Using TREX
TREX configuration files :
On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
amc.play.cfg: used to replay a mission for debugging purpose.
amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
&nbsp;vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :

<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
&nbsp;&nbsp;<Timeline name="vehicleState"&nbsp; command="0" />
&nbsp;<Timeline name="setpoint" class="Setpoint" command="1" />
&nbsp;<Timeline name="descend"&nbsp; class="Descend" command="1" />
&nbsp;<Timeline name="ascend"&nbsp;&nbsp; class="Ascend" command="1" />
&nbsp;<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
&nbsp;<Timeline name="getgps" class="GPS" command="1" />
&nbsp;<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>

remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
\*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
\*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

Note on AUV configuration files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that latitude and longitude&nbsp; on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
&nbsp;Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes depthn with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher
Starting AUV code for TREX
This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
On QNX
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer \[-v\] \[-sim\]
note:
\-v fro being verbose
\-sim when in simulation (ie not HW in the loop)&nbsp;

On Linux
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer \-proc <proc>.cfg \[-fastsim\]
note:
\-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
\-fastsim indicates to vcsServer that it will run into linux fast simulation&nbsp;
You can change how verbose auv-linux will be by editing log4cxx.cfg
Starting TREX in batch mode
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg \[-fast\|-sim\] \[<nstep>\]
note:
the argument order is fixed
\-fast indicates that the clock used would connect to auv-linux fast simulation clock
\-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
<nstep> indicates how much step TREX is allowed to do for deliberation&nbsp; at least on each tick&nbsp; when on \-fast or \-sim mode.
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
% cd $TREX_LOG_DIR
% tail \-F latest/TREX.log

Starting TREX in interactive mode
% cd $TREX_HOME
% sim_o_rt <mission> \[-sim\|-fast\] \[<nstep>\]
Options:
&nbsp;Q :\- Quit
&nbsp;N :\- Next
&nbsp;G :\- Goto <tick> e.g. g100
&nbsp;R :\- Reload Debug.cfg
&nbsp;\+ :\- enable pattern e.g. '+Agent'
&nbsp;\- :\- disable pattern e.g. '-Agent'
&nbsp;\! :\- disable all debug messages
>

You can see here that the command is quite similar to amc except&nbsp; that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick (n) , etc commands R/+/-/\! are used to manipulate how much data you want&nbsp; on the Debug.log starting from now.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913252</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8946003</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup

\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come
\\

Build Server

No easy access to a DVD burner, went with net install from previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop+Standard configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.
\\

h3.

From a post on the subject of java install of jdk 1.6 on Debian Etch

cp \-p /etc/apt/sources.list /etc/apt/sources.list_backup

emacs /etc/apt/sources.list

And add the line:
deb [http://www.backports.org/debian] etch-backports main contrib non-free

Then install it with

aptitude update
aptitude \-t etch-backports install sun-java6-jdk

And select the new java version:

update-alternatives \--config java
\\

Test Server\\

\\
New plan for java, create a java specific to the auv-linux and auv-autonomy development and decouple from the debian system java:

Install in a named directory in opt, example: /opt/jdk_1.6u12

Create a generic opt link to java, /opt/jdk as an optional means for multiple projects to point to the 'active java'


In the dorado1 user profile, set the environment variable to /opt/jdk_1.6u12 - explicit references is better for config management, IMHO. &nbsp; For&nbsp;

T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)

Intel 82551 ethernet (e100) device, not autoprobed by debian installer

Installed using net-install&nbsp;debian 4.0r3 and mirror with standard (not desktop like build server).

Note: there were several DVD read failures on the DVD media during the install which thru re-run (retry) in the installer were worked around.
\\

Generating Java proxy classes from .idl
idlj \-td /idlj InsIF.idl
com.sun.tools.corba.se.idl.InvalidArgument: Invalid argument:&nbsp; \-td.

Compiler Usage:

&nbsp;&nbsp;&nbsp; java com.sun.tools.corba.se.idl.toJavaPortable.Compile \[options\] <idl file>

where <idl file> is the name of a file containing IDL definitions, and
\[options\] is any combination of the options listed below.&nbsp; The options
are optional and may appear in any order; <idl file> is required and
must appear last.
&nbsp;

h4. T-Rex CheatSheet


h5. Directory structure :

For compiling/executing correctly TREX expects the following directory structure
<path>
auv-shared
auv-linux&nbsp;&nbsp;&nbsp;
auv (note: this is the auv-qnx directory and may be deprecated in the near future)
Europa
PLASMA
TREX
We will assume on the rest of the document that this structure is respected.
\\
\\

Initializing TREX environment variables:

The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
The compilation of TREX core libraries is done similarly
&nbsp;% cd $TREX_HOME
% jam
after that you can compile the binaries amc and sim
% cd ctd2007
% jam amc
% jam sim
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

Using TREX
TREX configuration files :
On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
amc.play.cfg: used to replay a mission for debugging purpose.
amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
&nbsp;vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :

<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
&nbsp;&nbsp;<Timeline name="vehicleState"&nbsp; command="0" />
&nbsp;<Timeline name="setpoint" class="Setpoint" command="1" />
&nbsp;<Timeline name="descend"&nbsp; class="Descend" command="1" />
&nbsp;<Timeline name="ascend"&nbsp;&nbsp; class="Ascend" command="1" />
&nbsp;<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
&nbsp;<Timeline name="getgps" class="GPS" command="1" />
&nbsp;<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>

remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
\*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
\*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

Note on AUV configuration files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that latitude and longitude&nbsp; on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
&nbsp;Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes depthn with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher
Starting AUV code for TREX
This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
On QNX
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer \[-v\] \[-sim\]
note:
\-v fro being verbose
\-sim when in simulation (ie not HW in the loop)&nbsp;

On Linux
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer \-proc <proc>.cfg \[-fastsim\]
note:
\-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
\-fastsim indicates to vcsServer that it will run into linux fast simulation&nbsp;
You can change how verbose auv-linux will be by editing log4cxx.cfg
Starting TREX in batch mode
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg \[-fast\|-sim\] \[<nstep>\]
note:
the argument order is fixed
\-fast indicates that the clock used would connect to auv-linux fast simulation clock
\-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
<nstep> indicates how much step TREX is allowed to do for deliberation&nbsp; at least on each tick&nbsp; when on \-fast or \-sim mode.
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
% cd $TREX_LOG_DIR
% tail \-F latest/TREX.log

Starting TREX in interactive mode
% cd $TREX_HOME
% sim_o_rt <mission> \[-sim\|-fast\] \[<nstep>\]
Options:
&nbsp;Q :\- Quit
&nbsp;N :\- Next
&nbsp;G :\- Goto <tick> e.g. g100
&nbsp;R :\- Reload Debug.cfg
&nbsp;\+ :\- enable pattern e.g. '+Agent'
&nbsp;\- :\- disable pattern e.g. '-Agent'
&nbsp;\! :\- disable all debug messages
>

You can see here that the command is quite similar to amc except&nbsp; that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick (n) , etc commands R/+/-/\! are used to manipulate how much data you want&nbsp; on the Debug.log starting from now.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913250</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8946010</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup

\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come
\\

Build Server

No easy access to a DVD burner, went with net install from previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop+Standard configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.
\\

h3.

From a post on the subject of java install of jdk 1.6 on Debian Etch

cp \-p /etc/apt/sources.list /etc/apt/sources.list_backup

emacs /etc/apt/sources.list

And add the line:
deb [http://www.backports.org/debian] etch-backports main contrib non-free

Then install it with

aptitude update
aptitude \-t etch-backports install sun-java6-jdk

And select the new java version:

update-alternatives \--config java
\\

\\
&nbsp;apt-get install jam

\\
New plan for java, create a java specific to the auv-linux and auv-autonomy development and decouple from the debian system java:

Install in a named directory in opt, example: /opt/jdk_1.6u12

Create a generic opt link to java, /opt/jdk as an optional means for multiple projects to point to the 'active java'

In the dorado1 user profile, set the environment variable to /opt/jdk_1.6u12 - explicit references is better for config management, IMHO. &nbsp;

Download jdk to /home/dorado1/tools/java
# At the terminal: Type:
*su*
# Enter the root password.
# Change to the directory in which you want to install and copy the java installer bin to this directory. Type:
*cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
# Change the permission of the bin&nbsp;file to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
# Verify that you have permission to execute the file. Type:
*ls \-l*
# Start the installation process.Type:

*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*

Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.
\\
\\
\\
\\

h4. Test Server

\\
\\
\\

For T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)

Intel 82551 ethernet (e100) device, not autoprobed by debian installer

Installed using net-install&nbsp;debian 4.0r3 and mirror with standard (not desktop like build server).

Note: there were several DVD read failures on the DVD media during the install which thru re-run (retry) in the installer were worked around.
\\

Generating Java proxy classes from .idl
idlj \-td /idlj InsIF.idl
com.sun.tools.corba.se.idl.InvalidArgument: Invalid argument:&nbsp; \-td.

Compiler Usage:

&nbsp;&nbsp;&nbsp; java com.sun.tools.corba.se.idl.toJavaPortable.Compile \[options\] <idl file>

where <idl file> is the name of a file containing IDL definitions, and
\[options\] is any combination of the options listed below.&nbsp; The options
are optional and may appear in any order; <idl file> is required and
must appear last.
&nbsp;

h4. T-Rex CheatSheet


h5. Directory structure :

For compiling/executing correctly TREX expects the following directory structure
<path>
auv-shared
auv-linux&nbsp;&nbsp;&nbsp;
auv (note: this is the auv-qnx directory and may be deprecated in the near future)
Europa
PLASMA
TREX
We will assume on the rest of the document that this structure is respected.
\\
\\

Initializing TREX environment variables:

The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
The compilation of TREX core libraries is done similarly
&nbsp;% cd $TREX_HOME
% jam
after that you can compile the binaries amc and sim
% cd ctd2007
% jam amc
% jam sim
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

Using TREX
TREX configuration files :
On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
amc.play.cfg: used to replay a mission for debugging purpose.
amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
&nbsp;vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :

<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
&nbsp;&nbsp;<Timeline name="vehicleState"&nbsp; command="0" />
&nbsp;<Timeline name="setpoint" class="Setpoint" command="1" />
&nbsp;<Timeline name="descend"&nbsp; class="Descend" command="1" />
&nbsp;<Timeline name="ascend"&nbsp;&nbsp; class="Ascend" command="1" />
&nbsp;<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
&nbsp;<Timeline name="getgps" class="GPS" command="1" />
&nbsp;<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>

remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
\*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
\*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

Note on AUV configuration files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that latitude and longitude&nbsp; on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
&nbsp;Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes depthn with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher
Starting AUV code for TREX
This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
On QNX
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer \[-v\] \[-sim\]
note:
\-v fro being verbose
\-sim when in simulation (ie not HW in the loop)&nbsp;

On Linux
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer \-proc <proc>.cfg \[-fastsim\]
note:
\-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
\-fastsim indicates to vcsServer that it will run into linux fast simulation&nbsp;
You can change how verbose auv-linux will be by editing log4cxx.cfg
Starting TREX in batch mode
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg \[-fast\|-sim\] \[<nstep>\]
note:
the argument order is fixed
\-fast indicates that the clock used would connect to auv-linux fast simulation clock
\-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
<nstep> indicates how much step TREX is allowed to do for deliberation&nbsp; at least on each tick&nbsp; when on \-fast or \-sim mode.
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
% cd $TREX_LOG_DIR
% tail \-F latest/TREX.log

Starting TREX in interactive mode
% cd $TREX_HOME
% sim_o_rt <mission> \[-sim\|-fast\] \[<nstep>\]
Options:
&nbsp;Q :\- Quit
&nbsp;N :\- Next
&nbsp;G :\- Goto <tick> e.g. g100
&nbsp;R :\- Reload Debug.cfg
&nbsp;\+ :\- enable pattern e.g. '+Agent'
&nbsp;\- :\- disable pattern e.g. '-Agent'
&nbsp;\! :\- disable all debug messages
>

You can see here that the command is quite similar to amc except&nbsp; that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick (n) , etc commands R/+/-/\! are used to manipulate how much data you want&nbsp; on the Debug.log starting from now.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913257</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8946007</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup

\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come
\\

Build Server

No easy access to a DVD burner, went with net install from previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop+Standard configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.
\\

h3.

From a post on the subject of java install of jdk 1.6 on Debian Etch

cp \-p /etc/apt/sources.list /etc/apt/sources.list_backup

emacs /etc/apt/sources.list

And add the line:
deb [http://www.backports.org/debian] etch-backports main contrib non-free

Then install it with

aptitude update
aptitude \-t etch-backports install sun-java6-jdk

And select the new java version:

update-alternatives \--config java
\\

\\
&nbsp;

\\
New plan for java, create a java specific to the auv-linux and auv-autonomy development and decouple from the debian system java:

Install in a named directory in opt, example: /opt/jdk_1.6u12

Create a generic opt link to java, /opt/jdk as an optional means for multiple projects to point to the 'active java'

In the dorado1 user profile, set the environment variable to /opt/jdk_1.6u12 - explicit references is better for config management, IMHO. &nbsp;

Download jdk to /home/dorado1/tools/java
# At the terminal: Type:
*su*
# Enter the root password.
# Change to the directory in which you want to install and copy the java installer bin to this directory. Type:
*cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
# Change the permission of the file you downloaded to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
# Verify that you have permission to execute the file. Type:
*ls \-l*
# Start the installation process.Type:

*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*

Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.\\ \\ \\ \\

h4. Test Server
\\
\\
\\

For T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)

Intel 82551 ethernet (e100) device, not autoprobed by debian installer

Installed using net-install&nbsp;debian 4.0r3 and mirror with standard (not desktop like build server).

Note: there were several DVD read failures on the DVD media during the install which thru re-run (retry) in the installer were worked around.
\\

Generating Java proxy classes from .idl
idlj \-td /idlj InsIF.idl
com.sun.tools.corba.se.idl.InvalidArgument: Invalid argument:&nbsp; \-td.

Compiler Usage:

&nbsp;&nbsp;&nbsp; java com.sun.tools.corba.se.idl.toJavaPortable.Compile \[options\] <idl file>

where <idl file> is the name of a file containing IDL definitions, and
\[options\] is any combination of the options listed below.&nbsp; The options
are optional and may appear in any order; <idl file> is required and
must appear last.
&nbsp;

h4. T-Rex CheatSheet


h5. Directory structure :

For compiling/executing correctly TREX expects the following directory structure
<path>
auv-shared
auv-linux&nbsp;&nbsp;&nbsp;
auv (note: this is the auv-qnx directory and may be deprecated in the near future)
Europa
PLASMA
TREX
We will assume on the rest of the document that this structure is respected.
\\
\\

Initializing TREX environment variables:

The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
The compilation of TREX core libraries is done similarly
&nbsp;% cd $TREX_HOME
% jam
after that you can compile the binaries amc and sim
% cd ctd2007
% jam amc
% jam sim
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

Using TREX
TREX configuration files :
On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
amc.play.cfg: used to replay a mission for debugging purpose.
amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
&nbsp;vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :

<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
&nbsp;&nbsp;<Timeline name="vehicleState"&nbsp; command="0" />
&nbsp;<Timeline name="setpoint" class="Setpoint" command="1" />
&nbsp;<Timeline name="descend"&nbsp; class="Descend" command="1" />
&nbsp;<Timeline name="ascend"&nbsp;&nbsp; class="Ascend" command="1" />
&nbsp;<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
&nbsp;<Timeline name="getgps" class="GPS" command="1" />
&nbsp;<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>

remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
\*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
\*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

Note on AUV configuration files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that latitude and longitude&nbsp; on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
&nbsp;Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes depthn with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher
Starting AUV code for TREX
This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
On QNX
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer \[-v\] \[-sim\]
note:
\-v fro being verbose
\-sim when in simulation (ie not HW in the loop)&nbsp;

On Linux
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer \-proc <proc>.cfg \[-fastsim\]
note:
\-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
\-fastsim indicates to vcsServer that it will run into linux fast simulation&nbsp;
You can change how verbose auv-linux will be by editing log4cxx.cfg
Starting TREX in batch mode
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg \[-fast\|-sim\] \[<nstep>\]
note:
the argument order is fixed
\-fast indicates that the clock used would connect to auv-linux fast simulation clock
\-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
<nstep> indicates how much step TREX is allowed to do for deliberation&nbsp; at least on each tick&nbsp; when on \-fast or \-sim mode.
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
% cd $TREX_LOG_DIR
% tail \-F latest/TREX.log

Starting TREX in interactive mode
% cd $TREX_HOME
% sim_o_rt <mission> \[-sim\|-fast\] \[<nstep>\]
Options:
&nbsp;Q :\- Quit
&nbsp;N :\- Next
&nbsp;G :\- Goto <tick> e.g. g100
&nbsp;R :\- Reload Debug.cfg
&nbsp;\+ :\- enable pattern e.g. '+Agent'
&nbsp;\- :\- disable pattern e.g. '-Agent'
&nbsp;\! :\- disable all debug messages
>

You can see here that the command is quite similar to amc except&nbsp; that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick (n) , etc commands R/+/-/\! are used to manipulate how much data you want&nbsp; on the Debug.log starting from now.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913254</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21397526</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}
{panel:title=TREX version}
 * *format:* 
 ** GET http://<host>/rest/version
 * Gets information of the currently running version of trex
 * *output:*
 {code:javascript}
{
    "version_major": "0",
    "version_minor": "5",
    "version_release": "0",
    "version_rc": "1",
    "svn_root": "trunk",
    "svn_rev": "1450",
    "version_str": "0.5.0-rc1 (svn:trunk[1450])"
} 
{code}
 ** *note* svn_rev may not be a integer but is the output of the svnversion command. Which mean that ift can be a range of version (eg 1447:1450) and/or be postfixed by a modification flag letter (M for locally modified, S for a branch of tag instead of the trunk)  
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}

{panel:title=Wait for new tick}
* *format:* GET http://<host>/rest/tick/wait
* This request implements a long pull in order for the client to be notified when the next tick occurs. 
The request will not respond until the next tick occurs.
* *output:* similar to GET http://<host>/rest/tick  
{panel}

h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "alive": "true",
            "accept_goals": "false",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_state"
        },
        {
            "name": "dorado_survey",
            "alive": "true",
            "accept_goals": "true",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "1",
                "duration": "00:01:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_survey"
        },
        ...
    ]
}
 {code}
 
 ** "timelines" is the table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 *** "alive" a boolean indicating whether this timeline is still managed or "dead" (resulting on a Failed state)
 *** "accept_goals" a boolean indicating if this timeline accept goals or not (for example position updates on assets do not accept goals)
 *** "publish_plan" a boolean indicating if this timeline will publish its future when it has a plan or can only display its past and current state
 *** "latency" The expected maximum delay until a received goal on this timeline will be processed
 *** "look_ahead" How far ahead in the future this timeline is usually planned for 
 ** booth look_ahead and latency are json object giving their value both in term of TREX tick and real-time duration 
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically). Similarly all the attached information (except for their name) can change as the mission advance (although we often avoid it).
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
** Associated data: the goal in json format (request header need to set Content-Type to application/json)
 * *example of a curl command:*
 {code:none}
   curl -X POST --header 'Content-Type:application/json' -d '
   {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable": [
            { "name": "drifter",
              "type": "enum",
              "enum": { "elem": [ { "value": "MBARI21" } ] }
            },
            { "name": "lagrangian",
              "type": "bool",
              "bool": { "value": "1" }
            },
            { "name": "path",
              "enum": { "elem": [ { "value": "square" } ] }
            },
            { "name": "size", 
              "float": { "value": 1000.0 }
            },
            { "name": "start",
              "type": "date",
              "date": { "min": "2013-May-16 15:53:00" }
            },
            { "name": "duration"
              "duration": { "max": "18:00:00" },
              "type": "duration"
            }
        ]
    }
   }' http://<host>/rest/goal
 {code}
* *output on success:* A json structure with the following attributes:
** _id_ : A unique identifier for the goal
** _href_: URL where this goal can be accessed (through GET or DELETE)
** _Goal_: The goal representation (should be fairly similar to what data was posted but with small tweaks such as updated start duration and end information)
* *example output* from the command above:
{code:javascript}
{
    "id": "0xb0425cb0",
    "href": "/rest/goal/0xb0425cb0",
    "Goal":
    {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable":
        [
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "spotSim"
                        }
                    ]
                },
                "type": "enum",
                "name": "drifter"
            },
            {
                "bool":
                {
                    "value": "1"
                },
                "type": "bool",
                "name": "lagrangian"
            },
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "square"
                        }
                    ]
                },
                "type": "enum",
                "name": "path"
            },
            {
                "float":
                {
                    "value": "1000.0000000000000000"
                },
                "type": "float",
                "name": "size"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:16:01.566673"
                },
                "type": "date",
                "name": "start"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:17:01.566673"
                },
                "type": "date",
                "name": "end"
            },
            {
                "duration":
                {
                    "min": "00:01:00",
                    "max": "18:00:00"
                },
                "type": "duration",
                "name": "duration"
            }
        ]
    }
}
{code}

* *Alternate output proposed:*
 {code:javascript}
{
   "pred"        : _string_,
   "on"          : _timeline_,
   "early_start" : _date_time_,
   "late_start"  : _date_time_,
   "early_end"   : _date_time_,
   "late_end"    : _date_time_,
}
{code}
{panel}

 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned


{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">21364758</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21397524</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}
{panel:title=TREX version}
 * *format:* 
 ** GET http://<host>/rest/version
 * Gets information of the currently running version of trex
 * *output:*
 {code:javascript}
{
    "version_major": "0",
    "version_minor": "5",
    "version_release": "0",
    "version_rc": "1",
    "svn_root": "trunk",
    "svn_rev": "1450",
    "version_str": "0.5.0-rc1 (svn:trunk[1450])"
} 
{code}
 ** *note* svn_rev may not be a integer but is the output of the svnversion command. Which mean that ift can be a range of version (eg 1447:1445) and/or be postfixed by a modification flag letter (M for locally modified, S for a branch of tag instead of the trunk)  
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}

{panel:title=Wait for new tick}
* *format:* GET http://<host>/rest/tick/wait
* This request implements a long pull in order for the client to be notified when the next tick occurs. 
The request will not respond until the next tick occurs.
* *output:* similar to GET http://<host>/rest/tick  
{panel}

h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "alive": "true",
            "accept_goals": "false",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_state"
        },
        {
            "name": "dorado_survey",
            "alive": "true",
            "accept_goals": "true",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "1",
                "duration": "00:01:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_survey"
        },
        ...
    ]
}
 {code}
 
 ** "timelines" is the table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 *** "alive" a boolean indicating whether this timeline is still managed or "dead" (resulting on a Failed state)
 *** "accept_goals" a boolean indicating if this timeline accept goals or not (for example position updates on assets do not accept goals)
 *** "publish_plan" a boolean indicating if this timeline will publish its future when it has a plan or can only display its past and current state
 *** "latency" The expected maximum delay until a received goal on this timeline will be processed
 *** "look_ahead" How far ahead in the future this timeline is usually planned for 
 ** booth look_ahead and latency are json object giving their value both in term of TREX tick and real-time duration 
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically). Similarly all the attached information (except for their name) can change as the mission advance (although we often avoid it).
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
** Associated data: the goal in json format (request header need to set Content-Type to application/json)
 * *example of a curl command:*
 {code:none}
   curl -X POST --header 'Content-Type:application/json' -d '
   {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable": [
            { "name": "drifter",
              "type": "enum",
              "enum": { "elem": [ { "value": "MBARI21" } ] }
            },
            { "name": "lagrangian",
              "type": "bool",
              "bool": { "value": "1" }
            },
            { "name": "path",
              "enum": { "elem": [ { "value": "square" } ] }
            },
            { "name": "size", 
              "float": { "value": 1000.0 }
            },
            { "name": "start",
              "type": "date",
              "date": { "min": "2013-May-16 15:53:00" }
            },
            { "name": "duration"
              "duration": { "max": "18:00:00" },
              "type": "duration"
            }
        ]
    }
   }' http://<host>/rest/goal
 {code}
* *output on success:* A json structure with the following attributes:
** _id_ : A unique identifier for the goal
** _href_: URL where this goal can be accessed (through GET or DELETE)
** _Goal_: The goal representation (should be fairly similar to what data was posted but with small tweaks such as updated start duration and end information)
* *example output* from the command above:
{code:javascript}
{
    "id": "0xb0425cb0",
    "href": "/rest/goal/0xb0425cb0",
    "Goal":
    {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable":
        [
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "spotSim"
                        }
                    ]
                },
                "type": "enum",
                "name": "drifter"
            },
            {
                "bool":
                {
                    "value": "1"
                },
                "type": "bool",
                "name": "lagrangian"
            },
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "square"
                        }
                    ]
                },
                "type": "enum",
                "name": "path"
            },
            {
                "float":
                {
                    "value": "1000.0000000000000000"
                },
                "type": "float",
                "name": "size"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:16:01.566673"
                },
                "type": "date",
                "name": "start"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:17:01.566673"
                },
                "type": "date",
                "name": "end"
            },
            {
                "duration":
                {
                    "min": "00:01:00",
                    "max": "18:00:00"
                },
                "type": "duration",
                "name": "duration"
            }
        ]
    }
}
{code}

* *Alternate output proposed:*
 {code:javascript}
{
   "pred"        : _string_,
   "on"          : _timeline_,
   "early_start" : _date_time_,
   "late_start"  : _date_time_,
   "early_end"   : _date_time_,
   "late_end"    : _date_time_,
}
{code}
{panel}

 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned


{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">21364756</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21397523</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}

{panel:title=Wait for new tick}
* *format:* GET http://<host>/rest/tick/wait
* This request implements a long pull in order for the client to be notified when the next tick occurs. 
The request will not respond until the next tick occurs.
* *output:* similar to GET http://<host>/rest/tick  
{panel}

h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "alive": "true",
            "accept_goals": "false",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_state"
        },
        {
            "name": "dorado_survey",
            "alive": "true",
            "accept_goals": "true",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "1",
                "duration": "00:01:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_survey"
        },
        ...
    ]
}
 {code}
 
 ** "timelines" is the table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 *** "alive" a boolean indicating whether this timeline is still managed or "dead" (resulting on a Failed state)
 *** "accept_goals" a boolean indicating if this timeline accept goals or not (for example position updates on assets do not accept goals)
 *** "publish_plan" a boolean indicating if this timeline will publish its future when it has a plan or can only display its past and current state
 *** "latency" The expected maximum delay until a received goal on this timeline will be processed
 *** "look_ahead" How far ahead in the future this timeline is usually planned for 
 ** booth look_ahead and latency are json object giving their value both in term of TREX tick and real-time duration 
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically). Similarly all the attached information (except for their name) can change as the mission advance (although we often avoid it).
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
** Associated data: the goal in json format (request header need to set Content-Type to application/json)
 * *example of a curl command:*
 {code:none}
   curl -X POST --header 'Content-Type:application/json' -d '
   {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable": [
            { "name": "drifter",
              "type": "enum",
              "enum": { "elem": [ { "value": "MBARI21" } ] }
            },
            { "name": "lagrangian",
              "type": "bool",
              "bool": { "value": "1" }
            },
            { "name": "path",
              "enum": { "elem": [ { "value": "square" } ] }
            },
            { "name": "size", 
              "float": { "value": 1000.0 }
            },
            { "name": "start",
              "type": "date",
              "date": { "min": "2013-May-16 15:53:00" }
            },
            { "name": "duration"
              "duration": { "max": "18:00:00" },
              "type": "duration"
            }
        ]
    }
   }' http://<host>/rest/goal
 {code}
* *output on success:* A json structure with the following attributes:
** _id_ : A unique identifier for the goal
** _href_: URL where this goal can be accessed (through GET or DELETE)
** _Goal_: The goal representation (should be fairly similar to what data was posted but with small tweaks such as updated start duration and end information)
* *example output* from the command above:
{code:javascript}
{
    "id": "0xb0425cb0",
    "href": "/rest/goal/0xb0425cb0",
    "Goal":
    {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable":
        [
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "spotSim"
                        }
                    ]
                },
                "type": "enum",
                "name": "drifter"
            },
            {
                "bool":
                {
                    "value": "1"
                },
                "type": "bool",
                "name": "lagrangian"
            },
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "square"
                        }
                    ]
                },
                "type": "enum",
                "name": "path"
            },
            {
                "float":
                {
                    "value": "1000.0000000000000000"
                },
                "type": "float",
                "name": "size"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:16:01.566673"
                },
                "type": "date",
                "name": "start"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:17:01.566673"
                },
                "type": "date",
                "name": "end"
            },
            {
                "duration":
                {
                    "min": "00:01:00",
                    "max": "18:00:00"
                },
                "type": "duration",
                "name": "duration"
            }
        ]
    }
}
{code}

* *Alternate output proposed:*
 {code:javascript}
{
   "pred"        : _string_,
   "on"          : _timeline_,
   "early_start" : _date_time_,
   "late_start"  : _date_time_,
   "early_end"   : _date_time_,
   "late_end"    : _date_time_,
}
{code}
{panel}

 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned


{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">21364755</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">15663626</id>
<property name="body"><![CDATA[This page will refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09
* [TREX Volume Survey Operations] procedure for operations group to start the TREX volume survey
* [Autonomy Deployment Log]

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [Monte-Carlo Testing guide|https://oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect
* [Autonomy Plans for 2010 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans10.pdf]
* [Decision Support for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/CANON.pdf]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">15630872</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8945989</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup

\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come
\\

Build Server

No easy access to a DVD burner, went with net install from previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop+Standard configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.
\\

h3.

From a post on the subject of java install of jdk 1.6 on Debian Etch

cp \-p /etc/apt/sources.list /etc/apt/sources.list_backup

emacs /etc/apt/sources.list

And add the line:
deb [http://www.backports.org/debian] etch-backports main contrib non-free

Then install it with

aptitude update
aptitude \-t etch-backports install sun-java6-jdk

And select the new java version:

update-alternatives \--config java
\\

Test Server

\\
&nbsp;

T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)

Intel 82551 ethernet (e100) device, not autoprobed by debian installer

Installed using net-install&nbsp;debian 4.0r3 and mirror with standard (not desktop like build server).

Note: there were several DVD read failures on the DVD media during the install which thru re-run (retry) in the installer were worked around.
\\

Generating Java proxy classes from .idl
idlj \-td /idlj InsIF.idl
com.sun.tools.corba.se.idl.InvalidArgument: Invalid argument:&nbsp; \-td.

Compiler Usage:

&nbsp;&nbsp;&nbsp; java com.sun.tools.corba.se.idl.toJavaPortable.Compile \[options\] <idl file>

where <idl file> is the name of a file containing IDL definitions, and
\[options\] is any combination of the options listed below.&nbsp; The options
are optional and may appear in any order; <idl file> is required and
must appear last.
&nbsp;

h4. T-Rex CheatSheet


h5. Directory structure :


For compiling/executing correctly TREX expects the following directory structure
<path>
auv-shared
auv-linux&nbsp;&nbsp;&nbsp;
auv (note: this is the auv-qnx directory and may be deprecated in the near future)
Europa
PLASMA
TREX
We will assume on the rest of the document that this structure is respected.\\ \\

Initializing TREX environment variables:

The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
The compilation of TREX core libraries is done similarly
&nbsp;% cd $TREX_HOME
% jam
after that you can compile the binaries amc and sim
% cd ctd2007
% jam amc
% jam sim
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

Using TREX
TREX configuration files :
On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
amc.play.cfg: used to replay a mission for debugging purpose.
amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
&nbsp;vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :

<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
&nbsp;&nbsp;<Timeline name="vehicleState"&nbsp; command="0" />
&nbsp;<Timeline name="setpoint" class="Setpoint" command="1" />
&nbsp;<Timeline name="descend"&nbsp; class="Descend" command="1" />
&nbsp;<Timeline name="ascend"&nbsp;&nbsp; class="Ascend" command="1" />
&nbsp;<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
&nbsp;<Timeline name="getgps" class="GPS" command="1" />
&nbsp;<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>

remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
\*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
\*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

Note on AUV configuration files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that latitude and longitude&nbsp; on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
&nbsp;Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes depthn with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher
Starting AUV code for TREX
This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
On QNX
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer \[-v\] \[-sim\]
note:
\-v fro being verbose
\-sim when in simulation (ie not HW in the loop)&nbsp;

On Linux
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer \-proc <proc>.cfg \[-fastsim\]
note:
\-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
\-fastsim indicates to vcsServer that it will run into linux fast simulation&nbsp;
You can change how verbose auv-linux will be by editing log4cxx.cfg
Starting TREX in batch mode
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg \[-fast\|-sim\] \[<nstep>\]
note:
the argument order is fixed
\-fast indicates that the clock used would connect to auv-linux fast simulation clock
\-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
<nstep> indicates how much step TREX is allowed to do for deliberation&nbsp; at least on each tick&nbsp; when on \-fast or \-sim mode.
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
% cd $TREX_LOG_DIR
% tail \-F latest/TREX.log

Starting TREX in interactive mode
% cd $TREX_HOME
% sim_o_rt <mission> \[-sim\|-fast\] \[<nstep>\]
Options:
&nbsp;Q :\- Quit
&nbsp;N :\- Next
&nbsp;G :\- Goto <tick> e.g. g100
&nbsp;R :\- Reload Debug.cfg
&nbsp;\+ :\- enable pattern e.g. '+Agent'
&nbsp;\- :\- disable pattern e.g. '-Agent'
&nbsp;\! :\- disable all debug messages
>

You can see here that the command is quite similar to amc except&nbsp; that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick (n), etc commands R/+/-/\! are used to manipulate how much data you want&nbsp; on the Debug.log starting from now.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913236</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21397521</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}

{panel:title=Wait for new tick}
* *format:* GET http://<host>/rest/tick/wait
* This request implements a long pull in order for the client to be notified when the next tick occurs. 
The request will not respond until the next tick occurs.
* *output:* similar to GET http://<host>/rest/tick  
{panel}

h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "alive": "true",
            "accept_goals": "false",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_state"
        },
        {
            "name": "dorado_survey",
            "alive": "true",
            "accept_goals": "true",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "1",
                "duration": "00:01:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_survey"
        },
        ...
    ]
}
 {code}
 
 ** "timelines" is the table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 *** "alive" a boolean indicating whether this timeline is still managed or "dead" (resulting on a Failed state)
 *** "accept_goals" a boolean indicating if this timeline accept goals or not (for example position updates on assets do not accept goals)
 *** "publish_plan" a boolean indicating if this timeline will publish its future when it has a plan or can only display its past and current state
 *** "latency" The expected maximum delay until a received goal on this timeline will be processed
 *** "look_ahead" How far ahead in the future this timeline is usually planned for 
 ** booth look_ahead and latency are json object giving their value both in term of TREX tick and real-time duration 
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically). Similarly all the attached information (except for their name) can change as the mission advance (although we often avoid it).
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
** Associated data: the goal in json format (request header need to set Content-Type to application/json)
 * *example of a curl command:*
 {code:shell}
   curl -X POST --header 'Content-Type:application/json' -d '
   {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable": [
            { "name": "drifter",
              "type": "enum",
              "enum": { "elem": [ { "value": "MBARI21" } ] }
            },
            { "name": "lagrangian",
              "type": "bool",
              "bool": { "value": "1" }
            },
            { "name": "path",
              "enum": { "elem": [ { "value": "square" } ] }
            },
            { "name": "size", 
              "float": { "value": 1000.0 }
            },
            { "name": "start",
              "type": "date",
              "date": { "min": "2013-May-16 15:53:00" }
            },
            { "name": "duration"
              "duration": { "max": "18:00:00" },
              "type": "duration"
            }
        ]
    }
   }' http://<host>/rest/goal
 {code}
* *output on success:* A json structure with the following attributes:
** _id_ : A unique identifier for the goal
** _href_: URL where this goal can be accessed (through GET or DELETE)
** _Goal_: The goal representation (should be fairly similar to what data was posted but with small tweaks such as updated start duration and end information)
* *example output* from the command above:
{code:javascript}
{
    "id": "0xb0425cb0",
    "href": "/rest/goal/0xb0425cb0",
    "Goal":
    {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable":
        [
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "spotSim"
                        }
                    ]
                },
                "type": "enum",
                "name": "drifter"
            },
            {
                "bool":
                {
                    "value": "1"
                },
                "type": "bool",
                "name": "lagrangian"
            },
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "square"
                        }
                    ]
                },
                "type": "enum",
                "name": "path"
            },
            {
                "float":
                {
                    "value": "1000.0000000000000000"
                },
                "type": "float",
                "name": "size"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:16:01.566673"
                },
                "type": "date",
                "name": "start"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:17:01.566673"
                },
                "type": "date",
                "name": "end"
            },
            {
                "duration":
                {
                    "min": "00:01:00",
                    "max": "18:00:00"
                },
                "type": "duration",
                "name": "duration"
            }
        ]
    }
}
{code}

* *Alternate output proposed:*
 {code:javascript}
{
   "pred"        : _string_,
   "on"          : _timeline_,
   "early_start" : _date_time_,
   "late_start"  : _date_time_,
   "early_end"   : _date_time_,
   "late_end"    : _date_time_,
}
{code}
{panel}

 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned


{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">21364753</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9405088</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup
\\

h4. Debian Version
\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come

Note: Debian 5.0 (lenny) was released on Feb. 14{^}th^.&nbsp; &nbsp;&nbsp;It contains GNU Compiler Collection 4.3.2, Linux kernel version 2.6.26.&nbsp;&nbsp; This version will NOT initially be used until Debian 4.0 is proven.
\\

h4. Build Server Setup

Note: There was no easy access to a DVD burner for full Debian installer&nbsp;so the process used the&nbsp;net install DVD used in previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop+Standard configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.&nbsp;&nbsp;&nbsp; Machine name is betta.shore.mbari.org.
\\

h5. Required Packages

* apt-get install jam
* apt-get install swig&nbsp; (libSystem fails to build)
* apt-get install libboost-regex-dev

h5. \\
Java Installation

Create a java installation specific to the auv-linux and auv-autonomy development and decouple from the debian system java:

Install in a named directory in opt, example: /opt/jdk_1.6u12

In the dorado1 user profile, set the environment variable to /opt/jdk_1.6u12 - explicit references is better for config management.&nbsp;&nbsp;

Download jdk to /home/dorado1/tools/java
# At the terminal: Type:
*su*
# Enter the root password.
# Change to the directory in which you want to install and copy the java installer bin to this directory. Type:
*cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
# Change the permission of the bin&nbsp;file to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
# Verify that you have permission to execute the file. Type:
*ls \-l*
# Start the installation process.Type:

*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*

Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.
\\
\\

\\
&nbsp;

h5. Autonomy Software checkout:

cd /home/dorado1/prj&nbsp;

svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk TREX&nbsp;

copy Europa from threadfish (Yikes\! NASA version is moving ahead of TREX)
\\

Build failed (jam in TREX) due to missing boost regex loadable module.&nbsp;&nbsp;&nbsp; To resolve this, a debian package was installed (developer version) which is a bit of a sledge hammer.&nbsp;&nbsp; Need to determine of this is a standard component of the OS or a developer package specific to TREX (judged it to be an OS component)

apt-get install _libboost-regex-dev_

Build failed due to libSystem.so missing

Fix:&nbsp; add $PLASMA_HOME/lib to LD_LIBRARY_PATH

\\
&nbsp;

h4. Test Server

\\
\\
For T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)

Intel 82551 ethernet (e100) device, not autoprobed by debian installer

Installed using net-install&nbsp;debian 4.0r3 and mirror with standard (not desktop like build server).

Note: there were several DVD read failures on the DVD media during the install which thru re-run (retry) in the installer were worked around.
\\

Generating Java proxy classes from .idl
idlj \-td /idlj InsIF.idl
com.sun.tools.corba.se.idl.InvalidArgument: Invalid argument:&nbsp; \-td.

Compiler Usage:

&nbsp;&nbsp;&nbsp; java com.sun.tools.corba.se.idl.toJavaPortable.Compile \[options\] <idl file>

where <idl file> is the name of a file containing IDL definitions, and
\[options\] is any combination of the options listed below.&nbsp; The options
are optional and may appear in any order; <idl file> is required and
must appear last.
&nbsp;

h4. T-Rex CheatSheet


h5. Directory structure :

For compiling/executing correctly TREX expects the following directory structure
<path>
auv-shared
auv-linux&nbsp;&nbsp;&nbsp;
auv (note: this is the auv-qnx directory and may be deprecated in the near future)
Europa
Europa/PLASMA
TREX
We will assume on the rest of the document that this structure is respected.
\\
\\
svn+ssh://

Initializing TREX environment variables:

The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
The compilation of TREX core libraries is done similarly
&nbsp;% cd $TREX_HOME
% jam
after that you can compile the binaries amc and sim
% cd ctd2007
% jam amc
% jam sim
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

Using TREX
TREX configuration files :
On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
amc.play.cfg: used to replay a mission for debugging purpose.
amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
&nbsp;vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :

<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
&nbsp;&nbsp;<Timeline name="vehicleState"&nbsp; command="0" />
&nbsp;<Timeline name="setpoint" class="Setpoint" command="1" />
&nbsp;<Timeline name="descend"&nbsp; class="Descend" command="1" />
&nbsp;<Timeline name="ascend"&nbsp;&nbsp; class="Ascend" command="1" />
&nbsp;<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
&nbsp;<Timeline name="getgps" class="GPS" command="1" />
&nbsp;<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>

remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
\*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
\*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

Note on AUV configuration files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that latitude and longitude&nbsp; on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
&nbsp;Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes depthn with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher
Starting AUV code for TREX
This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
On QNX
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer \[-v\] \[-sim\]
note:
\-v fro being verbose
\-sim when in simulation (ie not HW in the loop)&nbsp;

On Linux
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer \-proc <proc>.cfg \[-fastsim\]
note:
\-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
\-fastsim indicates to vcsServer that it will run into linux fast simulation&nbsp;
You can change how verbose auv-linux will be by editing log4cxx.cfg
Starting TREX in batch mode
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg \[-fast\|-sim\] \[<nstep>\]
note:
the argument order is fixed
\-fast indicates that the clock used would connect to auv-linux fast simulation clock
\-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
<nstep> indicates how much step TREX is allowed to do for deliberation&nbsp; at least on each tick&nbsp; when on \-fast or \-sim mode.
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
% cd $TREX_LOG_DIR
% tail \-F latest/TREX.log

Starting TREX in interactive mode
% cd $TREX_HOME
% sim_o_rt <mission> \[-sim\|-fast\] \[<nstep>\]
Options:
&nbsp;Q :\- Quit
&nbsp;N :\- Next
&nbsp;G :\- Goto <tick> e.g. g100
&nbsp;R :\- Reload Debug.cfg
&nbsp;\+ :\- enable pattern e.g. '+Agent'
&nbsp;\- :\- disable pattern e.g. '-Agent'
&nbsp;\! :\- disable all debug messages
>

You can see here that the command is quite similar to amc except&nbsp; that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick (n) , etc commands R/+/-/\! are used to manipulate how much data you want&nbsp; on the Debug.log starting from now.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372355</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9405089</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup

\\

h4. Debian Version

\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come

Note: Debian 5.0 (lenny) was released on Feb. 14{^}th^.&nbsp; &nbsp;&nbsp;It contains GNU Compiler Collection 4.3.2, Linux kernel version 2.6.26.&nbsp;&nbsp; This version will NOT initially be used until Debian 4.0 is proven.

Debian 4.0 and AUV-Linux install instructions AUV Debian4 Linux and auv-pkgs Install, build
\\

h4. Build Server Setup

Note: There was no easy access to a DVD burner for full Debian installer&nbsp;so the process used the&nbsp;net install DVD used in previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop+Standard configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.&nbsp;&nbsp;&nbsp; Machine name is betta.shore.mbari.org.
\\

h5. Required Packages

* apt-get install jam
* apt-get install swig&nbsp; (libSystem fails to build)
* apt-get install libboost-regex-dev

h5. \\

Java Installation

Create a java installation specific to the auv-linux and auv-autonomy development and decouple from the debian system java:

Install in a named directory in opt, example: /opt/jdk_1.6u12

In the dorado1 user profile, set the environment variable to /opt/jdk_1.6u12 - explicit references is better for config management.&nbsp;&nbsp;

Download jdk to /home/dorado1/tools/java
# At the terminal: Type:
*su*
# Enter the root password.
# Change to the directory in which you want to install and copy the java installer bin to this directory. Type:
*cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
# Change the permission of the bin&nbsp;file to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
# Verify that you have permission to execute the file. Type:
*ls \-l*
# Start the installation process.Type:

*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*

Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.
\\
\\

\\
&nbsp;

h5. Autonomy Software checkout:

cd /home/dorado1/prj&nbsp;

svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk TREX&nbsp;

copy Europa from threadfish (Yikes\! NASA version is moving ahead of TREX)
\\

Build failed (jam in TREX) due to missing boost regex loadable module.&nbsp;&nbsp;&nbsp; To resolve this, a debian package was installed (developer version) which is a bit of a sledge hammer.&nbsp;&nbsp; Need to determine of this is a standard component of the OS or a developer package specific to TREX (judged it to be an OS component)

apt-get install _libboost-regex-dev_

Build failed due to libSystem.so missing

Fix:&nbsp; add $PLASMA_HOME/lib to LD_LIBRARY_PATH

\\
&nbsp;

h4. Test Server

\\
\\
For T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)

Intel 82551 ethernet (e100) device, not autoprobed by debian installer

Installed using net-install&nbsp;debian 4.0r3 and mirror with standard (not desktop like build server).

Note: there were several DVD read failures on the DVD media during the install which thru re-run (retry) in the installer were worked around.
\\

Generating Java proxy classes from .idl
idlj \-td /idlj InsIF.idl
com.sun.tools.corba.se.idl.InvalidArgument: Invalid argument:&nbsp; \-td.

Compiler Usage:

&nbsp;&nbsp;&nbsp; java com.sun.tools.corba.se.idl.toJavaPortable.Compile \[options\] <idl file>

where <idl file> is the name of a file containing IDL definitions, and
\[options\] is any combination of the options listed below.&nbsp; The options
are optional and may appear in any order; <idl file> is required and
must appear last.
&nbsp;

h4. T-Rex CheatSheet


h5. Directory structure :

For compiling/executing correctly TREX expects the following directory structure
<path>
auv-shared
auv-linux&nbsp;&nbsp;&nbsp;
auv (note: this is the auv-qnx directory and may be deprecated in the near future)
Europa
Europa/PLASMA
TREX
We will assume on the rest of the document that this structure is respected.
\\
\\
svn+ssh://

Initializing TREX environment variables:

The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
The compilation of TREX core libraries is done similarly
&nbsp;% cd $TREX_HOME
% jam
after that you can compile the binaries amc and sim
% cd ctd2007
% jam amc
% jam sim
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

Using TREX
TREX configuration files :
On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
amc.play.cfg: used to replay a mission for debugging purpose.
amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
&nbsp;vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :

<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
&nbsp;&nbsp;<Timeline name="vehicleState"&nbsp; command="0" />
&nbsp;<Timeline name="setpoint" class="Setpoint" command="1" />
&nbsp;<Timeline name="descend"&nbsp; class="Descend" command="1" />
&nbsp;<Timeline name="ascend"&nbsp;&nbsp; class="Ascend" command="1" />
&nbsp;<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
&nbsp;<Timeline name="getgps" class="GPS" command="1" />
&nbsp;<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>

remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
\*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
\*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

Note on AUV configuration files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that latitude and longitude&nbsp; on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
&nbsp;Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes depthn with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher
Starting AUV code for TREX
This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
On QNX
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer \[-v\] \[-sim\]
note:
\-v fro being verbose
\-sim when in simulation (ie not HW in the loop)&nbsp;

On Linux
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer \-proc <proc>.cfg \[-fastsim\]
note:
\-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
\-fastsim indicates to vcsServer that it will run into linux fast simulation&nbsp;
You can change how verbose auv-linux will be by editing log4cxx.cfg
Starting TREX in batch mode
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg \[-fast\|-sim\] \[<nstep>\]
note:
the argument order is fixed
\-fast indicates that the clock used would connect to auv-linux fast simulation clock
\-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
<nstep> indicates how much step TREX is allowed to do for deliberation&nbsp; at least on each tick&nbsp; when on \-fast or \-sim mode.
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
% cd $TREX_LOG_DIR
% tail \-F latest/TREX.log

Starting TREX in interactive mode
% cd $TREX_HOME
% sim_o_rt <mission> \[-sim\|-fast\] \[<nstep>\]
Options:
&nbsp;Q :\- Quit
&nbsp;N :\- Next
&nbsp;G :\- Goto <tick> e.g. g100
&nbsp;R :\- Reload Debug.cfg
&nbsp;\+ :\- enable pattern e.g. '+Agent'
&nbsp;\- :\- disable pattern e.g. '-Agent'
&nbsp;\! :\- disable all debug messages
>

You can see here that the command is quite similar to amc except&nbsp; that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick (n) , etc commands R/+/-/\! are used to manipulate how much data you want&nbsp; on the Debug.log starting from now.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372356</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21397520</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}


h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "href": "\/rest\/timeline\/dorado_state"
        },
        {
            "name": "dorado_survey",
            "href": "\/rest\/timeline\/dorado_survey"
        },
        {
            "name": "drifterFollow",
            "href": "\/rest\/timeline\/drifterFollow"
        },
        {
            "name": "iridium",
            "href": "\/rest\/timeline\/iridium"
        },
        {
            "name": "mbfd",
            "href": "\/rest\/timeline\/mbfd"
        },
        {
            "name": "trex_data",
            "href": "\/rest\/timeline\/trex_data"
        },
        {
            "name": "wgOA",
            "href": "\/rest\/timeline\/wgOA"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically)
 ** I will probably add in the future extra attributes per timeline indicating information such as ehether this timeline accept goals or not, ... 
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
** Associated data: the goal in json format (request header need to set Content-Type to application/json)
 * *example of a curl command:*
 {code:shell}
   curl -X POST --header 'Content-Type:application/json' -d '
   {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable": [
            { "name": "drifter",
              "type": "enum",
              "enum": { "elem": [ { "value": "MBARI21" } ] }
            },
            { "name": "lagrangian",
              "type": "bool",
              "bool": { "value": "1" }
            },
            { "name": "path",
              "enum": { "elem": [ { "value": "square" } ] }
            },
            { "name": "size", 
              "float": { "value": 1000.0 }
            },
            { "name": "start",
              "type": "date",
              "date": { "min": "2013-May-16 15:53:00" }
            },
            { "name": "duration"
              "duration": { "max": "18:00:00" },
              "type": "duration"
            }
        ]
    }
   }' http://<host>/rest/goal
 {code}
* *output on success:* A json structure with the following attributes:
** _id_ : A unique identifier for the goal
** _href_: URL where this goal can be accessed (through GET or DELETE)
** _Goal_: The goal representation (should be fairly similar to what data was posted but with small tweaks such as updated start duration and end information)
* *example output* from the command above:
{code:javascript}
{
    "id": "0xb0425cb0",
    "href": "/rest/goal/0xb0425cb0",
    "Goal":
    {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable":
        [
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "spotSim"
                        }
                    ]
                },
                "type": "enum",
                "name": "drifter"
            },
            {
                "bool":
                {
                    "value": "1"
                },
                "type": "bool",
                "name": "lagrangian"
            },
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "square"
                        }
                    ]
                },
                "type": "enum",
                "name": "path"
            },
            {
                "float":
                {
                    "value": "1000.0000000000000000"
                },
                "type": "float",
                "name": "size"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:16:01.566673"
                },
                "type": "date",
                "name": "start"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:17:01.566673"
                },
                "type": "date",
                "name": "end"
            },
            {
                "duration":
                {
                    "min": "00:01:00",
                    "max": "18:00:00"
                },
                "type": "duration",
                "name": "duration"
            }
        ]
    }
}
{code}

* *Alternate output proposed:*
 {code:javascript}
{
   "pred"        : _string_,
   "on"          : _timeline_,
   "early_start" : _date_time_,
   "late_start"  : _date_time_,
   "early_end"   : _date_time_,
   "late_end"    : _date_time_,
}
{code}
{panel}

 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">21364752</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">751</id>
<property name="body"><![CDATA[h2. Minutes from 2007-02-02: Introducing Autonomy Behaviors in the AUV's]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">754</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">752</id>
<property name="body"><![CDATA[h2. Minutes from 2007-02-02: Introducing Autonomy Behaviors in the AUV's

* We need to knw the state of behavior completion
** timed-out
** running
** failed
** success

* Some behaviors will not be modifiable by the AMC (such as depth envelope)

TODO
# Behavior stack control (and an abort stack)
#* start
#* stop
#* status
#* termination mode
#More parameters exposed
# Initialization
#* timer
#* depth envelope
# Need to specify a dummy behavior (i.e. idle; it just turns off the prop). So that the AUV can float if the AMC is thinking and no behavior is currently running.
# We need a hang out behavior so tha the AUV can hover underwater waiting for pickup.

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">755</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">753</id>
<property name="body"><![CDATA[h1. Minutes from 2007-02-02: Introducing Autonomy Behaviors in the AUV's

h2. Notes
* We need to knw the state of behavior completion
** timed-out
** running
** failed
** success

* Some behaviors will not be modifiable by the AMC (such as depth envelope)

h2. TODO
# Behavior stack control (and an abort stack)
#* start
#* stop
#* status
#* termination mode
#More parameters exposed
# Initialization
#* timer
#* depth envelope
# Need to specify a dummy behavior (i.e. idle; it just turns off the prop). So that the AUV can float if the AMC is thinking and no behavior is currently running.
# We need a hang out behavior so tha the AUV can hover underwater waiting for pickup.

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">756</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">754</id>
<property name="body"><![CDATA[h1. Minutes from 2007-02-02: Introducing Autonomy Behaviors in the AUV's

h2. Notes
!AMC Overview.ong!
* We need to knw the state of behavior completion
** timed-out
** running
** failed
** success

* Some behaviors will not be modifiable by the AMC (such as depth envelope)


h2. TODO
# Behavior stack control (and an abort stack)
#* start
#* stop
#* status
#* termination mode
#More parameters exposed
# Initialization
#* timer
#* depth envelope
# Need to specify a dummy behavior (i.e. idle; it just turns off the prop). So that the AUV can float if the AMC is thinking and no behavior is currently running.
# We need a hang out behavior so tha the AUV can hover underwater waiting for pickup.

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">757</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">747</id>
<property name="body"><![CDATA[]]></property>
<property name="content" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">750</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">749</id>
<property name="body"><![CDATA[This is the home page for the Autonomous Underwater Vehicles space.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">752</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8946099</id>
<property name="body"><![CDATA[h2. AUV Build and Test Server Setup

\\

Debian Etch 4.0 Release 3 has been used for auv-linux, Etch 4.0 Release 6 is currently available.&nbsp;&nbsp; It is recommended to take the bug fixes that come
\\

Build Server

No easy access to a DVD burner, went with net install from previous AUV-Linux effort.&nbsp;&nbsp; Installed Desktop+Standard configuration, root&nbsp;(autonomy) and dorado1 (dorado1) accounts.
\\

h3.

From a post on the subject of java install of jdk 1.6 on Debian Etch

cp \-p /etc/apt/sources.list /etc/apt/sources.list_backup

emacs /etc/apt/sources.list

And add the line:
deb [http://www.backports.org/debian] etch-backports main contrib non-free

Then install it with

aptitude update
aptitude \-t etch-backports install sun-java6-jdk

And select the new java version:

update-alternatives \--config java
\\

\\
&nbsp;apt-get install jam

\\
New plan for java, create a java specific to the auv-linux and auv-autonomy development and decouple from the debian system java:

Install in a named directory in opt, example: /opt/jdk_1.6u12

Create a generic opt link to java, /opt/jdk as an optional means for multiple projects to point to the 'active java'

In the dorado1 user profile, set the environment variable to /opt/jdk_1.6u12 - explicit references is better for config management, IMHO. &nbsp;

Download jdk to /home/dorado1/tools/java
# At the terminal: Type:
*su*
# Enter the root password.
# Change to the directory in which you want to install and copy the java installer bin to this directory. Type:
*cd /opt*
*cp /home/dorado1/tools/java/jdk-6u12-linux.i586.bin .*
# Change the permission of the bin&nbsp;file to be executable. Type:
*chmod a+x jdk-6u12-linux-i586.bin*
# Verify that you have permission to execute the file. Type:
*ls \-l*
# Start the installation process.Type:

*&nbsp;&nbsp;&nbsp;&nbsp; ./jdk-6u12-linux-i586.bin*

Press the spacebar to display the next page. At the end, enter *yes*.&nbsp;For this procedure&nbsp;the jdk&nbsp;is installed in the */opt/jdk1.6.0_12* directory. When the installation has completed, you will see the word *Done*.
\\
\\

\\
&nbsp;

Software checkout:

cd /home/dorado1/prj&nbsp;

svn co svn+ssh://kahuna.shore.mbari.org/svn/repos/TREX/trunk TREX&nbsp;

copy Europa from threadfish (Yikes\! NASA version is moving ahead of TREX)\\

Build failed (jam in TREX) due to missing boost regex loadable module.&nbsp;&nbsp;&nbsp; To resolve this, a debian package was installed (developer version) which is a bit of a sledge hammer.&nbsp;&nbsp; Need to determine of this is a standard component of the OS or a developer package specific to TREX (judged it to be an OS component)

apt-get install _libboost-regex-dev_

Build failed due to libSystem.so missing

Fix:&nbsp; add $PLASMA_HOME/lib to LD_LIBRARY_PATH

\\
&nbsp;

h4. Test Server

\\
\\
\\

For T-Rex PC104 Stack

[http://sbc.winsystems.com/products/EPX-GX500.cfm]

AMD Geode 500Mhz (1W)

Intel 82551 ethernet (e100) device, not autoprobed by debian installer

Installed using net-install&nbsp;debian 4.0r3 and mirror with standard (not desktop like build server).

Note: there were several DVD read failures on the DVD media during the install which thru re-run (retry) in the installer were worked around.
\\

Generating Java proxy classes from .idl
idlj \-td /idlj InsIF.idl
com.sun.tools.corba.se.idl.InvalidArgument: Invalid argument:&nbsp; \-td.

Compiler Usage:

&nbsp;&nbsp;&nbsp; java com.sun.tools.corba.se.idl.toJavaPortable.Compile \[options\] <idl file>

where <idl file> is the name of a file containing IDL definitions, and
\[options\] is any combination of the options listed below.&nbsp; The options
are optional and may appear in any order; <idl file> is required and
must appear last.
&nbsp;

h4. T-Rex CheatSheet


h5. Directory structure :

For compiling/executing correctly TREX expects the following directory structure
<path>
auv-shared
auv-linux&nbsp;&nbsp;&nbsp;
auv (note: this is the auv-qnx directory and may be deprecated in the near future)
Europa
Europa/PLASMA
TREX
We will assume on the rest of the document that this structure is respected.
\\
\\
svn+ssh://

Initializing TREX environment variables:

The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
The compilation of TREX core libraries is done similarly
&nbsp;% cd $TREX_HOME
% jam
after that you can compile the binaries amc and sim
% cd ctd2007
% jam amc
% jam sim
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

Using TREX
TREX configuration files :
On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
amc.play.cfg: used to replay a mission for debugging purpose.
amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
&nbsp;vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :

<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
&nbsp;&nbsp;<Timeline name="vehicleState"&nbsp; command="0" />
&nbsp;<Timeline name="setpoint" class="Setpoint" command="1" />
&nbsp;<Timeline name="descend"&nbsp; class="Descend" command="1" />
&nbsp;<Timeline name="ascend"&nbsp;&nbsp; class="Ascend" command="1" />
&nbsp;<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
&nbsp;<Timeline name="getgps" class="GPS" command="1" />
&nbsp;<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>

remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
\*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
\*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

Note on AUV configuration files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that latitude and longitude&nbsp; on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
&nbsp;Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes depthn with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher
Starting AUV code for TREX
This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
On QNX
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer \[-v\] \[-sim\]
note:
\-v fro being verbose
\-sim when in simulation (ie not HW in the loop)&nbsp;

On Linux
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer \-proc <proc>.cfg \[-fastsim\]
note:
\-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
\-fastsim indicates to vcsServer that it will run into linux fast simulation&nbsp;
You can change how verbose auv-linux will be by editing log4cxx.cfg
Starting TREX in batch mode
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg \[-fast\|-sim\] \[<nstep>\]
note:
the argument order is fixed
\-fast indicates that the clock used would connect to auv-linux fast simulation clock
\-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
<nstep> indicates how much step TREX is allowed to do for deliberation&nbsp; at least on each tick&nbsp; when on \-fast or \-sim mode.
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
% cd $TREX_LOG_DIR
% tail \-F latest/TREX.log

Starting TREX in interactive mode
% cd $TREX_HOME
% sim_o_rt <mission> \[-sim\|-fast\] \[<nstep>\]
Options:
&nbsp;Q :\- Quit
&nbsp;N :\- Next
&nbsp;G :\- Goto <tick> e.g. g100
&nbsp;R :\- Reload Debug.cfg
&nbsp;\+ :\- enable pattern e.g. '+Agent'
&nbsp;\- :\- disable pattern e.g. '-Agent'
&nbsp;\! :\- disable all debug messages
>

You can see here that the command is quite similar to amc except&nbsp; that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick (n) , etc commands R/+/-/\! are used to manipulate how much data you want&nbsp; on the Debug.log starting from now.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913353</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">763</id>
<property name="body"><![CDATA[h2. Overview
In 2007, the AUV operations group intends to port the AUV control software from QNX to Linux. We currently have 2 ARM boards that run Debian linux for development.

h2. Notes
[~oreilly] is interested in tryig to port the IDL code to a Linux Corba ORB
[~brian] will be working on the port later this year.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">766</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">759</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development

h2. Minutes
[2007-02-02 Minutes]
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">762</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8946088</id>
<property name="body"><![CDATA[h2. Overview

In 2007, the AUV operations group&nbsp;set forward&nbsp;to port the AUV control software from QNX to Linux.&nbsp;&nbsp;There were 2 ARM boards&nbsp;available&nbsp;that run Debian linux for development.&nbsp;&nbsp; The transition to ARM was delayed.

The AUV-Linux port was completed with a sea trial by the end of 2008 running on the Geode x86 platform.&nbsp;&nbsp;&nbsp; To help the transition to Support Engineering, [~oreilly] has created&nbsp; [^AUV-Linux tutorial.ppt]&nbsp;in addition to the porting guide and programming guide in the CVS repository.

h2. Notes

[~oreilly] is interested in porting the IDL code to a Linux Corba ORB

Here's a list of [Missing Headers]

[~brent] has suggested that we use the same ARM-9 hardware as ESP for the AUV port. He has a Linux port that's designed to run headless, auto-connects to the network, boots fast, runs in 4 MB. (i.e. Talk to [~brent])

h2. IPC

[~oreilly]&nbsp;has implemented the&nbsp;IPC using CORBA (OmniORB). Other fall-back options&nbsp;considered were&nbsp;shared memory and [D-Bus|http://www.freedesktop.org/wiki/Software/dbus]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913340</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">762</id>
<property name="body"><![CDATA[h2. Overview
In 2007, the AUV operations group intends to port the AUV control software from QNX to Linux. We currently have 2 ARM boards that run Debian linux for development.

h2. Notes
[~oreilly] is interested in tryig to port the IDL code to a Linux Corba ORB]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">765</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">761</id>
<property name="body"><![CDATA[h2. Overview
In 2007, the AUV operations group intends to port the AUV control software from QNX to Linux. We currently have 2 ARM boards that run Debian linux for development.

h2. Notes
[~orielly] is interested in tryig to port the IDL code to a Linux Corba ORB]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">764</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">756</id>
<property name="body"><![CDATA[h1. Minutes from 2007-02-02: Introducing Autonomy Behaviors in the AUV's

h2. Notes
!AMC Overview.png!
* We need to knw the state of behavior completion
** timed-out
** running
** failed
** success

* Some behaviors will not be modifiable by the AMC (such as depth envelope)

* LayeredControl.cpp reads mission file. New LayeredControl will have socket interface so behaviors can be serialized to AMC.
** LayeredControl methods to be added:
*** create behavior
*** destroy behavior
*** behavior done
*** query behavior (by id)
** Behavior needs a flag to indicate if it's running.

* Behvior stack is currently built with mission.cfg:
{{behavior {
  name = value
  ...
} }}



h2. TODO
# Behavior stack control (and an abort stack)
#* start
#* stop
#* status
#* termination mode
#More parameters exposed
# Initialization
#* timer
#* depth envelope
# Need to specify a dummy behavior (i.e. idle; it just turns off the prop). So that the AUV can float if the AMC is thinking and no behavior is currently running.
# We need a hang out behavior so tha the AUV can hover underwater waiting for pickup.

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">759</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8946083</id>
<property name="body"><![CDATA[h2. Overview

In 2007, the AUV operations group intends to port the AUV control software from QNX to Linux. We currently have 2 ARM boards that run Debian linux for development.

h2. Notes
[~oreilly] is interested in porting the IDL code to a Linux Corba ORB

Here's a list of [Missing Headers]

[~brent] has suggested that we use the same ARM-9 hardware as ESP for the AUV port. He has a Linux port that's designed to run headless, auto-connects to the network, boots fast, runs in 4 MB. (i.e. Talk to [~brent])

h2. IPC

[~oreilly] is implementing IPC using CORBA (OmniORB). Other fall-back options include shared memory and [D-Bus|http://www.freedesktop.org/wiki/Software/dbus]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913334</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">755</id>
<property name="body"><![CDATA[h1. Minutes from 2007-02-02: Introducing Autonomy Behaviors in the AUV's

h2. Notes
!AMC Overview.png!
* We need to knw the state of behavior completion
** timed-out
** running
** failed
** success

* Some behaviors will not be modifiable by the AMC (such as depth envelope)


h2. TODO
# Behavior stack control (and an abort stack)
#* start
#* stop
#* status
#* termination mode
#More parameters exposed
# Initialization
#* timer
#* depth envelope
# Need to specify a dummy behavior (i.e. idle; it just turns off the prop). So that the AUV can float if the AMC is thinking and no behavior is currently running.
# We need a hang out behavior so tha the AUV can hover underwater waiting for pickup.

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">758</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8946084</id>
<property name="body"><![CDATA[h2. Overview

In 2007, the AUV operations group intends to port the AUV control software from QNX to Linux. We currently have 2 ARM boards that run Debian linux for development.

The AUV-Linux port was complete with a sea trial by the end of 2008.&nbsp;&nbsp;&nbsp; To help the transition to Support Engineering, [~oreilly] has created [tutorial slides][AUV-Linux tutorial.ppt] in addition to the porting guide and programming guide in the CVS repository.

h2. Notes

[~oreilly] is interested in porting the IDL code to a Linux Corba ORB

Here's a list of [Missing Headers]

[~brent] has suggested that we use the same ARM-9 hardware as ESP for the AUV port. He has a Linux port that's designed to run headless, auto-connects to the network, boots fast, runs in 4 MB. (i.e. Talk to [~brent])

h2. IPC

[~oreilly] is implementing IPC using CORBA (OmniORB). Other fall-back options include shared memory and [D-Bus|http://www.freedesktop.org/wiki/Software/dbus]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913336</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">758</id>
<property name="body"><![CDATA[h1. Minutes from 2007-02-02: Introducing Autonomy Behaviors in the AUV's

h2. Notes
!AMC Overview.png!
* We need to know the state of behavior completion
** timed-out
** running
** failed
** success

* Some behaviors will not be modifiable by the AMC (such as depth envelope)

* LayeredControl.cpp reads mission file. New LayeredControl will have socket interface so behaviors can be serialized to AMC.
** LayeredControl methods to be added:
*** create behavior
*** destroy behavior
*** behavior done
*** query behavior (by id)
** Behavior needs a flag to indicate if it's running.

* Behvior stack is currently built with mission.cfg. A behavior is turned into an object. Each behavior object has an execute method. The execute method can not block. These behaviors are stored into a linked list which is walked every 200ms.
{code}behavior1 {
  name = value
  ... <-- Last token has highest priority
}
behavior2 {
 name = value
 ...
}{code}



h2. TODO
# Behavior stack control (and an abort stack)
#* start
#* stop
#* status
#* termination mode
#More parameters exposed
# Initialization
#* timer
#* depth envelope
# Need to specify a dummy behavior (i.e. idle; it just turns off the prop). So that the AUV can float if the AMC is thinking and no behavior is currently running.
# We need a hang out behavior so tha the AUV can hover underwater waiting for pickup.

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">761</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">757</id>
<property name="body"><![CDATA[h1. Minutes from 2007-02-02: Introducing Autonomy Behaviors in the AUV's

h2. Notes
!AMC Overview.png!
* We need to knw the state of behavior completion
** timed-out
** running
** failed
** success

* Some behaviors will not be modifiable by the AMC (such as depth envelope)

* LayeredControl.cpp reads mission file. New LayeredControl will have socket interface so behaviors can be serialized to AMC.
** LayeredControl methods to be added:
*** create behavior
*** destroy behavior
*** behavior done
*** query behavior (by id)
** Behavior needs a flag to indicate if it's running.

* Behvior stack is currently built with mission.cfg. A behavior is turned into an object. Each behavior object has an execute method. The execute method can not block. These behaviors are stored into a linked list which is walked every 200ms.
{code}behavior1 {
  name = value
  ... <-- Last token has highest priority
}
behavior2 {
 name = value
 ...
}{code}



h2. TODO
# Behavior stack control (and an abort stack)
#* start
#* stop
#* status
#* termination mode
#More parameters exposed
# Initialization
#* timer
#* depth envelope
# Need to specify a dummy behavior (i.e. idle; it just turns off the prop). So that the AUV can float if the AMC is thinking and no behavior is currently running.
# We need a hang out behavior so tha the AUV can hover underwater waiting for pickup.

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">760</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8946086</id>
<property name="body"><![CDATA[h2. Overview

In 2007, the AUV operations group intends to port the AUV control software from QNX to Linux. We currently have 2 ARM boards that run Debian linux for development.

The AUV-Linux port was complete with a sea trial by the end of 2008.&nbsp;&nbsp;&nbsp; To help the transition to Support Engineering, [~oreilly] has created&nbsp; AUV-Linux tutorial.ppt in addition to the porting guide and programming guide in the CVS repository.

h2. Notes

[~oreilly] is interested in porting the IDL code to a Linux Corba ORB

Here's a list of [Missing Headers]

[~brent] has suggested that we use the same ARM-9 hardware as ESP for the AUV port. He has a Linux port that's designed to run headless, auto-connects to the network, boots fast, runs in 4 MB. (i.e. Talk to [~brent])

h2. IPC

[~oreilly] is implementing IPC using CORBA (OmniORB). Other fall-back options include shared memory and [D-Bus|http://www.freedesktop.org/wiki/Software/dbus]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913338</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867821</id>
<property name="body"><![CDATA[On Friday Sept 14th 2007, a scheduled cruise on the Zephyr with the CTD vehicle was aborted. This note walks down the highlights of the event and the resultant Lessons Learned generated on Monday 17th at the regular status meeting.

&nbsp;Event:&nbsp;

On Friday 14th, &nbsp;\\

1, Accounts root to dorado1

2. Rename /bin to /exec

3. Automated Network Configuration

&nbsp;&nbsp;&nbsp; + shore&nbsp; to ship
&nbsp;&nbsp;&nbsp; + ship to Ops
&nbsp;&nbsp;&nbsp; + Ops to shore

4. Nightly build
&nbsp;&nbsp;&nbsp; + Run EUROPA regression tests
&nbsp;&nbsp;&nbsp; + Run T-REX regression tests

5. trex1 tests

&nbsp;&nbsp;&nbsp; + run tests from the head of SVN
&nbsp;&nbsp;&nbsp; + run nightly build on trex1

6. Test deployment process
&nbsp;&nbsp;&nbsp; + Dry run of entire deployment the day before (sans vehicle network test the full process to deploy)
&nbsp;&nbsp;&nbsp; + cheat sheet which is small and simple
&nbsp;&nbsp;&nbsp; + Have a large capacity USB flash stick handy
&nbsp;&nbsp;&nbsp; + If possible install binaries on the AUV and practice deployment the previous day

7. Fail over to AMC run-out sequence
&nbsp;&nbsp;&nbsp; + only on worst case
&nbsp;&nbsp;&nbsp; + extend NAV failure timeour
&nbsp;&nbsp;&nbsp; + have a canned "smart" run out sequence on AMC side (check with Hans on the viability e.g turn prop slowly or shut down altogether)
&nbsp;&nbsp;&nbsp; + return a version of 'Idle' behavior which will become our (T-REX) standby sequence which is triggered when multi-reactor reasoning is encountered

8. Bound the box of the navigational envelope to ensure the AUV doesn't disappear outside the general area where tests are conducted.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835057</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867822</id>
<property name="body"><![CDATA[On Friday Sept 14th 2007, a scheduled cruise on the Zephyr with the CTD vehicle was aborted. This note walks down the highlights of the event and the resultant Lessons Learned generated on Monday 17th at the regular status meeting.

&nbsp;Event:&nbsp;

On Friday 14th,&nbsp; while at the dock on the Zephyr setting up for the cruise we encountered network problems in connecting to the AUV which was connected by cable to local network. We spent some time trying to diagnose the problem thinking that it had to do with an incorrect setting of our laptop ('dovekie') with respect to the ships network. This turned out to be a wiring problem with a recently installed router but one which nevertheless set us back by a good half hour. In the anxiety to get going, and while installing new binaries from 'dovekie' to trex2 (the onboard autonomy Linux box) on the AUV, the /bin directory of the Linux filesystem got deleted. This was doable since we had been till that time, been logging in as 'root' with unlimited privileges.
\\

1, Accounts root to dorado1

2. Rename /bin to /exec

3. Automated Network Configuration

&nbsp;&nbsp;&nbsp; + shore&nbsp; to ship
&nbsp;&nbsp;&nbsp; + ship to Ops
&nbsp;&nbsp;&nbsp; + Ops to shore

4. Nightly build
&nbsp;&nbsp;&nbsp; + Run EUROPA regression tests
&nbsp;&nbsp;&nbsp; + Run T-REX regression tests

5. trex1 tests

&nbsp;&nbsp;&nbsp; + run tests from the head of SVN
&nbsp;&nbsp;&nbsp; + run nightly build on trex1

6. Test deployment process
&nbsp;&nbsp;&nbsp; + Dry run of entire deployment the day before (sans vehicle network test the full process to deploy)
&nbsp;&nbsp;&nbsp; + cheat sheet which is small and simple
&nbsp;&nbsp;&nbsp; + Have a large capacity USB flash stick handy
&nbsp;&nbsp;&nbsp; + If possible install binaries on the AUV and practice deployment the previous day

7. Fail over to AMC run-out sequence
&nbsp;&nbsp;&nbsp; + only on worst case
&nbsp;&nbsp;&nbsp; + extend NAV failure timeour
&nbsp;&nbsp;&nbsp; + have a canned "smart" run out sequence on AMC side (check with Hans on the viability e.g turn prop slowly or shut down altogether)
&nbsp;&nbsp;&nbsp; + return a version of 'Idle' behavior which will become our (T-REX) standby sequence which is triggered when multi-reactor reasoning is encountered

8. Bound the box of the navigational envelope to ensure the AUV doesn't disappear outside the general area where tests are conducted.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835058</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867823</id>
<property name="body"><![CDATA[On Friday Sept 14th 2007, a scheduled cruise on the Zephyr with the CTD vehicle was aborted. This note walks down the highlights of the event and the resultant Lessons Learned generated on Monday 17th at the regular status meeting.

&nbsp;Event:&nbsp;

On Friday 14th,&nbsp; while at the dock on the Zephyr setting up for the cruise we encountered network problems in connecting to the AUV which was connected by cable to local network. We spent some time trying to diagnose the problem thinking that it had to do with an incorrect setting of our laptop ('dovekie') with respect to the ships network. This turned out to be a wiring problem with a recently installed router but one which nevertheless set us back by a good half hour. In the anxiety to get going, and while installing new binaries from 'dovekie' to trex2 (the onboard autonomy Linux box) on the AUV, the /bin directory of the Linux filesystem got deleted. This was doable since we had been till that time, been logging in as 'root' with unlimited privileges.\\

1, Accounts root to dorado1

2. Rename /bin to /exec

3. Automated Network Configuration

&nbsp;&nbsp;&nbsp; + shore&nbsp; to ship
&nbsp;&nbsp;&nbsp; + ship to Ops
&nbsp;&nbsp;&nbsp; + Ops to shore

4. Nightly build
&nbsp;&nbsp;&nbsp; + Run EUROPA regression tests
&nbsp;&nbsp;&nbsp; + Run T-REX regression tests

5. trex1 tests

&nbsp;&nbsp;&nbsp; + run tests from the head of SVN
&nbsp;&nbsp;&nbsp; + run nightly build on trex1

6. Test deployment process
&nbsp;&nbsp;&nbsp; + Dry run of entire deployment the day before (sans vehicle network test the full process to deploy)
&nbsp;&nbsp;&nbsp; + cheat sheet which is small and simple
&nbsp;&nbsp;&nbsp; + Have a large capacity USB flash stick handy
&nbsp;&nbsp;&nbsp; + If possible install binaries on the AUV and practice deployment the previous day

7. Fail over to AMC run-out sequence
&nbsp;&nbsp;&nbsp; + only on worst case
&nbsp;&nbsp;&nbsp; + extend NAV failure timeour
&nbsp;&nbsp;&nbsp; + have a canned "smart" run out sequence on AMC side (check with Hans on the viability e.g turn prop slowly or shut down altogether)
&nbsp;&nbsp;&nbsp; + return a version of 'Idle' behavior which will become our (T-REX) standby sequence which is triggered when multi-reactor reasoning is encountered

8. Bound the box of the navigational envelope to ensure the AUV doesn't disappear outside the general area where tests are conducted.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835059</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867824</id>
<property name="body"><![CDATA[On Friday Sept 14th 2007, a scheduled cruise on the Zephyr with the CTD vehicle was aborted. This note walks down the highlights of the event and the resultant Lessons Learned generated on Monday 17th at the regular status meeting.

&nbsp;Event:&nbsp;

On Friday 14th,&nbsp; while at the dock on the Zephyr setting up for the cruise we encountered network problems in connecting to the AUV which was connected by cable to local network. We spent some time trying to diagnose the problem thinking that it had to do with an incorrect setting of our laptop ('dovekie') with respect to the ships network. This turned out to be a wiring problem with a recently installed router but one which nevertheless set us back by a good half hour. In the anxiety to get going, and while installing new binaries from 'dovekie' to trex2 (the onboard autonomy Linux box) on the AUV, the /bin directory of the Linux filesystem got deleted. This was doable since we had been till that time, been logging in as 'root' with unlimited privileges.

The immediate impact of this event was that we had to move the vehicle to the DMO AUV lab, remove the bubble and remove the hard drive of trex2. After substantial effort with a lot of help from Brent Roman and Kent Hedley (and Frederic on trex2)


1, Accounts root to dorado1

2. Rename /bin to /exec

3. Automated Network Configuration

&nbsp;&nbsp;&nbsp; + shore&nbsp; to ship
&nbsp;&nbsp;&nbsp; + ship to Ops
&nbsp;&nbsp;&nbsp; + Ops to shore

4. Nightly build
&nbsp;&nbsp;&nbsp; + Run EUROPA regression tests
&nbsp;&nbsp;&nbsp; + Run T-REX regression tests

5. trex1 tests

&nbsp;&nbsp;&nbsp; + run tests from the head of SVN
&nbsp;&nbsp;&nbsp; + run nightly build on trex1

6. Test deployment process
&nbsp;&nbsp;&nbsp; + Dry run of entire deployment the day before (sans vehicle network test the full process to deploy)
&nbsp;&nbsp;&nbsp; + cheat sheet which is small and simple
&nbsp;&nbsp;&nbsp; + Have a large capacity USB flash stick handy
&nbsp;&nbsp;&nbsp; + If possible install binaries on the AUV and practice deployment the previous day

7. Fail over to AMC run-out sequence
&nbsp;&nbsp;&nbsp; + only on worst case
&nbsp;&nbsp;&nbsp; + extend NAV failure timeour
&nbsp;&nbsp;&nbsp; + have a canned "smart" run out sequence on AMC side (check with Hans on the viability e.g turn prop slowly or shut down altogether)
&nbsp;&nbsp;&nbsp; + return a version of 'Idle' behavior which will become our (T-REX) standby sequence which is triggered when multi-reactor reasoning is encountered

8. Bound the box of the navigational envelope to ensure the AUV doesn't disappear outside the general area where tests are conducted.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835060</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867825</id>
<property name="body"><![CDATA[On Friday Sept 14th 2007, a scheduled cruise on the Zephyr with the CTD vehicle was aborted. This note walks down the highlights of the event and the resultant Lessons Learned generated on Monday 17th at the regular status meeting.

&nbsp;Event:&nbsp;

On Friday 14th,&nbsp; while at the dock on the Zephyr setting up for the cruise we encountered network problems in connecting to the AUV which was connected by cable to local network. We spent some time trying to diagnose the problem thinking that it had to do with an incorrect setting of our laptop ('dovekie') with respect to the ships network. This turned out to be a wiring problem with a recently installed router but one which nevertheless set us back by a good half hour. In the anxiety to get going, and while installing new binaries from 'dovekie' to trex2 (the onboard autonomy Linux box) on the AUV, the /bin directory of the Linux filesystem got deleted. This was doable since we had been till that time, been logging in as 'root' with unlimited privileges. The immediate thought was to replace the disk drive of trex2 on the vehicle by its duplicate on shore 'trex1' which is used for testing. However it turned out that the identical event had occurred the evening before and trex1 was also non-functional.


The immediate impact of this event was that we had to move the vehicle to the DMO AUV lab, remove the bubble and remove the hard drive of trex2. After substantial effort with a lot of help from Brent Roman and Kent Hedley (and Frederic on trex2), the /bin director was recovered and the two EPIC boards were brought on-line. However the delays this caused required a scrub of the cruise.


1, Accounts root to dorado1

2. Rename /bin to /exec

3. Automated Network Configuration

&nbsp;&nbsp;&nbsp; + shore&nbsp; to ship
&nbsp;&nbsp;&nbsp; + ship to Ops
&nbsp;&nbsp;&nbsp; + Ops to shore

4. Nightly build
&nbsp;&nbsp;&nbsp; + Run EUROPA regression tests
&nbsp;&nbsp;&nbsp; + Run T-REX regression tests

5. trex1 tests

&nbsp;&nbsp;&nbsp; + run tests from the head of SVN
&nbsp;&nbsp;&nbsp; + run nightly build on trex1

6. Test deployment process
&nbsp;&nbsp;&nbsp; + Dry run of entire deployment the day before (sans vehicle network test the full process to deploy)
&nbsp;&nbsp;&nbsp; + cheat sheet which is small and simple
&nbsp;&nbsp;&nbsp; + Have a large capacity USB flash stick handy
&nbsp;&nbsp;&nbsp; + If possible install binaries on the AUV and practice deployment the previous day

7. Fail over to AMC run-out sequence
&nbsp;&nbsp;&nbsp; + only on worst case
&nbsp;&nbsp;&nbsp; + extend NAV failure timeour
&nbsp;&nbsp;&nbsp; + have a canned "smart" run out sequence on AMC side (check with Hans on the viability e.g turn prop slowly or shut down altogether)
&nbsp;&nbsp;&nbsp; + return a version of 'Idle' behavior which will become our (T-REX) standby sequence which is triggered when multi-reactor reasoning is encountered

8. Bound the box of the navigational envelope to ensure the AUV doesn't disappear outside the general area where tests are conducted.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835061</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867826</id>
<property name="body"><![CDATA[On Friday Sept 14th 2007, a scheduled cruise on the Zephyr with the CTD vehicle was aborted. This note walks down the highlights of the event and the resultant Lessons Learned generated on Monday 17th at the regular status meeting.

&nbsp;Event:&nbsp;

On Friday 14th,&nbsp; while at the dock on the Zephyr setting up for the cruise we encountered network problems in connecting to the AUV which was connected by cable to local network. We spent some time trying to diagnose the problem thinking that it had to do with an incorrect setting of our laptop ('dovekie') with respect to the ships network. This turned out to be a wiring problem with a recently installed router but one which nevertheless set us back by a good half hour. In the anxiety to get going, and while installing new binaries from 'dovekie' to trex2 (the onboard autonomy Linux box) on the AUV, the /bin directory of the Linux filesystem got deleted. This was doable since we had been till that time, been logging in as 'root' with unlimited privileges. The immediate thought was to replace the disk drive of trex2 on the vehicle by its duplicate on shore 'trex1' which is used for testing. However it turned out that the identical event had occurred the evening before and trex1 was also non-functional.

The immediate impact of this event was that we had to move the vehicle to the DMO AUV lab, remove the bubble and remove the hard drive of trex2. After substantial effort with a lot of help from Brent Roman and Kent Hedley (and Frederic on trex2), the /bin director was recovered and the two EPIC boards were brought on-line. However the delays this caused required a scrub of the cruise. On Monday 17th, we gathered for a Lessons Learned to see what general steps needed to be taken to ensure such serious errors are not repeated. The results are as below:


*1, Disallow use of 'root' for deployment/development:* The key and obvious finding was the process we had been using&nbsp; to deploy (and developed) was unnecessary reliant on using the 'root' account on the two EPIC board computers. There is neither a need not a requirement for such use. Therefore this modus-operandi has been discontinued. *Action*: Use the general user 'dorado1' account similar to what the DMO AUV team uses.


*2. Use of 'bin' as a T-REX directory name caused an unncessary mapping to a system level directory*: Again there is no specific need to have directory names which overlap. *Action*: Rename /bin to /exec

3. Automated Network Configuration

&nbsp;&nbsp;&nbsp; + shore&nbsp; to ship
&nbsp;&nbsp;&nbsp; + ship to Ops
&nbsp;&nbsp;&nbsp; + Ops to shore

4. Nightly build
&nbsp;&nbsp;&nbsp; + Run EUROPA regression tests
&nbsp;&nbsp;&nbsp; + Run T-REX regression tests

5. trex1 tests

&nbsp;&nbsp;&nbsp; + run tests from the head of SVN
&nbsp;&nbsp;&nbsp; + run nightly build on trex1

6. Test deployment process
&nbsp;&nbsp;&nbsp; + Dry run of entire deployment the day before (sans vehicle network test the full process to deploy)
&nbsp;&nbsp;&nbsp; + cheat sheet which is small and simple
&nbsp;&nbsp;&nbsp; + Have a large capacity USB flash stick handy
&nbsp;&nbsp;&nbsp; + If possible install binaries on the AUV and practice deployment the previous day

7. Fail over to AMC run-out sequence
&nbsp;&nbsp;&nbsp; + only on worst case
&nbsp;&nbsp;&nbsp; + extend NAV failure timeour
&nbsp;&nbsp;&nbsp; + have a canned "smart" run out sequence on AMC side (check with Hans on the viability e.g turn prop slowly or shut down altogether)
&nbsp;&nbsp;&nbsp; + return a version of 'Idle' behavior which will become our (T-REX) standby sequence which is triggered when multi-reactor reasoning is encountered

8. Bound the box of the navigational envelope to ensure the AUV doesn't disappear outside the general area where tests are conducted.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835062</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5406791</id>
<property name="body"><![CDATA[\\

When VTIME is greater than 0 it enables the timer, but
there are two different types of timers, depending on
whether VMIN is 0 or not.

h5. If VTIME and VMIN are both greater than 0:

\\
* The timer is an 'inter-byte timer' activated when the _first byte is received_.
* It is then reset whenever a new&nbsp;byte is received, and will timeout (count in tenths of seconds with a max of 25.5 sec) if there is the specified time without another byte being received.
* A call to read() will block until at least 1 byte is received, unless a signal interrupts.
* If data is buffered when read() is called, and the number of bytes is equal or greater than VMIN, the read() call will return immediately with existing data.

h5. When VTIME is greater than 0 and VMIN is 0:

\\
* The timer is a \*read\* *_timer_\* \_activated\__as{_}{_}soon{_}{_}as{_}{_}the{_}{_}read_() \_function\_ \_is\_ \_called_.
* If no byte is received in the specified time, there will be a timeout and the read() call will return 0, with no data.
* Since VMIN is 0, the receipt of a single byte will satisfy the read() call, and cause a return. If there is data in the buffer when read() is called, read() will immediately return with existing data.

h5. If VTIME is 0, the timer is disabled. If VMIN is also 0:

\\
* A&nbsp;call to read() will \_return\_ \_immediately_.
* The minimum of either the number of bytes requested or the number of bytes currently available will be returned.
* If no characters are available, read() returns 0, with no data.

h5. If VTIME is 0 and VMIN is greater than 0:

\\
* The timer is disabled, but a call to read() will \_block__indefinitely\_ until either data is received or a signal interrupts.
* When VMIN bytes have been received, the read() function will return.
* If there is data in the buffer when read() is called, and the number of bytes is equal to or greater than VMIN, the read() call will return immediately with existing data.

\\
Okay, now given that you want to read one or more
characters and have a timeout, the question is do you
actually want an inter-byte timer, or a read timer? If
you set both VTIME and VMIN to 1, for example, you'll
have an inter-byte timer... and calls to read() can
\*block\* \*forever\* if no data at all is received.

If you want a read timer, set VMIN to 0 and VTIME to 1,
and then the call to read() will always return, with or
without data. If there is no data available, read()
will return 0, if data is available it will return the
number of data bytes retrieved.

All of the above assumes that the O_NONBLOCK attribute
is not set. And for any of the above if the call to
read() is interrupted by a signal, read() will return
\-1, and the error code will be EINTR. (More discussion
about this below.)

&nbsp;---------------------------------------------------\-

When the *ICANON* bit is turned off, a "raw mode" is selected which changes the interpretation of these values. These are used to guide the line-driver code in its decision on allowing the *read()* system call to return. We'll try to explain them in some detail. Function-key processingOn a regular keyboard, most keys send just one byte each, but almost all keyboards have special keys that send asequence of charactersat a time. Examples (from an ANSI keyboard)ESC \[ A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; up arrowESC \[ 5 \~&nbsp;&nbsp;&nbsp; page upESC \[ 18 \~&nbsp;&nbsp; F7and so on.From a strictly "string recognition" point of view, it's easy enough to translate "ESC \[ A" into "up arrow" inside a program, but how does it tell the difference between "user typed up-arrow" and "user typed the ESCAPE key"? The difference istiming. If the ESCAPE isimmediatelyfollowed by the rest of the expected sequence, then it's a function key: otherwise it's just a plain ESCAPE.Efficient highspeed inputWhen a communications program (such as fax software) is reading from a modem, the data stream is arriving at a relatively high rate. Doing single-character-at-a-time input would be extremely inefficient, given that eachread()involves a system call and an operating system context switch. We'd instead like to read in larger chunk if it's available for us, but still know how to recognize timeouts (which usually indicate error conditions).Capturing occasional, low-volume dataWhen writing software that monitored a temperature sensor via a serial line, we expected to receive a short (10-20 bytes) message every second. This message arrived as a single burst, and once the first character of the message was received, weknewthat the others were right behind it and would be completely received in about 100 milliseconds.The message format did not have strong delimiters, so if we used a naïve read of so many bytes, we'd run the risk of reading an entire message but blocking until a few more bytesof the next messagewere read to fill our request. This could lead to getting "out of sync" with the sensor.By settingVMIN/VTIMEproperly, we were able to insure that that we could efficiently capture all the data sent in one burst without risk of inter-message overlap.We'll note that some of these timeout issues can be partly addressed by the use of signals and alarms, but this is really a substandard solution: signals and I/O are hard to get right (especially in a portable manner), and we very strongly prefer using the features of the line-discipline code as they were intended. Signals suck.
\\

h5. When does +read()+ return?

The *termios* settings are actually handled in the kernel, and the ones we're interested in are in the _line discipline_ code. This sits above the "device driver", and this is consistent with our applying termios to both serial and network I/O (which obviously use different underlying hardware).

All of the *VMIN* and *VTIME* areas involve one question: _When does the line driver allow_ *{_}read()_* _to return?_
With a "regular file", the operating system returns from the *read()* system call when either the user buffer is full, or when the end of file has been reached - this decision is easy and automatic.

But when the driver is reading from a terminal line, the "Are we done?" question can be asked over and over for each character that arrives. This question is resolved by setting *VMIN*/*VTIME*.

Using our temperature-sensor example, we'll list the requirements that inform our design:
* We normally read up to 20 bytes as a "message"
* Individual messages have their bytes all sent together
* No background processing required; while waiting for input, we're happy to block indefinitely waiting for something to happen

The last requirement means that we have no _overall_ timeout, but we do have an _intercharacter_ timeout. This is the key functionality provided by the line driver. Let's be specific.

When waiting for input, the driver returns when: VTIMEtenths of a second elapsesbetweenbytesAn internal timer is started when a character arrives, and it counts up in tenths of a second units. It's reset whenever new data arrives, so rapidly-arriving data never gives the intercharacter timer a chance to count very high.It's only after thelastcharacter of a burst --- when the line is quiet --- that the timer really gets counting. When it reachesVTIMEtenths, the user's request has been satisfied and theread()returns.This provides exactly the behavior we want when dealing with bursty data: collect data while it's arriving rapidly, but when it calms down, give us what you got.VMINcharacters have been received, with no more data availableAt first this appears duplicative to thenbytesparameter to theread()system call, but it's not quite the same thing.The serial driver maintains an input queue of data received but not transferred to the user --- clearly data can arrive even when we're not asking for it --- and this is always first copied to the user's buffer on aread()without having to wait for anything.But if we do end up blocking for I/O (because the kernel's input queue is empty), thenVMINkicks in: When that many bytes have been received, theread()request returns that data. In this respect we can think of thenbytesparameter as being the amount of data wehopeto get, but we'll settle forVMIN.The user's requested number of bytes has been satisfiedThis rule trumps all the others: there is no circumstance where the system will providemoredata than was actually asked for by the user. If the user asks for (say) ten bytes in theread()system call, and that much data is already waiting in the kernel's input queue, then it's returned to the caller immediately and without havingVMINandVTIMEparticipate in any way.These are certainly confusing to one who is new to *termios*, but it's not really poorly defined Instead, they solve problems that are not obvious to the newcomer. It's only when one is actually dealing with terminal I/O and running into issues of either performance or timing that one really must dig in.

h5. &nbsp;&nbsp;


h5. VMIN and VTIME defined

*VMIN* is a character count ranging from 0 to 255 characters, and *VTIME* is time measured in 0.1 second intervals, (0 to 25.5 seconds). The value of "zero" is special to both of these parameters, and this suggests four combinations that we'll discuss below. In every case, the question is when a *read()* system call is satisfied, and this is our prototype call: int n = read(fd, buffer, nbytes);
Keep in mind that the tty driver maintains an input queue of bytes already read from the serial line and not passed to the user, so not every *read()* call waits for actual I/O - the read may very well be satisfied directly from the input queue. VMIN = 0 and VTIME = 0This is a completely non-blocking read - the call is satisfied immediately directly from the driver's input queue. If data are available, it's transferred to the caller's buffer up to nbytes and returned. Otherwise zero is immediately returned to indicate "no data". We'll note that this is "polling" of the serial port, and it's almost always a bad idea. If done repeatedly, it can consume enormous amounts of processor time and is highly inefficient. Don't use this mode unless you really, really know what you're doing.VMIN = 0 and VTIME > 0This is a pure timed read. If data are available in the input queue, it's transferred to the caller's buffer up to a maximum of nbytes, and returned immediately to the caller. Otherwise the driver blocks until data arrives, or when VTIME tenths expire from the start of the call. If the timer expires without data, zero is returned. A single byte is sufficient to satisfy this read call, but if more is available in the input queue, it's returned to the caller. Note that this is anoveralltimer, not anintercharacterone.VMIN > 0 and VTIME > 0Aread()is satisfied when either VMIN characters have been transferred to the caller's buffer, or when VTIME tenths expire between characters. Since this timer is not started until the first character arrives, this call can block indefinitely if the serial line is idle. This is the most common mode of operation, and we consider VTIME to be anintercharactertimeout, not anoverallone. This call should never return zero bytes read.VMIN > 0 and VTIME = 0This is a counted read that is satisfied only when at least VMIN characters have been transferred to the caller's buffer - there is no timing component involved. This read can be satisfied from the driver's input queue (where the call could return immediately), or by waiting for new data to arrive: in this respect the call could block indefinitely. We believe that it's undefined behavior if nbytes is less then VMIN.
\\
\\
\\
\\

\--------------------------------------\-

&nbsp;http://www.gnu.org/software/libc/manual/html_mono/libc.html\\

h4. 17.4.4 Input Modes

This section describes the terminal attribute flags that control fairly low-level aspects of input processing: handling of parity errors, break signals, flow control, and <RET> and <LFD> characters.

All of these flags are bits in the c_iflag member of the struct termios structure. The member is an integer, and you change flags using the operators &, \| and \^. Don't try to specify the entire value for c_iflag---instead, change only specific flags and leave the rest untouched (see Setting Modes). --- Macro: tcflag_t *INPCK*
If this bit is set, input parity checking is enabled. If it is not set, no checking at all is done for parity errors on input; the characters are simply passed through to the application.

Parity checking on input processing is independent of whether parity detection and generation on the underlying terminal hardware is enabled; see Control Modes. For example, you could clear the INPCK input mode flag and set the PARENB control mode flag to ignore parity errors on input, but still generate parity on output.

If this bit is set, what happens when a parity error is detected depends on whether the IGNPAR or PARMRK bits are set. If neither of these bits are set, a byte with a parity error is passed to the application as a '\0' character. --- Macro: tcflag_t *IGNPAR*
If this bit is set, any byte with a framing or parity error is ignored. This is only useful if INPCK is also set.
--- Macro: tcflag_t *PARMRK*
If this bit is set, input bytes with parity or framing errors are marked when passed to the program. This bit is meaningful only when INPCK is set and IGNPAR is not set.

The way erroneous bytes are marked is with two preceding bytes, 377 and 0. Thus, the program actually reads three bytes for one erroneous byte received from the terminal.

If a valid byte has the value 0377, and ISTRIP (see below) is not set, the program might confuse it with the prefix that marks a parity error. So a valid byte 0377 is passed to the program as two bytes, 0377 0377, in this case.
--- Macro: tcflag_t *ISTRIP*
If this bit is set, valid input bytes are stripped to seven bits; otherwise, all eight bits are available for programs to read.
--- Macro: tcflag_t *IGNBRK*
If this bit is set, break conditions are ignored.

A break condition is defined in the context of asynchronous serial data transmission as a series of zero-value bits longer than a single byte.
--- Macro: tcflag_t *BRKINT*
If this bit is set and IGNBRK is not set, a break condition clears the terminal input and output queues and raises a SIGINT signal for the foreground process group associated with the terminal.

If neither BRKINT nor IGNBRK are set, a break condition is passed to the application as a single '\0' character if PARMRK is not set, or otherwise as a three-character sequence '\377', '\0', '\0'.
--- Macro: tcflag_t *IGNCR*
If this bit is set, carriage return characters ('\r') are discarded on input. Discarding carriage return may be useful on terminals that send both carriage return and linefeed when you type the <RET> key.
--- Macro: tcflag_t *ICRNL*
If this bit is set and IGNCR is not set, carriage return characters ('\r') received as input are passed to the application as newline characters ('\n').
--- Macro: tcflag_t *INLCR*
If this bit is set, newline characters ('\n') received as input are passed to the application as carriage return characters ('\r').
--- Macro: tcflag_t *IXOFF*
If this bit is set, start/stop control on input is enabled. In other words, the computer sends STOP and START characters as necessary to prevent input from coming in faster than programs are reading it. The idea is that the actual terminal hardware that is generating the input data responds to a STOP character by suspending transmission, and to a START character by resuming transmission. See Start/Stop Characters.
--- Macro: tcflag_t *IXON*
If this bit is set, start/stop control on output is enabled. In other words, if the computer receives a STOP character, it suspends output until a START character is received. In this case, the STOP and START characters are never passed to the application program. If this bit is not set, then START and STOP can be read as ordinary characters. See Start/Stop Characters.
--- Macro: tcflag_t *IXANY*
If this bit is set, any input character restarts output when output has been suspended with the STOP character. Otherwise, only the START character restarts output.

This is a BSD extension; it exists only on BSD systems and the GNU system.
--- Macro: tcflag_t *IMAXBEL*
If this bit is set, then filling up the terminal input buffer sends a BEL character (code 007) to the terminal to ring the bell.

This is a BSD extension.
\\

h4. 17.4.5 Output Modes

This section describes the terminal flags and fields that control how output characters are translated and padded for display. All of these are contained in the c_oflag member of the struct&nbsp;termios structure.

The c_oflag member itself is an integer, and you change the flags and fields using the operators &, \|, and \^. Don't try to specify the entire value for c_oflag---instead, change only specific flags and leave the rest untouched (see Setting Modes). --- Macro: tcflag_t *OPOST*
If this bit is set, output data is processed in some unspecified way so that it is displayed appropriately on the terminal device. This typically includes mapping newline characters ('\n') onto carriage return and linefeed pairs.

If this bit isn't set, the characters are transmitted as-is.
The following three bits are BSD features, and they exist only BSD systems and the GNU system. They are effective only if OPOST is set. --- Macro: tcflag_t *ONLCR*
If this bit is set, convert the newline character on output into a pair of characters, carriage return followed by linefeed. --- Macro: tcflag_t *OXTABS*
If this bit is set, convert tab characters on output into the appropriate number of spaces to emulate a tab stop every eight columns.
--- Macro: tcflag_t *ONOEOT*
If this bit is set, discard C-d characters (code 004) on output. These characters cause many dial-up terminals to disconnect.
\\

h4. 17.4.6 Control Modes

This section describes the terminal flags and fields that control parameters usually associated with asynchronous serial data transmission. These flags may not make sense for other kinds of terminal ports (such as a network connection pseudo-terminal). All of these are contained in the c_cflag member of the struct termios structure.

The c_cflag member itself is an integer, and you change the flags and fields using the operators &, \|, and \^. Don't try to specify the entire value for c_cflag---instead, change only specific flags and leave the rest untouched (see Setting Modes). --- Macro: tcflag_t *CLOCAL*
If this bit is set, it indicates that the terminal is connected "locally" and that the modem status lines (such as carrier detect) should be ignored. On many systems if this bit is not set and you call open without the O_NONBLOCK flag set, open blocks until a modem connection is established.

If this bit is not set and a modem disconnect is detected, a SIGHUP signal is sent to the controlling process group for the terminal (if it has one). Normally, this causes the process to exit; see Signal Handling. Reading from the terminal after a disconnect causes an end-of-file condition, and writing causes an EIO error to be returned. The terminal device must be closed and reopened to clear the condition. --- Macro: tcflag_t *HUPCL*
If this bit is set, a modem disconnect is generated when all processes that have the terminal device open have either closed the file or exited.
--- Macro: tcflag_t *CREAD*
If this bit is set, input can be read from the terminal. Otherwise, input is discarded when it arrives.
--- Macro: tcflag_t *CSTOPB*
If this bit is set, two stop bits are used. Otherwise, only one stop bit is used.
--- Macro: tcflag_t *PARENB*
If this bit is set, generation and detection of a parity bit are enabled. See Input Modes, for information on how input parity errors are handled.

If this bit is not set, no parity bit is added to output characters, and input characters are not checked for correct parity.
--- Macro: tcflag_t *PARODD*
This bit is only useful if PARENB is set. If PARODD is set, odd parity is used, otherwise even parity is used.
The control mode flags also includes a field for the number of bits per character. You can use the CSIZE macro as a mask to extract the value, like this: settings.c_cflag & CSIZE. --- Macro: tcflag_t *CSIZE*
This is a mask for the number of bits per character. --- Macro: tcflag_t *CS5*
This specifies five bits per byte.
--- Macro: tcflag_t *CS6*
This specifies six bits per byte.
--- Macro: tcflag_t *CS7*
This specifies seven bits per byte.
--- Macro: tcflag_t *CS8*
This specifies eight bits per byte.
The following four bits are BSD extensions; this exist only on BSD systems and the GNU system. --- Macro: tcflag_t *CCTS_OFLOW*
If this bit is set, enable flow control of output based on the CTS wire (RS232 protocol). --- Macro: tcflag_t *CRTS_IFLOW*
If this bit is set, enable flow control of input based on the RTS wire (RS232 protocol).
--- Macro: tcflag_t *MDMBUF*
If this bit is set, enable carrier-based flow control of output.
--- Macro: tcflag_t *CIGNORE*
If this bit is set, it says to ignore the control modes and line speed values entirely. This is only meaningful in a call to tcsetattr.

The c_cflag member and the line speed values returned by cfgetispeed and cfgetospeed will be unaffected by the call. CIGNORE is useful if you want to set all the software modes in the other members, but leave the hardware details in c_cflag unchanged. (This is how the TCSASOFT flag to tcsettattr works.)

This bit is never set in the structure filled in by tcgetattr.
\\
\\

h4. 17.4.7 Local Modes

This section describes the flags for the c_lflag member of the struct termios structure. These flags generally control higher-level aspects of input processing than the input modes flags described in Input Modes, such as echoing, signals, and the choice of canonical or noncanonical input.

The c_lflag member itself is an integer, and you change the flags and fields using the operators &, \|, and \^. Don't try to specify the entire value for c_lflag---instead, change only specific flags and leave the rest untouched (see Setting Modes). --- Macro: tcflag_t *ICANON*
This bit, if set, enables canonical input processing mode. Otherwise, input is processed in noncanonical mode. See Canonical or Not. --- Macro: tcflag_t *ECHO*
If this bit is set, echoing of input characters back to the terminal is enabled.
--- Macro: tcflag_t *ECHOE*
If this bit is set, echoing indicates erasure of input with the ERASE character by erasing the last character in the current line from the screen. Otherwise, the character erased is re-echoed to show what has happened (suitable for a printing terminal).

This bit only controls the display behavior; the ICANON bit by itself controls actual recognition of the ERASE character and erasure of input, without which ECHOE is simply irrelevant.
--- Macro: tcflag_t *ECHOPRT*
This bit is like ECHOE, enables display of the ERASE character in a way that is geared to a hardcopy terminal. When you type the ERASE character, a `\' character is printed followed by the first character erased. Typing the ERASE character again just prints the next character erased. Then, the next time you type a normal character, a `/' character is printed before the character echoes.

This is a BSD extension, and exists only in BSD systems and the GNU system.
--- Macro: tcflag_t *ECHOK*
This bit enables special display of the KILL character by moving to a new line after echoing the KILL character normally. The behavior of ECHOKE (below) is nicer to look at.

If this bit is not set, the KILL character echoes just as it would if it were not the KILL character. Then it is up to the user to remember that the KILL character has erased the preceding input; there is no indication of this on the screen.

This bit only controls the display behavior; the ICANON bit by itself controls actual recognition of the KILL character and erasure of input, without which ECHOK is simply irrelevant.
--- Macro: tcflag_t *ECHOKE*
This bit is similar to ECHOK. It enables special display of the KILL character by erasing on the screen the entire line that has been killed. This is a BSD extension, and exists only in BSD systems and the GNU system.
--- Macro: tcflag_t *ECHONL*
If this bit is set and the ICANON bit is also set, then the newline ('\n') character is echoed even if the ECHO bit is not set.
--- Macro: tcflag_t *ECHOCTL*
If this bit is set and the ECHO bit is also set, echo control characters with `^' followed by the corresponding text character. Thus, control-A echoes as `^A'. This is usually the preferred mode for interactive input, because echoing a control character back to the terminal could have some undesired effect on the terminal.

This is a BSD extension, and exists only in BSD systems and the GNU system.
--- Macro: tcflag_t *ISIG*
This bit controls whether the INTR, QUIT, and SUSP characters are recognized. The functions associated with these characters are performed if and only if this bit is set. Being in canonical or noncanonical input mode has no affect on the interpretation of these characters.

You should use caution when disabling recognition of these characters. Programs that cannot be interrupted interactively are very user-unfriendly. If you clear this bit, your program should provide some alternate interface that allows the user to interactively send the signals associated with these characters, or to escape from the program. See Signal Characters.
--- Macro: tcflag_t *IEXTEN*
POSIX.1 gives IEXTEN implementation-defined meaning, so you cannot rely on this interpretation on all systems.

On BSD systems and the GNU system, it enables the LNEXT and DISCARD characters. See Other Special.
--- Macro: tcflag_t *NOFLSH*
Normally, the INTR, QUIT, and SUSP characters cause input and output queues for the terminal to be cleared. If this bit is set, the queues are not cleared.
--- Macro: tcflag_t *TOSTOP*
If this bit is set and the system supports job control, then SIGTTOU signals are generated by background processes that attempt to write to the terminal. See Access to the Terminal.
The following bits are BSD extensions; they exist only in BSD systems and the GNU system. --- Macro: tcflag_t *ALTWERASE*
This bit determines how far the WERASE character should erase. The WERASE character erases back to the beginning of a word; the question is, where do words begin?

If this bit is clear, then the beginning of a word is a nonwhitespace character following a whitespace character. If the bit is set, then the beginning of a word is an alphanumeric character or underscore following a character which is none of those.

See Editing Characters, for more information about the WERASE character. --- Macro: tcflag_t *FLUSHO*
This is the bit that toggles when the user types the DISCARD character. While this bit is set, all output is discarded. See Other Special.
--- Macro: tcflag_t *NOKERNINFO*
Setting this bit disables handling of the STATUS character. See Other Special.
--- Macro: tcflag_t *PENDIN*
If this bit is set, it indicates that there is a line of input that needs to be reprinted. Typing the REPRINT character sets this bit; the bit remains set until reprinting is finished. See Editing Characters.
\\
\\

h4. 17.4.10 Noncanonical Input

In noncanonical input mode, the special editing characters such as ERASE and KILL are ignored. The system facilities for the user to edit input are disabled in noncanonical mode, so that all input characters (unless they are special for signal or flow-control purposes) are passed to the application program exactly as typed. It is up to the application program to give the user ways to edit the input, if appropriate.

Noncanonical mode offers special parameters called MIN and TIME for controlling whether and how long to wait for input to be available. You can even use them to avoid ever waiting---to return immediately with whatever input is available, or with no input.

The MIN and TIME are stored in elements of the c_cc array, which is a member of the struct&nbsp;termios structure. Each element of this array has a particular role, and each element has a symbolic constant that stands for the index of that element. VMIN and VMAX are the names for the indices in the array of the MIN and TIME slots. --- Macro: int *VMIN*
This is the subscript for the MIN slot in the c_cc array. Thus, termios.c_cc[VMIN] is the value itself.

The MIN slot is only meaningful in noncanonical input mode; it specifies the minimum number of bytes that must be available in the input queue in order for read to return. --- Macro: int *VTIME*
This is the subscript for the TIME slot in the c_cc array. Thus, termios.c_cc[VTIME] is the value itself.

The TIME slot is only meaningful in noncanonical input mode; it specifies how long to wait for input before returning, in units of 0.1 seconds.
The MIN and TIME values interact to determine the criterion for when read should return; their precise meanings depend on which of them are nonzero. There are four possible cases:
* Both TIME and MIN are nonzero.

In this case, TIME specifies how long to wait after each input character to see if more input arrives. After the first character received, read keeps waiting until either MIN bytes have arrived in all, or TIME elapses with no further input.

read always blocks until the first character arrives, even if TIME elapses first. read can return more than MIN characters if more than MIN happen to be in the queue. Both MIN and TIME are zero. In this case, read always returns immediately with as many characters as are available in the queue, up to the number requested. If no input is immediately available, read returns a value of zero.
MIN is zero but TIME has a nonzero value. In this case, read waits for time TIME for input to become available; the availability of a single byte is enough to satisfy the read request and cause read to return. When it returns, it returns as many characters as are available, up to the number requested. If no input is available before the timer expires, read returns a value of zero.
TIME is zero but MIN has a nonzero value. In this case, read waits until at least MIN bytes are available in the queue. At that time, read returns as many characters as are available, up to the number requested. read can return more than MIN characters if more than MIN happen to be in the queue. What happens if MIN is 50 and you ask to read just 10 bytes? Normally, read waits until there are 50 bytes in the buffer (or, more generally, the wait condition described above is satisfied), and then reads 10 of them, leaving the other 40 buffered in the operating system for a subsequent call to read.

*Portability note:* On some systems, the MIN and TIME slots are actually the same as the EOF and EOL slots. This causes no serious problem because the MIN and TIME slots are used only in noncanonical input and the EOF and EOL slots are used only in canonical input, but it isn't very clean. The GNU library allocates separate slots for these uses. --- Function: void *cfmakeraw* (struct termios \*termios-p)
This function provides an easy way to set up \*termios-p for what has traditionally been called "raw mode" in BSD. This uses noncanonical input, and turns off most processing to give an unmodified channel to the terminal.

It does exactly this: termios-p->c_iflag &= \~(IGNBRK\|BRKINT\|PARMRK\|ISTRIP
| INLCR | IGNCR | ICRNL | IXON);\\
 termios-p->c_oflag &= \~OPOST;\\
 termios-p->c_lflag &= \~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);\\
 termios-p->c_cflag &= \~(CSIZE | PARENB);\\
 termios-p->c_cflag | = CS8;\\
 &nbsp;\\
 &nbsp;\\
  |
\\

\--------------------------------------------------------------------------------\-\\

h3. IOCTL's: Buffer count and flushing
FIONREAD int *argpGetthenumber ofbytesintheinput buffer.TIOCINQ int *argpSame as FIONREAD.TIOCOUTQ int *argpGetthenumber ofbytesintheoutput buffer.TCFLSH intargEquivalenttotcflush(fd, arg).
Seetcflush(3)fortheargument values TCIFLUSH, TCOFLUSH, TCIOFLUSH.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5374032</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">5406793</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.\\

Xtreme104 Serial Setup\\

serial.conf looks like

mvc-debian4:/proc# cat /etc/serial.conf
/dev/ttyS1 uart 16450 port 0x2F8 irq 3

\#Xtreme card
\# Group A
/dev/ttyS2 uart 16850 port 0x380 irq 9&nbsp; baud_base 1500000
/dev/ttyS3 uart 16850 port 0x388 irq 9&nbsp; baud_base 1500000
/dev/ttyS4 uart 16850 port 0x390 irq 9&nbsp; baud_base 1500000
/dev/ttyS5 uart 16850 port 0x398 irq 9&nbsp; baud_base 1500000

\# Group B
/dev/ttyS6 uart 16850 port 0x300 irq 9&nbsp; baud_base 1500000
/dev/ttyS7 uart 16850 port 0x308 irq 9&nbsp; baud_base 1500000
/dev/ttyS8 uart 16850 port 0x310 irq 9&nbsp; baud_base 1500000
/dev/ttyS9 uart 16850 port 0x318 irq 9&nbsp; baud_base 1500000

\# Group C
/dev/ttyS10 uart 16850 port 0x150 irq 9 baud_base 1500000
/dev/ttyS11 uart 16850 port 0x158 irq 9 baud_base 1500000
/dev/ttyS12 uart 16850 port 0x160 irq 9 baud_base 1500000
/dev/ttyS13 uart 16850 port 0x168 irq 9 baud_base 1500000
&nbsp;\\

mvc-debian4:/proc# cat /proc/interrupts
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU0
&nbsp; 0:&nbsp;&nbsp; 45634199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; timer
&nbsp; 1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; i8042
&nbsp; 2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; cascade
&nbsp; 6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; floppy
&nbsp; 7:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; parport0
&nbsp; 8:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; rtc
&nbsp; 9:&nbsp;&nbsp; 67591801&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; serial
&nbsp;11:&nbsp;&nbsp;&nbsp;&nbsp; 865812&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; eth0
&nbsp;14:&nbsp;&nbsp;&nbsp;&nbsp; 153327&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XT-PIC&nbsp; ide0
NMI:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
LOC:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
ERR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
MIS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0
mvc-debian4:/proc# setserial \-g /dev/ttyS5
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
mvc-debian4:/proc# setserial \-g /dev/ttyS\*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16450, Port: 0x02f8, IRQ: 3
/dev/ttyS10, UART: 16850, Port: 0x0150, IRQ: 2
/dev/ttyS11, UART: 16850, Port: 0x0158, IRQ: 2
/dev/ttyS2, UART: 16850, Port: 0x0380, IRQ: 2
/dev/ttyS3, UART: 16850, Port: 0x0388, IRQ: 2
/dev/ttyS4, UART: 16850, Port: 0x0390, IRQ: 2
/dev/ttyS5, UART: 16850, Port: 0x0398, IRQ: 2
/dev/ttyS6, UART: 16850, Port: 0x0300, IRQ: 2
/dev/ttyS7, UART: 16850, Port: 0x0308, IRQ: 2
/dev/ttyS8, UART: 16850, Port: 0x0310, IRQ: 2
/dev/ttyS9, UART: 16850, Port: 0x0318, IRQ: 2
&nbsp;

&nbsp;mvc-debian4:/proc# cat ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0150-0157 : serial
0158-015f : serial
01f0-01f7 : ide0
02f8-02ff : serial
0300-0307 : serial
0308-030f : serial
0310-0317 : serial
0318-031f : serial
0378-037a : parport0
037b-037f : parport0
0380-0387 : serial
0388-038f : serial
0390-0397 : serial
0398-039f : serial
03c0-03df : vga\+
03f2-03f5 : floppy
03f6-03f6 : ide0
03f7-03f7 : floppy DIR
03f8-03ff : serial
0cf8-0cff : PCI conf1
e000-e03f : 0000:00:11.0
&nbsp; e000-e03f : e100
f000-f00f : 0000:00:12.2
&nbsp; f000-f007 : ide0
&nbsp; f008-f00f : ide1
\\

h4. Useful Debian links

** www.google.com
** [http://www.debianhelp.org]
** &nbsp;

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** apt-get install linux-doc-2.6.18 (optional for docs)
*** apt-get install linux-manual-2.6.18 (optional for docs)
*** apt-get install manpages-dev (man pages for kernel api's such as termios, etc.)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
\\
\\

Notes from ConnectTech Support site for Xtreme104 Isolated 12 port serial card
\\

&nbsp;Configuring the Kernel(2.6.x){color:black}The 2.6 kernel has support for the 8250/16650 UART in <src>/drivers/serial/8250.c. You should be able to run our ISA serial cards(Echo, DFlex, Xtreme/104) with this driver and the proper Kernel configuration.{color}{color:black}You'll need to edit your serial.h file in <src>/include/asm and add in the extra serial ports of the card.{color}{color:black}Here's what I added in red for a 4 port Xtreme/104 card at I/O 300 and IRQ 5. You can do the same with your card settings. If your card is using a higher clock than be sure to adjust your BAUD_BAUD value accordingly{color}

/\* Base baud for CTI boards. Default Max Baud = 115200 bps \*/

define CTI_BAUD (1843200 /16){color:black}define STD_SERIAL_PORT_DFNS \{color}{color}{color:black}&nbsp;/\*{color} UARTCLKPORT{color:black}IRQ FLAGS \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS0 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS1 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }
{color:black}, /\* ttyS2 \*/ \{color}{color}
{ 0, BASE_BAUD, 0x2E8, 3, STD_COM_FLAGS }
{color:black}, /\* ttyS3 \*/ \{color}{color}
{ 0, CTI_BAUD, 0x300, 5, STD_COM_FLAGS }{color:black}, /\* ttyS4 \*/ \{}{color}
{ 0, CTI_BAUD, 0x308, 5, STD_COM_FLAGS }{color:red}, /\* ttyS5 \*/ \{}{color}
{ 0, CTI_BAUD, 0x310, 5, STD_COM_FLAGS }{color:red}, /\* ttyS6 \*/ \{}{color}
{ 0, CTI_BAUD, 0x318, 5, STD_COM_FLAGS }{color:red}, /\* ttyS7 \*/{color}
If your board has a difference clock, be sure to change the CTI_BAUD value appropriately.
\\
\\

Re-Compiling the Kernel(Linux 2.6)

\*# cd
{Linux}*

At this point, you have a choice of two configuration utilities that you can use to configure your kernel. One utility, named config, is text based, and the other, named menuconfig, has a simple GUI (Graphical User Interface). The menuconfig utility is easier to use than config, so unless you have specific reasons use the menuconfig utility.

To use the menuconfig / config utility:

*\# make menuconfig*
Or
*\# make config* Once the configuration utility you choose is running, make sure that the following options are selected. Below shows the setting that must be enabled using the menuconfig and config utilities.

config: CONFIG_PCI
menuconfig: (Bus Options \-> PCI Support)\\

config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> 8250/16550 and compatible serial support)
 

config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Extended 8250/16550 serial driver options)

config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support more than 4 legacy serial ports)
 

config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Standard drivers \-> Support for sharing serial interrupts)

After all of the options have been checked and enabled, select exit. You will be prompted to save the new kernel configuration. Select yes. After you have finished configuring your kernel, issue the two following commands:

*\# make clean*
*\# make bzImage*
*\# make modules*
*\# make modules_install{*}Building/Installing the Kernel
NOTE: These instructions are for Red Hat standard installs. If you use a different distribution, or have set up your own system, these instructions will likely not help you. In that case please contact Connect Tech support at support@connecttech.com

Copy the kernel and system map to the boot partition:

The "make bzImage" step created the kernel in the subdirectory {Linux}

/arch//boot. If you don't know what CPU type you're using, you can find the new kernel by:
\\
# ls \-l
{Linux}/arch/*/boot/bzImage

The < cpu type > is the "*" part of the pathname of the newest kernel.
/arch//boot will be referenced by {arch}.

# cp {Linux}
/
{arch}
/bzImage /boot/vmlinuz-bh
# cp
{Linux}
/System.map /boot/System.map-bh

You may choose any postfix, \-df is a handy one. The postfix merely distinguishes between the kernel you've just built and other kernels already installed. It has no other purpose.
&nbsp;
Creating Nodes (Ports) For the Host Adapter
NOTE: Depending on your kernel distribution and configuration, nodes(ports) are often created automatically and you can skip this step. Check to see if they exist before proceeding.

Now that we have the new kernel in place capable of supporting the Blue Heat serial adapter we must create nodes, or ports, to allow the host adapter to communicate with other devices.

To begin, boot the new kernel. After the kernel has booted, open up the messages file using Vi, or your favorite text editor:
# vi
{log_path}/messages
Where {log_path}
is where the system logs are stored. Typically,
{log_path} = /var/log but this may be different in some distributions/systems.

Go to the bottom of the file and search backwards for references to "ttySxx" where xx is a number. You should see ttyS0 and ttyS1 for the standard serial ports, as well as a ttySxx entrie for each installed Echo/Dflex port. In order to use the new ports, these ttySxx entries must exist in the /dev directory. If they do not exist (they aren't created automatically, but do persist after reboots) you must make them with the following command:

# mknod -m [mode] /dev/ttySxx c 4 yy
[mode] is the file mode (permissions) you wish the device to have. 600 is often good.
xx is the number associated with the device which you have seen in the messages file.
yy is just xx + 64

You may also wish to make the corresponding cuaxx devices, but they are being phased out:

# mknod -m {mode} /dev/cuaxx c 5 yy
xx and yy should match the xx and yy from the previous mknod command

Here is an example of what you would do to add the nodes to your /dev directory:
First I opened the Vi editor and search for ttyS*. The results of the search show me that I have ttyS00 and ttyS01 (the standard serial ports) entries, as well as four other entries: ttyS05, ttyS06, ttyS07 and ttyS08. These four entries correspond to the four new ports for my CTI host adapter. (Right now, we are assuming a four-port card. You may have fewer or more ports, depending on the type of card you have). I've written down the four entries on a sheet of paper, seeing how my memory is a little short. Now I would like to make the nodes. From the command line, I type in the four following entries:

# mknod -m 600 /dev/ttyS05 c 4 69
# mknod -m 600 /dev/ttyS06 c 4 70
# mknod -m 600 /dev/ttyS06 c 4 71
# mknod -m 600 /dev/ttyS07 c 4 72

and optionally execute:

# mknod -m 600 /dev/cua12 c 5 69
# mknod -m 600 /dev/cua13 c 5 70
# mknod -m 600 /dev/cua14 c 5 71
# mknod -m 600 /dev/cua15 c 5 72

With the nodes in place, this finishes off our installation
 
Multiport Support
NOTE: Multiport support is not necessary for your boards to operate properly. This may safely be skipped. It is only a performance tweak available for users with older systems. Newer PCs do not gain much performance from this tweak.

Check {log_path}
/messages again. Each serial port will have a line; all the ports on each board will be listed in sequence. An eight port board might look like:

ttyS4 at port 0x300 (irq = 5) is a ST16654
ttyS5 at port 0x308 (irq = 5) is a ST16654
ttyS6 at port 0x310 (irq = 5) is a ST16654
ttyS7 at port 0x318 (irq = 5) is a ST16654
ttyS8 at port 0x320 (irq = 5) is a ST16654
ttyS9 at port 0x328 (irq = 5) is a ST16654
ttyS10 at port 0x330 (irq = 5) is a ST16654
ttyS11 at port 0x338 (irq = 5) is a ST16654

"port" in the above listing is really short for "port address". To avoid confusion, I will refer to the port address as the "address" instead.

Your board will have a table of the port addresses in the manual that came with it. You will need to look up the address that the board has been configured for; the line will also tell you what address the status port is at.

{mask} is determined by the following table:
Number of ports       {mask}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x03&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xffsetserial is used to inform the driver about the status port, in the following manner:
\\
# setserial
{port} set_multiport portX {status port address} maskX {mask} matchX 0x0
where {port}
is any one port on a given board (using the first port is usually the best way),
{status port address}
is the address of the status port as determined above,
{mask}
is the appropriate mask value for the board from the table above, and X is a multiport setting number between 1 and 4.

The multiport setting number will usually be 1, but can be other values. There may be other multiport settings on the irq that your board is using, set by other boards in your system, including other Connect Tech boards.
# setserial
{port} get_setserial
where {port}
is a port on a board that you are going to use the status port on, will reveal if there are other multiport settings in effect already. If so, take care to choose X to be the lowest empty setting number.

This needs be done only once per board that you wish to have the status port used on.

Example:
You have two boards installed, an 8 port and a 2 port. The ports on each board are:
ttyS4 at port 0x300 (irq = 5) is a ST16654
.
.
ttyS11 at port 0x338 (irq = 5) is a ST16654
ttyS12 at port 0x200 (irq = 10) is a ST16654
ttyS13 at port 0x208 (irq = 10) is a ST16654

Check to see if any other multiport settings are already in use:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0One multiport setting is already in use by another board.

This works on a per irq basis, so each irq that is used by a board needs to be checked:
# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0No multiport settings are in use.

The commands to enable use of the status port on each board would be:
# setserial /dev/ttyS4 set_multiport port2 0x340 mask2 0xff match2 0x00
# setserial /dev/ttyS12 set_multiport port1 0x240 mask1 0x03 match1 0x00

Check that the settings are in place:
# setserial /dev/ttyS4 get_multiport
Multiport config for irq 5:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x1bf, mask=0xf, match=0xf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x340, mask=0xff, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# setserial /dev/ttyS12 get_multiport
Multiport config for irq 10:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port Monitor = 0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port1 = 0x240, mask=0x3, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port2 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port3 = 0x0, mask=0x0, match=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Port4 = 0x0, mask=0x0, match=0x0# man setserial

may be of help also.
&nbsp;
RS-485 Line Modes Support
The utility set485 can be used to set the line mode interactively or from a startup script. Settings stick until changed or the system is rebooted.

The Linux header file ioctls.h now contains definitions for TIOCSER485GET and TIOCSER485SET. These ioctls can be used on Connect Tech 485 capable boards to set the line mode. The mode (passed as an integer) can be one of TIOCSER485FULLDUPLEX, TIOCSER485HALFDUPLEX or TIOCSER485SLAVEMULTIPLEX for full or half duplex or slave multidrop mode, respectively.
&nbsp;
The Linux 2.6 standard serial driver does not have advanced RS485 mode support as of yet. If you require this functionality please contactsupport@connecttech.comfor the latest status of patches available.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">5374034</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867828</id>
<property name="body"><![CDATA[On Friday Sept 14th 2007, a scheduled cruise on the Zephyr with the CTD vehicle was aborted. This note walks down the highlights of the event and the resultant Lessons Learned generated on Monday 17th at the regular status meeting.

&nbsp;Event:&nbsp;

On Friday 14th,&nbsp; while at the dock on the Zephyr setting up for the cruise we encountered network problems in connecting to the AUV which was connected by cable to local network. We spent some time trying to diagnose the problem thinking that it had to do with an incorrect setting of our laptop ('dovekie') with respect to the ships network. This turned out to be a wiring problem with a recently installed router but one which nevertheless set us back by a good half hour. In the anxiety to get going, and while installing new binaries from 'dovekie' to trex2 (the onboard autonomy Linux box) on the AUV, the /bin directory of the Linux filesystem got deleted. This was doable since we had been till that time, been logging in as 'root' with unlimited privileges. The immediate thought was to replace the disk drive of trex2 on the vehicle by its duplicate on shore 'trex1' which is used for testing. However it turned out that the identical event had occurred the evening before and trex1 was also non-functional.

The immediate impact of this event was that we had to move the vehicle to the DMO AUV lab, remove the bubble and remove the hard drive of trex2. After substantial effort with a lot of help from Brent Roman and Kent Hedley (and Frederic on trex2), the /bin director was recovered and the two EPIC boards were brought on-line. However the delays this caused required a scrub of the cruise. On Monday 17th, we gathered for a Lessons Learned to see what general steps needed to be taken to ensure such serious errors are not repeated. The results are as below:

*1, Disallow use of 'root' for deployment/development:* The key and obvious finding was the process we had been using&nbsp; to deploy (and developed) was unnecessary reliant on using the 'root' account on the two EPIC board computers. There is neither a need not a requirement for such use. Therefore this modus-operandi has been discontinued. *Action*: Use the general user 'dorado1' account similar to what the DMO AUV team uses.

*2. Use of 'bin' as a T-REX directory name caused an unncessary mapping to a system level directory*: Again there is no specific need to have directory names which overlap. *Action*: Rename /bin to /exec

*3. Need to have the autonomy deployment laptop 'dovekie' be configured to ship and freewave ops*: A major stress point was the need to ensure that 'dovekie' is able to talk to the AUV while on board the ship as well as when the vehicle is freely floating in the water. Dovekie is a Linux based computer identical to the autonomy EPIC boards een if substantially faster; further they have an identical copy of the sources should those need to be modified at sea. The network configurations have worked once in the past; however there was general lack of confidence that our original configurations were valid (which was incorrect) and coupled with the network outage mentioned in the preamble, seemed to reinforce that this issue was bigger than it really was. *Action*: Have automated Network Configuration which can deal with configuring the laptop from
* shore&nbsp; to ship
* ship to Ops
* Ops to shore

4. The importance of regression tests is not be under-estimated: Just prior to the cruise it was known that all the standard regression tests were either not run or when run, some had failed in ways that were not clearly understood. For instance, a long mission was showing a segmentation fault well into 1000secs into its run on the EPIC boards. Action: Ensure there are nightly builds on a fast Linux box (e.g Threadfish) which will run

* EUROPA regression tests
* T-REX regression tests

5. trex1 tests

&nbsp;&nbsp;&nbsp; + run tests from the head of SVN
&nbsp;&nbsp;&nbsp; + run nightly build on trex1

6. Test deployment process
&nbsp;&nbsp;&nbsp; + Dry run of entire deployment the day before (sans vehicle network test the full process to deploy)
&nbsp;&nbsp;&nbsp; + cheat sheet which is small and simple
&nbsp;&nbsp;&nbsp; + Have a large capacity USB flash stick handy
&nbsp;&nbsp;&nbsp; + If possible install binaries on the AUV and practice deployment the previous day

7. Fail over to AMC run-out sequence
&nbsp;&nbsp;&nbsp; + only on worst case
&nbsp;&nbsp;&nbsp; + extend NAV failure timeour
&nbsp;&nbsp;&nbsp; + have a canned "smart" run out sequence on AMC side (check with Hans on the viability e.g turn prop slowly or shut down altogether)
&nbsp;&nbsp;&nbsp; + return a version of 'Idle' behavior which will become our (T-REX) standby sequence which is triggered when multi-reactor reasoning is encountered

8. Bound the box of the navigational envelope to ensure the AUV doesn't disappear outside the general area where tests are conducted.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835064</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867827</id>
<property name="body"><![CDATA[On Friday Sept 14th 2007, a scheduled cruise on the Zephyr with the CTD vehicle was aborted. This note walks down the highlights of the event and the resultant Lessons Learned generated on Monday 17th at the regular status meeting.

&nbsp;Event:&nbsp;

On Friday 14th,&nbsp; while at the dock on the Zephyr setting up for the cruise we encountered network problems in connecting to the AUV which was connected by cable to local network. We spent some time trying to diagnose the problem thinking that it had to do with an incorrect setting of our laptop ('dovekie') with respect to the ships network. This turned out to be a wiring problem with a recently installed router but one which nevertheless set us back by a good half hour. In the anxiety to get going, and while installing new binaries from 'dovekie' to trex2 (the onboard autonomy Linux box) on the AUV, the /bin directory of the Linux filesystem got deleted. This was doable since we had been till that time, been logging in as 'root' with unlimited privileges. The immediate thought was to replace the disk drive of trex2 on the vehicle by its duplicate on shore 'trex1' which is used for testing. However it turned out that the identical event had occurred the evening before and trex1 was also non-functional.

The immediate impact of this event was that we had to move the vehicle to the DMO AUV lab, remove the bubble and remove the hard drive of trex2. After substantial effort with a lot of help from Brent Roman and Kent Hedley (and Frederic on trex2), the /bin director was recovered and the two EPIC boards were brought on-line. However the delays this caused required a scrub of the cruise. On Monday 17th, we gathered for a Lessons Learned to see what general steps needed to be taken to ensure such serious errors are not repeated. The results are as below:

*1, Disallow use of 'root' for deployment/development:* The key and obvious finding was the process we had been using&nbsp; to deploy (and developed) was unnecessary reliant on using the 'root' account on the two EPIC board computers. There is neither a need not a requirement for such use. Therefore this modus-operandi has been discontinued. *Action*: Use the general user 'dorado1' account similar to what the DMO AUV team uses.

*2. Use of 'bin' as a T-REX directory name caused an unncessary mapping to a system level directory*: Again there is no specific need to have directory names which overlap. *Action*: Rename /bin to /exec

*3. Need to have the autonomy deployment laptop 'dovekie' be configured to ship and freewave ops*: A major stress point was the need to ensure that 'dovekie' is able to talk to the AUV while on board the ship as well as when the vehicle is freely floating in the water. Dovekie is a Linux based computer identical to the autonomy EPIC boards een if substantially faster; further they have an identical copy of the sources should those need to be modified at sea. The network configurations have worked once in the past; however there was general lack of confidence that our original configurations were valid (which was incorrect) and coupled with the network outage mentioned in the preamble, seemed to reinforce that this issue was bigger than it really was. *Action*: Have automated Network Configuration which can deal with configuring the laptop from
* shore&nbsp; to ship
* ship to Ops
* Ops to shore

4. Nightly build
&nbsp;&nbsp;&nbsp; + Run EUROPA regression tests
&nbsp;&nbsp;&nbsp; + Run T-REX regression tests

5. trex1 tests

&nbsp;&nbsp;&nbsp; + run tests from the head of SVN
&nbsp;&nbsp;&nbsp; + run nightly build on trex1

6. Test deployment process
&nbsp;&nbsp;&nbsp; + Dry run of entire deployment the day before (sans vehicle network test the full process to deploy)
&nbsp;&nbsp;&nbsp; + cheat sheet which is small and simple
&nbsp;&nbsp;&nbsp; + Have a large capacity USB flash stick handy
&nbsp;&nbsp;&nbsp; + If possible install binaries on the AUV and practice deployment the previous day

7. Fail over to AMC run-out sequence
&nbsp;&nbsp;&nbsp; + only on worst case
&nbsp;&nbsp;&nbsp; + extend NAV failure timeour
&nbsp;&nbsp;&nbsp; + have a canned "smart" run out sequence on AMC side (check with Hans on the viability e.g turn prop slowly or shut down altogether)
&nbsp;&nbsp;&nbsp; + return a version of 'Idle' behavior which will become our (T-REX) standby sequence which is triggered when multi-reactor reasoning is encountered

8. Bound the box of the navigational envelope to ensure the AUV doesn't disappear outside the general area where tests are conducted.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835063</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867830</id>
<property name="body"><![CDATA[On Friday Sept 14th 2007, a scheduled cruise on the Zephyr with the CTD vehicle was aborted. This note walks down the highlights of the event and the resultant Lessons Learned generated on Monday 17th at the regular status meeting.

&nbsp;*{+}Event{+}*:&nbsp;

On Friday 14th,&nbsp; while at the dock on the Zephyr setting up for the cruise we encountered network problems in connecting to the AUV which was connected by cable to local network. We spent some time trying to diagnose the problem thinking that it had to do with an incorrect setting of our laptop ('dovekie') with respect to the ships network. This turned out to be a wiring problem with a recently installed router but one which nevertheless set us back by a good half hour. In the anxiety to get going, and while installing new binaries from 'dovekie' to trex2 (the onboard autonomy Linux box) on the AUV, the /bin directory of the Linux filesystem got deleted. This was doable since we had been till that time, been logging in as 'root' with unlimited privileges. The immediate thought was to replace the disk drive of trex2 on the vehicle by its duplicate on shore 'trex1' which is used for testing. However it turned out that the identical event had occurred the evening before and trex1 was also non-functional.

The immediate impact of this event was that we had to move the vehicle to the DMO AUV lab, remove the bubble and remove the hard drive of trex2. After substantial effort with a lot of help from Brent Roman and Kent Hedley (and Frederic on trex2), the /bin director was recovered and the two EPIC boards were brought on-line. However the delays this caused required a scrub of the cruise. On Monday 17th, we gathered for a Lessons Learned to see what general steps needed to be taken to ensure such serious errors are not repeated. The results are as below:

*1, Disallow use of 'root' for deployment/development:* The key and obvious finding was the process we had been using&nbsp; to deploy (and developed) was unnecessary reliant on using the 'root' account on the two EPIC board computers. There is neither a need not a requirement for such use. Therefore this modus-operandi has been discontinued. *Action*: Use the general user 'dorado1' account similar to what the DMO AUV team uses.

*2. Use of 'bin' as a T-REX directory name caused an unncessary mapping to a system level directory*: Again there is no specific need to have directory names which overlap. *Action*: Rename /bin to /exec

*3. Need to have the autonomy deployment laptop 'dovekie' be configured to ship and freewave ops*: A major stress point was the need to ensure that 'dovekie' is able to talk to the AUV while on board the ship as well as when the vehicle is freely floating in the water. Dovekie is a Linux based computer identical to the autonomy EPIC boards een if substantially faster; further they have an identical copy of the sources should those need to be modified at sea. The network configurations have worked once in the past; however there was general lack of confidence that our original configurations were valid (which was incorrect) and coupled with the network outage mentioned in the preamble, seemed to reinforce that this issue was bigger than it really was. *Action*: Have automated Network Configuration which can deal with configuring the laptop from
* shore&nbsp; to ship
* ship to Ops
* Ops to shore

*4. The importance of regression tests is not be under-estimated*: Just prior to the cruise it was known that all the standard regression tests were either not run or when run, some had failed in ways that were not clearly understood. For instance, a long mission was showing a segmentation fault well into 1000secs into its run on the EPIC boards. *Action*: Ensure there are nightly builds on a fast Linux box (e.g Threadfish) which will run
* EUROPA regression tests
* T-REX regression tests

*5. The importance of running on the EPIC testbed is not be under-estimated*: trex1 tests coupled with 'foobar' the QNX box with the AUV sim, can and does very reasonably simulate the conditions of T-REX when in the water. Running on trex1 is therefore very valuable especially in terms of understanding timing and performance of the system overall. *Action*: Therefore it is critical that prior to a cruise (and well before it) we

* run tests from the head of SVN checking out T-REX sources

* run nightly build on trex1 following the above. Even if slow it is a very good harbinger of any issues to come at sea.

6. Test deployment process
&nbsp;&nbsp;&nbsp; + Dry run of entire deployment the day before (sans vehicle network test the full process to deploy)
&nbsp;&nbsp;&nbsp; + cheat sheet which is small and simple
&nbsp;&nbsp;&nbsp; + Have a large capacity USB flash stick handy
&nbsp;&nbsp;&nbsp; + If possible install binaries on the AUV and practice deployment the previous day

7. Fail over to AMC run-out sequence
&nbsp;&nbsp;&nbsp; + only on worst case
&nbsp;&nbsp;&nbsp; + extend NAV failure timeour
&nbsp;&nbsp;&nbsp; + have a canned "smart" run out sequence on AMC side (check with Hans on the viability e.g turn prop slowly or shut down altogether)
&nbsp;&nbsp;&nbsp; + return a version of 'Idle' behavior which will become our (T-REX) standby sequence which is triggered when multi-reactor reasoning is encountered

8. Bound the box of the navigational envelope to ensure the AUV doesn't disappear outside the general area where tests are conducted.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835066</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867829</id>
<property name="body"><![CDATA[On Friday Sept 14th 2007, a scheduled cruise on the Zephyr with the CTD vehicle was aborted. This note walks down the highlights of the event and the resultant Lessons Learned generated on Monday 17th at the regular status meeting.

&nbsp;Event:&nbsp;

On Friday 14th,&nbsp; while at the dock on the Zephyr setting up for the cruise we encountered network problems in connecting to the AUV which was connected by cable to local network. We spent some time trying to diagnose the problem thinking that it had to do with an incorrect setting of our laptop ('dovekie') with respect to the ships network. This turned out to be a wiring problem with a recently installed router but one which nevertheless set us back by a good half hour. In the anxiety to get going, and while installing new binaries from 'dovekie' to trex2 (the onboard autonomy Linux box) on the AUV, the /bin directory of the Linux filesystem got deleted. This was doable since we had been till that time, been logging in as 'root' with unlimited privileges. The immediate thought was to replace the disk drive of trex2 on the vehicle by its duplicate on shore 'trex1' which is used for testing. However it turned out that the identical event had occurred the evening before and trex1 was also non-functional.

The immediate impact of this event was that we had to move the vehicle to the DMO AUV lab, remove the bubble and remove the hard drive of trex2. After substantial effort with a lot of help from Brent Roman and Kent Hedley (and Frederic on trex2), the /bin director was recovered and the two EPIC boards were brought on-line. However the delays this caused required a scrub of the cruise. On Monday 17th, we gathered for a Lessons Learned to see what general steps needed to be taken to ensure such serious errors are not repeated. The results are as below:

*1, Disallow use of 'root' for deployment/development:* The key and obvious finding was the process we had been using&nbsp; to deploy (and developed) was unnecessary reliant on using the 'root' account on the two EPIC board computers. There is neither a need not a requirement for such use. Therefore this modus-operandi has been discontinued. *Action*: Use the general user 'dorado1' account similar to what the DMO AUV team uses.

*2. Use of 'bin' as a T-REX directory name caused an unncessary mapping to a system level directory*: Again there is no specific need to have directory names which overlap. *Action*: Rename /bin to /exec

*3. Need to have the autonomy deployment laptop 'dovekie' be configured to ship and freewave ops*: A major stress point was the need to ensure that 'dovekie' is able to talk to the AUV while on board the ship as well as when the vehicle is freely floating in the water. Dovekie is a Linux based computer identical to the autonomy EPIC boards een if substantially faster; further they have an identical copy of the sources should those need to be modified at sea. The network configurations have worked once in the past; however there was general lack of confidence that our original configurations were valid (which was incorrect) and coupled with the network outage mentioned in the preamble, seemed to reinforce that this issue was bigger than it really was. *Action*: Have automated Network Configuration which can deal with configuring the laptop from
* shore&nbsp; to ship
* ship to Ops
* Ops to shore

*4. The importance of regression tests is not be under-estimated*: Just prior to the cruise it was known that all the standard regression tests were either not run or when run, some had failed in ways that were not clearly understood. For instance, a long mission was showing a segmentation fault well into 1000secs into its run on the EPIC boards. Action: Ensure there are nightly builds on a fast Linux box (e.g Threadfish) which will run
* EUROPA regression tests
* T-REX regression tests

5. trex1 tests

&nbsp;&nbsp;&nbsp; + run tests from the head of SVN
&nbsp;&nbsp;&nbsp; + run nightly build on trex1

6. Test deployment process
&nbsp;&nbsp;&nbsp; + Dry run of entire deployment the day before (sans vehicle network test the full process to deploy)
&nbsp;&nbsp;&nbsp; + cheat sheet which is small and simple
&nbsp;&nbsp;&nbsp; + Have a large capacity USB flash stick handy
&nbsp;&nbsp;&nbsp; + If possible install binaries on the AUV and practice deployment the previous day

7. Fail over to AMC run-out sequence
&nbsp;&nbsp;&nbsp; + only on worst case
&nbsp;&nbsp;&nbsp; + extend NAV failure timeour
&nbsp;&nbsp;&nbsp; + have a canned "smart" run out sequence on AMC side (check with Hans on the viability e.g turn prop slowly or shut down altogether)
&nbsp;&nbsp;&nbsp; + return a version of 'Idle' behavior which will become our (T-REX) standby sequence which is triggered when multi-reactor reasoning is encountered

8. Bound the box of the navigational envelope to ensure the AUV doesn't disappear outside the general area where tests are conducted.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835065</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867832</id>
<property name="body"><![CDATA[On Friday Sept 14th 2007, a scheduled cruise on the Zephyr with the CTD vehicle was aborted. This note walks down the highlights of the event and the resultant Lessons Learned generated on Monday 17th at the regular status meeting.

&nbsp;*{+}Event{+}*:&nbsp;

On Friday 14th,&nbsp; while at the dock on the Zephyr setting up for the cruise we encountered network problems in connecting to the AUV which was connected by cable to local network. We spent some time trying to diagnose the problem thinking that it had to do with an incorrect setting of our laptop ('dovekie') with respect to the ships network. This turned out to be a wiring problem with a recently installed router but one which nevertheless set us back by a good half hour. In the anxiety to get going, and while installing new binaries from 'dovekie' to trex2 (the onboard autonomy Linux box) on the AUV, the /bin directory of the Linux filesystem got deleted. This was doable since we had been till that time, been logging in as 'root' with unlimited privileges. The immediate thought was to replace the disk drive of trex2 on the vehicle by its duplicate on shore 'trex1' which is used for testing. However it turned out that the identical event had occurred the evening before and trex1 was also non-functional.

The immediate impact of this event was that we had to move the vehicle to the DMO AUV lab, remove the bubble and remove the hard drive of trex2. After substantial effort with a lot of help from Brent Roman and Kent Hedley (and Frederic on trex2), the /bin director was recovered and the two EPIC boards were brought on-line. However the delays this caused required a scrub of the cruise. On Monday 17th, we gathered for a Lessons Learned to see what general steps needed to be taken to ensure such serious errors are not repeated. The results are as below:

*1, Disallow use of 'root' for deployment/development:* The key and obvious finding was the process we had been using&nbsp; to deploy (and developed) was unnecessary reliant on using the 'root' account on the two EPIC board computers. There is neither a need not a requirement for such use. Therefore this modus-operandi has been discontinued. *Action*: Use the general user 'dorado1' account similar to what the DMO AUV team uses.

*2. Use of 'bin' as a T-REX directory name caused an unncessary mapping to a system level directory*: Again there is no specific need to have directory names which overlap. *Action*: Rename /bin to /exec

*3. Need to have the autonomy deployment laptop 'dovekie' be configured to ship and freewave ops*: A major stress point was the need to ensure that 'dovekie' is able to talk to the AUV while on board the ship as well as when the vehicle is freely floating in the water. Dovekie is a Linux based computer identical to the autonomy EPIC boards een if substantially faster; further they have an identical copy of the sources should those need to be modified at sea. The network configurations have worked once in the past; however there was general lack of confidence that our original configurations were valid (which was incorrect) and coupled with the network outage mentioned in the preamble, seemed to reinforce that this issue was bigger than it really was. *Action*: Have automated Network Configuration which can deal with configuring the laptop from
* shore&nbsp; to ship
* ship to Ops
* Ops to shore

*4. The importance of regression tests is not be under-estimated*: Just prior to the cruise it was known that all the standard regression tests were either not run or when run, some had failed in ways that were not clearly understood. For instance, a long mission was showing a segmentation fault well into 1000secs into its run on the EPIC boards. *Action*: Ensure there are nightly builds on a fast Linux box (e.g Threadfish) which will run
* EUROPA regression tests
* T-REX regression tests

*5. The importance of running on the EPIC testbed is not be under-estimated*: trex1 tests coupled with 'foobar' the QNX box with the AUV sim, can and does very reasonably simulate the conditions of T-REX when in the water. Running on trex1 is therefore very valuable especially in terms of understanding timing and performance of the system overall. *Action*: Therefore it is critical that prior to a cruise (and well before it) we
* run tests from the head of SVN checking out T-REX sources

* run nightly build on trex1 following the above. Even if slow it is a very good harbinger of any issues to come at sea.

*6. Prior to deployment, and given the sparsity of our sea going days, dry runs are important:* The deployment process should be fully walked thru in detail to make everyone feel comfortable on the day of the deployment and to ensure there are no last minute issues. The deployment itself requires some some minor additional steps. *Action*:
* Do a dry run/walk thru of the entire deployment process the day before and sans vehicle network test the full process to deploy. If the Zephyr is available at the dock the previous day, then Dovekie should be taken on board to test the network.
* Have a simple and small cheat-sheet to mark off what needs to be done; something akin to a check-list
* Have a large capacity USB Flash drive handy
* If possible install binaries on the AUV and practice deployment n the vehicle the previous day. Given the demand on the vehicle and the Zephyr this might not be as easy to do; but an attempt should be made if not the day immediately before, then sufficiently prior to the cruise day.

7. Need for a run-out sequence on the AMC: When T-REX fails or more likely spending substantial time churning while replanning especially with multiple reactors, we should consider executing a run-out sequence. Such a sequence for instance could
&nbsp;&nbsp;&nbsp; + only on worst case
&nbsp;&nbsp;&nbsp; + extend NAV failure timeout
&nbsp;&nbsp;&nbsp; + have a canned "smart" run out sequence on AMC side (check with Hans on the viability e.g turn prop slowly or shut down altogether)
&nbsp;&nbsp;&nbsp; + return a version of 'Idle' behavior which will become our (T-REX) standby sequence which is triggered when multi-reactor reasoning is encountered

8. Bound the box of the navigational envelope to ensure the AUV doesn't disappear outside the general area where tests are conducted.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835068</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867831</id>
<property name="body"><![CDATA[On Friday Sept 14th 2007, a scheduled cruise on the Zephyr with the CTD vehicle was aborted. This note walks down the highlights of the event and the resultant Lessons Learned generated on Monday 17th at the regular status meeting.

&nbsp;*{+}Event{+}*:&nbsp;

On Friday 14th,&nbsp; while at the dock on the Zephyr setting up for the cruise we encountered network problems in connecting to the AUV which was connected by cable to local network. We spent some time trying to diagnose the problem thinking that it had to do with an incorrect setting of our laptop ('dovekie') with respect to the ships network. This turned out to be a wiring problem with a recently installed router but one which nevertheless set us back by a good half hour. In the anxiety to get going, and while installing new binaries from 'dovekie' to trex2 (the onboard autonomy Linux box) on the AUV, the /bin directory of the Linux filesystem got deleted. This was doable since we had been till that time, been logging in as 'root' with unlimited privileges. The immediate thought was to replace the disk drive of trex2 on the vehicle by its duplicate on shore 'trex1' which is used for testing. However it turned out that the identical event had occurred the evening before and trex1 was also non-functional.

The immediate impact of this event was that we had to move the vehicle to the DMO AUV lab, remove the bubble and remove the hard drive of trex2. After substantial effort with a lot of help from Brent Roman and Kent Hedley (and Frederic on trex2), the /bin director was recovered and the two EPIC boards were brought on-line. However the delays this caused required a scrub of the cruise. On Monday 17th, we gathered for a Lessons Learned to see what general steps needed to be taken to ensure such serious errors are not repeated. The results are as below:

*1, Disallow use of 'root' for deployment/development:* The key and obvious finding was the process we had been using&nbsp; to deploy (and developed) was unnecessary reliant on using the 'root' account on the two EPIC board computers. There is neither a need not a requirement for such use. Therefore this modus-operandi has been discontinued. *Action*: Use the general user 'dorado1' account similar to what the DMO AUV team uses.

*2. Use of 'bin' as a T-REX directory name caused an unncessary mapping to a system level directory*: Again there is no specific need to have directory names which overlap. *Action*: Rename /bin to /exec

*3. Need to have the autonomy deployment laptop 'dovekie' be configured to ship and freewave ops*: A major stress point was the need to ensure that 'dovekie' is able to talk to the AUV while on board the ship as well as when the vehicle is freely floating in the water. Dovekie is a Linux based computer identical to the autonomy EPIC boards een if substantially faster; further they have an identical copy of the sources should those need to be modified at sea. The network configurations have worked once in the past; however there was general lack of confidence that our original configurations were valid (which was incorrect) and coupled with the network outage mentioned in the preamble, seemed to reinforce that this issue was bigger than it really was. *Action*: Have automated Network Configuration which can deal with configuring the laptop from
* shore&nbsp; to ship
* ship to Ops
* Ops to shore

*4. The importance of regression tests is not be under-estimated*: Just prior to the cruise it was known that all the standard regression tests were either not run or when run, some had failed in ways that were not clearly understood. For instance, a long mission was showing a segmentation fault well into 1000secs into its run on the EPIC boards. *Action*: Ensure there are nightly builds on a fast Linux box (e.g Threadfish) which will run
* EUROPA regression tests
* T-REX regression tests

*5. The importance of running on the EPIC testbed is not be under-estimated*: trex1 tests coupled with 'foobar' the QNX box with the AUV sim, can and does very reasonably simulate the conditions of T-REX when in the water. Running on trex1 is therefore very valuable especially in terms of understanding timing and performance of the system overall. *Action*: Therefore it is critical that prior to a cruise (and well before it) we
* run tests from the head of SVN checking out T-REX sources

* run nightly build on trex1 following the above. Even if slow it is a very good harbinger of any issues to come at sea.

*6. Prior to deployment, and given the sparsity of our sea going days, dry runs are important:* The deployment process should be fully walked thru in detail to make everyone feel comfortable on the day of the deployment and to ensure there are no last minute issues. The deployment itself requires some some minor additional steps. *Action*:
* Do a dry run/walk thru of the entire deployment process the day before and sans vehicle network test the full process to deploy. If the Zephyr is available at the dock the previous day, then Dovekie should be taken on board to test the network.
* Have a simple and small cheat-sheet to mark off what needs to be done; something akin to a check-list
* Have a large capacity USB Flash drive handy
* If possible install binaries on the AUV and practice deployment n the vehicle the previous day. Given the demand on the vehicle and the Zephyr this might not be as easy to do; but an attempt should be made if not the day immediately before, then sufficiently prior to the cruise day.

7. Fail over to AMC run-out sequence
&nbsp;&nbsp;&nbsp; + only on worst case
&nbsp;&nbsp;&nbsp; + extend NAV failure timeour
&nbsp;&nbsp;&nbsp; + have a canned "smart" run out sequence on AMC side (check with Hans on the viability e.g turn prop slowly or shut down altogether)
&nbsp;&nbsp;&nbsp; + return a version of 'Idle' behavior which will become our (T-REX) standby sequence which is triggered when multi-reactor reasoning is encountered

8. Bound the box of the navigational envelope to ensure the AUV doesn't disappear outside the general area where tests are conducted.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835067</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867833</id>
<property name="body"><![CDATA[On Friday Sept 14th 2007, a scheduled cruise on the Zephyr with the CTD vehicle was aborted. This note walks down the highlights of the event and the resultant Lessons Learned generated on Monday 17th at the regular status meeting.

&nbsp;*{+}Event{+}*:&nbsp;

On Friday 14th,&nbsp; while at the dock on the Zephyr setting up for the cruise we encountered network problems in connecting to the AUV which was connected by cable to local network. We spent some time trying to diagnose the problem thinking that it had to do with an incorrect setting of our laptop ('dovekie') with respect to the ships network. This turned out to be a wiring problem with a recently installed router but one which nevertheless set us back by a good half hour. In the anxiety to get going, and while installing new binaries from 'dovekie' to trex2 (the onboard autonomy Linux box) on the AUV, the /bin directory of the Linux filesystem got deleted. This was doable since we had been till that time, been logging in as 'root' with unlimited privileges. The immediate thought was to replace the disk drive of trex2 on the vehicle by its duplicate on shore 'trex1' which is used for testing. However it turned out that the identical event had occurred the evening before and trex1 was also non-functional.

The immediate impact of this event was that we had to move the vehicle to the DMO AUV lab, remove the bubble and remove the hard drive of trex2. After substantial effort with a lot of help from Brent Roman and Kent Hedley (and Frederic on trex2), the /bin director was recovered and the two EPIC boards were brought on-line. However the delays this caused required a scrub of the cruise. On Monday 17th, we gathered for a Lessons Learned to see what general steps needed to be taken to ensure such serious errors are not repeated. The results are as below:

*1, Disallow use of 'root' for deployment/development:* The key and obvious finding was the process we had been using&nbsp; to deploy (and developed) was unnecessary reliant on using the 'root' account on the two EPIC board computers. There is neither a need not a requirement for such use. Therefore this modus-operandi has been discontinued. *Action*: Use the general user 'dorado1' account similar to what the DMO AUV team uses.

*2. Use of 'bin' as a T-REX directory name caused an unncessary mapping to a system level directory*: Again there is no specific need to have directory names which overlap. *Action*: Rename /bin to /exec

*3. Need to have the autonomy deployment laptop 'dovekie' be configured to ship and freewave ops*: A major stress point was the need to ensure that 'dovekie' is able to talk to the AUV while on board the ship as well as when the vehicle is freely floating in the water. Dovekie is a Linux based computer identical to the autonomy EPIC boards een if substantially faster; further they have an identical copy of the sources should those need to be modified at sea. The network configurations have worked once in the past; however there was general lack of confidence that our original configurations were valid (which was incorrect) and coupled with the network outage mentioned in the preamble, seemed to reinforce that this issue was bigger than it really was. *Action*: Have automated Network Configuration which can deal with configuring the laptop from
* shore&nbsp; to ship
* ship to Ops
* Ops to shore

*4. The importance of regression tests is not be under-estimated*: Just prior to the cruise it was known that all the standard regression tests were either not run or when run, some had failed in ways that were not clearly understood. For instance, a long mission was showing a segmentation fault well into 1000secs into its run on the EPIC boards. *Action*: Ensure there are nightly builds on a fast Linux box (e.g Threadfish) which will run
* EUROPA regression tests
* T-REX regression tests

*5. The importance of running on the EPIC testbed is not be under-estimated*: trex1 tests coupled with 'foobar' the QNX box with the AUV sim, can and does very reasonably simulate the conditions of T-REX when in the water. Running on trex1 is therefore very valuable especially in terms of understanding timing and performance of the system overall. *Action*: Therefore it is critical that prior to a cruise (and well before it) we
* run tests from the head of SVN checking out T-REX sources

* run nightly build on trex1 following the above. Even if slow it is a very good harbinger of any issues to come at sea.

*6. Prior to deployment, and given the sparsity of our sea going days, dry runs are important:* The deployment process should be fully walked thru in detail to make everyone feel comfortable on the day of the deployment and to ensure there are no last minute issues. The deployment itself requires some some minor additional steps. *Action*:
* Do a dry run/walk thru of the entire deployment process the day before and sans vehicle network test the full process to deploy. If the Zephyr is available at the dock the previous day, then Dovekie should be taken on board to test the network.
* Have a simple and small cheat-sheet to mark off what needs to be done; something akin to a check-list
* Have a large capacity USB Flash drive handy
* If possible install binaries on the AUV and practice deployment n the vehicle the previous day. Given the demand on the vehicle and the Zephyr this might not be as easy to do; but an attempt should be made if not the day immediately before, then sufficiently prior to the cruise day.

*7{*}*. Need for a run-out sequence on the AMC*: When T-REX fails or more likely spending substantial time churning while replanning especially with multiple reactors, we should consider executing a run-out sequence. Such a sequence for instance could keep the control within T-REX while turning the prop slowly or perhaps circling at an assigned depth similar to the standby mode of spacecraft. Such an eventuality should be executed only in the worst case of plan failure. Action: To do this, we could

* extend NAV failure timeout
* have a canned "smart" run out sequence on AMC side or
* return a version of the originally developed '_Idle_' behavior

8. Bound the box of the navigational envelope to ensure the AUV doesn't disappear outside the general area where tests are conducted.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835069</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21397657</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

{toc}

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

h4. get short help

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}

h4. TREX version

{panel}
{panel:title=TREX version}
 * *format:* 
 ** GET http://<host>/rest/version
 * Gets information of the currently running version of trex
 * *output:*
 {code:javascript}
{
    "version_major": "0",
    "version_minor": "5",
    "version_release": "0",
    "version_rc": "1",
    "svn_root": "trunk",
    "svn_rev": "1450",
    "version_str": "0.5.0-rc1 (svn:trunk[1450])"
} 
{code}
 ** *note* svn_rev may not be a integer but is the output of the svnversion command. Which mean that ift can be a range of version (eg 1447:1450) and/or be postfixed by a modification flag letter (M for locally modified, S for a branch of tag instead of the trunk)  
{panel}

h3. Tick and date related services

h4. Current tick

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "2656",
    "date": "2013-06-04T15:29:04.923976"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. Next tick

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "2658",
    "date": "2013-06-04T15:31:04.923976"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. Initial tick

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/initial
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/initial
 {code:javascript}
{
    "value": "0",
    "date": "2013-06-02T19:13:04.923976"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. Final tick

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "1000000",
    "date": "2015-04-28T05:53:04.923976"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. tick info

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/2658
 {code:javascript}
{
    "value": "2658",
    "date": "2013-06-04T15:31:04.923976"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. tick at a date

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-01-01
 {code:javascript}
{
    "value": "305566",
    "date": "2013-12-31T23:59:04.923976"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

h4. tick rate/duration

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}

h4. Wait for new tick

{panel:title=Wait for new tick}
* *format:* GET http://<host>/rest/tick/wait
* This request implements a long pull in order for the client to be notified when the next tick occurs. 
The request will not respond until the next tick occurs.
* *output:* similar to GET http://<host>/rest/tick  
{panel}

h3. Timelines and goals services

h4. List of trex existing timelines

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/timelines
 ** GET http://<host>/rest/timelines/timline_a/timeline_b ...
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "alive": "true",
            "accept_goals": "false",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_state"
        },
        {
            "name": "dorado_survey",
            "alive": "true",
            "accept_goals": "true",
            "latency":
            {
                "ticks": "0",
                "duration": "00:00:00"
            },
            "look_ahead":
            {
                "ticks": "1",
                "duration": "00:01:00"
            },
            "publish_plan": "false",
            "href": "/rest/timeline/dorado_survey"
        },
        ...
    ]
}
 {code}
 
 ** "timelines" is the table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 *** "alive" a boolean indicating whether this timeline is still managed or "dead" (resulting on a Failed state)
 *** "accept_goals" a boolean indicating if this timeline accept goals or not (for example position updates on assets do not accept goals)
 *** "publish_plan" a boolean indicating if this timeline will publish its future when it has a plan or can only display its past and current state
 *** "latency" The expected maximum delay until a received goal on this timeline will be processed
 *** "look_ahead" How far ahead in the future this timeline is usually planned for 
 ** booth look_ahead and latency are json object giving their value both in term of TREX tick and real-time duration 
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically). Similarly all the attached information (except for their name) can change as the mission advance (although we often avoid it).
 ** It is possible to restrict the set of timeline to a known subset by specifying them on the URI. For example get http://<host>/rest/a/b/c will give information of only a, b and c  
{panel}


h4. Contents of a timeline

{panel:title=Contents of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{date\}&to=\{date\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{date\}&format=date
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}&format=tick
 * *input:*
 ** \{name\} the name of the timeline
 ** _format_ the format used to specify _from_ and _to_ . Possible formats are:
 *** *date* : _from_ and _to_ are specified as date (eg 2013-06-03T16:04:57.330-07:00)
 *** *tick* : _from_ and _to_ are given as integer which are directly trex tick values
 *** If not specified the default format is *date*
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. Meaning all the token which
 *** can end after _from_ (ie their largest possible end time is >= to _from_)
 *** can start before _to_ (ie their smallest possible start time is <= to _to_)
 ** While the json format id still underwork here's an example of what I have now :
(the request: http://<host>/rest/timeline/dorado_survey?from=2013-06-03T16:04:57.330-07:00&to=2013-06-13T16:10:29.449-07:00)
 {code:javascript}
{
  "name": "dorado_survey"  
  "requested_tick_range": {
    "int": {
      "max": "16077",
      "min": "1671"
    }
  },
  "tokens": [
    {
      "pred": "None",
      "on": "dorado_survey"
      "Variable": [
        {
          "name": "start",
          "type": "date",
          "date": {
            "value": "2013-06-02T19:13:04.923976"
          }
        },
        {
          "name": "end",
          "type": "date",
          "date": {
            "min": "2013-06-04T15:36:04.923976"
          }
        },
        {
          "name": "duration",
          "type": "duration",
          "duration": {
            "min": "44:23:00"
          }
        }
      ]
    }
  ]
}
{code}
 ** In this example the result has the following attributes :
 *** "name" : The name of the timeline
 *** "alive" : Indicates if this timeline is currently still managed
 *** "requested_tick_range" : an interval giving the range \[_from_, _to_\] into ticks
 *** "token" : A table with all the tokens that match this range. Tokens are sorted by occurrence order

 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 ** 400: parsing error from the optionals fields 
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=2013-May-23&to=2013-may-31%2012:00:00
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100&format=tick
{panel}

h4. Post a new goal

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
** Associated data: the goal in json format (request header need to set Content-Type to application/json)
 * *example of a curl command:*
 {code:none}
   curl -X POST --header 'Content-Type:application/json' -d '
   {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable": [
            { "name": "drifter",
              "type": "enum",
              "enum": { "elem": [ { "value": "MBARI21" } ] }
            },
            { "name": "lagrangian",
              "type": "bool",
              "bool": { "value": "1" }
            },
            { "name": "path",
              "enum": { "elem": [ { "value": "square" } ] }
            },
            { "name": "size", 
              "float": { "value": 1000.0 }
            },
            { "name": "start",
              "type": "date",
              "date": { "min": "2013-May-16 15:53:00" }
            },
            { "name": "duration"
              "duration": { "max": "18:00:00" },
              "type": "duration"
            }
        ]
    }
   }' http://<host>/rest/goal
 {code}
* *output on success:* A json structure with the following attributes:
** _id_ : A unique identifier for the goal
** _href_: URL where this goal can be accessed (through GET or DELETE)
** _Goal_: The goal representation (should be fairly similar to what data was posted but with small tweaks such as updated start duration and end information)
* *example output* from the command above:
{code:javascript}
{
    "id": "0xb0425cb0",
    "href": "/rest/goal/0xb0425cb0",
    "Goal":
    {
        "on": "dorado_survey",
        "pred": "Track",
        "Variable":
        [
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "spotSim"
                        }
                    ]
                },
                "type": "enum",
                "name": "drifter"
            },
            {
                "bool":
                {
                    "value": "1"
                },
                "type": "bool",
                "name": "lagrangian"
            },
            {
                "enum":
                {
                    "elem":
                    [
                        {
                            "value": "square"
                        }
                    ]
                },
                "type": "enum",
                "name": "path"
            },
            {
                "float":
                {
                    "value": "1000.0000000000000000"
                },
                "type": "float",
                "name": "size"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:16:01.566673"
                },
                "type": "date",
                "name": "start"
            },
            {
                "date":
                {
                    "min": "2013-May-16 16:17:01.566673"
                },
                "type": "date",
                "name": "end"
            },
            {
                "duration":
                {
                    "min": "00:01:00",
                    "max": "18:00:00"
                },
                "type": "duration",
                "name": "duration"
            }
        ]
    }
}
{code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

h4. Modify an existing goal

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

h4. Cancel a goal

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned


{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">21364890</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8946137</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet

h2. Plan 
{anchor:top}
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX 
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation 

h2. Directory structure
{anchor:dir}

For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
* PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h2. Initializing TREX environment variables
{anchor:env}

The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of 
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
The compilation of TREX core libraries is done similarly
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc 
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal. 
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX
{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
  ** amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
  ** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
  ** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
  ** amc.play.cfg: used to replay a mission for debugging purpose.
  ** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* *.solver.cfg: Europa configuration to tweak the plan solver for the given reactor. 
* *.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings *.exec.nddl *.skipper.nddl *.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_  on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
 Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the *processes.cfg to see if it starts correct processes including statePublisher

h2. Starting a mission
{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.

{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* -v for being verbose
* -sim when in simulation (ie no HW in the loop)
{info} 

{code:none|title=On Linux}
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* -proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* -fastsim indicates to vcsServer that it will run into linux fast simulation  
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info} 

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] [<nstep>]
{code}

{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}

{info:title=flags information}
* -fast indicates that the clock used would connect to auv-linux fast simulation clock
* -sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on -fast or -sim mode. 
{info} 

You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log

{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log 
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim|-fast] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
> 
{code}

You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/! are used to manipulate how much data you want  on the Debug.log starting from now.



]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913396</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179427</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; TODO:&nbsp; TM to mod auv-pkgs in cvs to add omniORB.cfg file for mvc-debian.
* Navigation drivers (first priority)
** ashtec(gps)
*** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status (+) &nbsp;
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
** bluefinBatt
*** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
*** Status (-) &nbsp;
**** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
*** ./crossbow \-dev /dev/ttyS11
*** Status (-) &nbsp;
**** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
** parosci \-&nbsp; Paroscientific pressure sensor
*** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
*** ./parosci \-dev /dev/ttyS4
*** Status
**** In progress...&nbsp;&nbsp; Getting an error from CORBA "unable to ping service worksite"...
** sonardyne
** tailcone
*** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
*** ./tailcone \-dev /dev/ttyS2
*** Cautions:
**** Recommend running tailcone tests while observing the tailcone
**** &nbsp;
*** Status (/)
**** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status (/)
**** Driver passes basic functional test.
** Biolume
*** tcp:sci3-dmo1:14002
*** Actions
*** Status (?)
**** Not tested yet
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status (/)
**** Driver passes basic functional test
** imagenex
** Gulper
*** no linux driver currently available (should be a simple 'fire' command)
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113942</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670115</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

Executive Summary:&nbsp;&nbsp;&nbsp;
* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
* Navigation drivers are mostly&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is causing errors.&nbsp;&nbsp;
* Science drivers (Hydroscat, Seabird and Lisst) have been run on desktop machines but not exercised on the AUV.

\\
&nbsp;
* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] This is to fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp; An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;
*** \\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
*** parosci Paroscientific pressure sensor
\\
*** tailcone
\\
*** teledyne DVL
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
** TODO
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Device Emulation to insure regression test and code coverage of error handlers
\\
\\

Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;

Serial port infrastructure

SerTest test program

Code Review

Regression testing

PC104 stack with Xtreme104&nbsp;

Serial Device emulation for regression testing.
\\
\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637356</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179429</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; TODO:&nbsp; TM to mod auv-pkgs in cvs to add omniORB.cfg file for mvc-debian.
* Navigation drivers (first priority)
** ashtec(gps)
*** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status (+) &nbsp;
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
** bluefinBatt
*** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
*** Status (-) &nbsp;
**** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
*** ./crossbow \-dev /dev/ttyS11
*** Status (-) &nbsp;
**** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
** parosci \-&nbsp; Paroscientific pressure sensor
*** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
*** ./parosci \-dev /dev/ttyS4
*** Status
**** In progress...&nbsp;&nbsp; Getting an error from CORBA "unable to ping service worksite"...
** sonardyne
*** &nbsp;
** tailcone
*** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
*** ./tailcone \-dev /dev/ttyS2
*** Cautions:
**** Recommend running tailcone tests while observing the tailcone
**** &nbsp;
*** Status (/)
**** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.
** Teledyne
*** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
*** Status (-)
**** missing dvl.cfg file in sampleConfig directory
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status (/)
**** Driver passes basic functional test.
** Biolume
*** tcp:sci3-dmo1:14002
*** Actions
*** Status (?)
**** Not tested yet
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status (/)
**** Driver passes basic functional test
** imagenex
** Gulper
*** no linux driver currently available (should be a simple 'fire' command)
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113944</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670117</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\
h6. &nbsp;&nbsp;

h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
** Serial Device driver.
*** Verify serial port throughput (SerTest) and resolve linux kernel driver or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.\\ \\

\\
\\
&nbsp;

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637358</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670119</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
* &nbsp;

Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness
* Finish Serial test program (SerTest) to validate 12 port serial card kernel drivers, aid in proper tuning

Navigation Drivers
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Validation of proper data (gps, compass, pressure)

Science Drivers
* Validation on LanTronics terminal server in Auv\\

System&nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity \\

Development Environment
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;


h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
** Serial Device driver.
*** Verify serial port throughput (SerTest) and resolve linux kernel driver or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.
\\
\\

\\
\\
&nbsp;

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637360</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179437</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; TODO:&nbsp; TM to mod auv-pkgs in cvs to add omniORB.cfg file for mvc-debian.
* Navigation drivers (first priority)
** ashtec(gps)
*** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status (+) &nbsp;
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
** bluefinBatt
*** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
*** Status (-) &nbsp;
**** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
*** ./crossbow \-dev /dev/ttyS11
*** Status (-) &nbsp;
**** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
** parosci \-&nbsp; Paroscientific pressure sensor
*** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
*** ./parosci \-dev /dev/ttyS4
*** Status
**** In progress...&nbsp;&nbsp; Getting an error from CORBA "unable to ping service worksite"...
** sonardyne
*** No test executable available
** tailcone
*** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
*** ./tailcone \-dev /dev/ttyS2
*** Cautions:
**** Recommend running tailcone tests while observing the tailcone
**** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
*** Status (/)
**** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.
** Teledyne
*** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
*** Status (-)
**** missing dvl.cfg file in sampleConfig directory
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status (/)
**** Driver passes basic functional test.
** Biolume
*** tcp:sci3-dmo1:14002
*** Actions
*** Status (?)
**** Not tested yet
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status (/)
**** Driver passes basic functional test
** imagenex
** Gulper
*** no linux driver currently available (should be a simple 'fire' command)
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113952</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179438</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; TODO:&nbsp; TM to mod auv-pkgs in cvs to add omniORB.cfg file for mvc-debian.
* Navigation drivers (first priority)
** ashtec(gps)
*** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status (+) &nbsp;
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
** bluefinBatt
*** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
*** Status (-) &nbsp;
**** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
*** ./crossbow \-dev /dev/ttyS11
*** Status (-) &nbsp;
**** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
** parosci \-&nbsp; Paroscientific pressure sensor
*** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
*** ./parosci \-dev /dev/ttyS4
*** Status (-)
**** In progress...&nbsp;&nbsp; Getting an error from CORBA "unable to ping service worksite"...
** sonardyne
*** No test executable available
** tailcone
*** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
*** ./tailcone \-dev /dev/ttyS2
*** Cautions:
**** Recommend running tailcone tests while observing the tailcone
**** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
*** Status (/)
**** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.
** Teledyne dvl
*** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
*** Actions
**** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Status (-)
**** In progress...&nbsp;&nbsp; Getting an error from CORBA "unable to ping service worksite"...
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status (/)
**** Driver passes basic functional test.
** Biolume
*** tcp:sci3-dmo1:14002
*** Actions
*** Status (?)
**** Not tested yet
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status (/)
**** Driver passes basic functional test
** imagenex
** Gulper
*** no linux driver currently available (should be a simple 'fire' command)
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113953</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179440</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; TODO:&nbsp; TM to mod auv-pkgs in cvs to add omniORB.cfg file for mvc-debian.
* Navigation drivers (first priority)
** ashtec(gps)
*** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status (+) &nbsp;
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
** bluefinBatt
*** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
*** Status (-) &nbsp;
**** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
*** ./crossbow \-dev /dev/ttyS11
*** Status (-) &nbsp;
**** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
** parosci \-&nbsp; Paroscientific pressure sensor
*** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
*** ./parosci \-dev /dev/ttyS4
*** Status (-)
**** In progress...&nbsp;&nbsp; Getting an error from CORBA "unable to ping service worksite"...
** sonardyne
*** No test executable available
** tailcone
*** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
*** ./tailcone \-dev /dev/ttyS2
*** Cautions:
**** Recommend running tailcone tests while observing the tailcone
**** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
*** Status (/)
**** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
** Teledyne dvl
*** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
*** Actions
**** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Status (-)
**** In progress...&nbsp;&nbsp; Getting an error from CORBA "unable to ping service worksite"...
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status (/)
**** Driver passes basic functional test.
** Biolume
*** tcp:sci3-dmo1:14002
*** Actions
*** Status (?)
**** Not tested yet
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status (/)
**** Driver passes basic functional test
** imagenex
** Gulper
*** no linux driver currently available (should be a simple 'fire' command)
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113955</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179441</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; TODO:&nbsp; TM to mod auv-pkgs in cvs to add omniORB.cfg file for mvc-debian.
* Navigation drivers (first priority)
** ashtec(gps)
*** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status (+) &nbsp;
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
** bluefinBatt
*** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
*** Status (-) &nbsp;
**** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
*** ./crossbow \-dev /dev/ttyS11
*** Status (-) &nbsp;
**** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
** parosci \-&nbsp; Paroscientific pressure sensor
*** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
*** ./parosci \-dev /dev/ttyS4
*** Status (-)
**** In progress...&nbsp;&nbsp; Getting an error from CORBA "unable to ping service worksite"...
** sonardyne
*** No test executable available
** tailcone
*** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
*** ./tailcone \-dev /dev/ttyS2
*** Cautions:
**** Recommend running tailcone tests while observing the tailcone
**** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
*** Status (/)
**** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
** Teledyne dvl
*** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
*** Actions
**** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Status (-)
**** In progress...&nbsp;&nbsp; Getting an error from CORBA "unable to ping service worksite"...
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status (/)
**** Driver passes basic functional test.
** Biolume
*** tcp:sci3-dmo1:14002
*** Actions
*** Status (?)
**** Not tested yet
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status (/)
**** Driver passes basic functional test
** imagenex
** Gulper
*** no linux driver currently available (should be a simple 'fire' command)
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113956</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179443</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; TODO:&nbsp; TM to mod auv-pkgs in cvs to add omniORB.cfg file for mvc-debian.
* Navigation drivers (first priority)
** ashtec(gps)
*** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status (+) &nbsp;
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
** bluefinBatt
*** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
*** Status (-) &nbsp;
**** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
*** ./crossbow \-dev /dev/ttyS11
*** Status (-) &nbsp;
**** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
** parosci \-&nbsp; Paroscientific pressure sensor
*** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
*** ./parosci \-dev /dev/ttyS4
*** Status (-)
**** In progress...&nbsp;&nbsp; Getting an error from CORBA "unable to ping service worksite"...
** sonardyne
*** No test executable available
** tailcone
*** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
*** ./tailcone \-dev /dev/ttyS2
*** Cautions:
**** Recommend running tailcone tests while observing the tailcone
**** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
*** Status (/)
**** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
** Teledyne dvl
*** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
*** Actions
**** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Status (-)
**** In progress...&nbsp;&nbsp; Getting an error from CORBA "unable to ping service worksite"...
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status (/)
**** Driver passes basic functional test.
** Biolume
*** tcp:sci3-dmo1:14002
*** Actions
*** Status (?)
**** Not tested yet
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status (/)
**** Driver passes basic functional test
** imagenex
** Gulper
*** no linux driver currently available (should be a simple 'fire' command)
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113958</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">873</id>
<property name="body"><![CDATA[h2. About Subversion

SVN (Subversion) is a tool used by many software developers to manage changes within their source code tree. SVN provides the means to store not only the current version of a piece of source code, but a record of all changes (and who made those changes) that have occurred to that source code. Use of SVN is particularly common on projects with multiple developers, since SVN ensures changes made by one developer are not accidentally removed when another developer posts their changes to the source tree.

In order to access a Subversion repository, you must install a special piece of software called a Subversion client. Subversion clients are available for most any operating system. Information about the official subversion client can be found at [http://subversion.tigris.org/]. Excellent documentation on using Subversion can be found at [http://svnbook.red-bean.com/]

h2. Subversion Access

This project's Subversion repository can be checked out through SVN with the following instruction set:

{{svn co ssh+svn://kahuna.shore.mbari.org/svn/repos/TREX TREX}}

{warning:title=Warning}This is a generic Subversion checkout command which will pull all modules, tags and/or branches of the project. In most cases, you will want to add '/trunk' to the SVN URL above to check out only trunk (main development line).{warning}
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">876</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179445</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; TODO:&nbsp; TM to mod auv-pkgs in cvs to add omniORB.cfg file for mvc-debian.
* Navigation drivers (first priority)
** ashtec(gps)
*** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status (+) &nbsp;
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
** bluefinBatt
*** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
*** Status (-) &nbsp;
**** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
*** ./crossbow \-dev /dev/ttyS11
*** Status (-) &nbsp;
**** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
** parosci \-&nbsp; Paroscientific pressure sensor
*** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
*** ./parosci \-dev /dev/ttyS4
**** wait a while for 'ping service worksite' to timeout
*** Actions:
**** added parosci.cfg to auv-linux/onboard/sampleConfig
**** &nbsp;
*** Status (-)
**** In progress...&nbsp;&nbsp; Getting an error "Failed to read serial number"
***** 06:43:56.058 DEBUG \[Parosci\] parsed PR (30) and TempInterval (10)
06:43:56.066 DEBUG \[SerialDevice\] Current ispeed setting: 13
***** 06:43:56.068 DEBUG \[SerialDevice\] Current ospeed setting: 13
***** 06:43:56.070 DEBUG \[SerialDevice\] change to speed setting 9600
***** 06:43:56.072 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:43:56.074 ERROR \[SerialDevice\] cfsetospeed() failed
06:43:56.075 DEBUG \[SerialDevice\] New ispeed setting: 13
***** 06:43:56.077 DEBUG \[SerialDevice\] New ospeed setting: 13
***** 06:43:56.079 DEBUG \[SerialDevice\] SerialDevice: done...
***** 06:43:56.200 ERROR \[Parosci\] Failed to read serial number
06:43:56.204 ERROR \[AuvService\] Failed to read serial numbre
06:46:15.026 DEBUG \[AuvService\] AuvService::signalHandler() - call cleanup()
** sonardyne
*** No test executable available
** tailcone
*** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
*** ./tailcone \-dev /dev/ttyS2
*** Cautions:
**** Recommend running tailcone tests while observing the tailcone
**** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
*** Status (/)
**** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
** Teledyne dvl
*** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
*** Actions
**** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Status (-)
**** In progress...&nbsp;&nbsp;
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
*** Actions:
*** Status (-)
**** In progress...&nbsp; getting and error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD att
ributes file "tcp:sci1-dmo1:10002"
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status (/)
**** Driver passes basic functional test.
** Biolume
*** tcp:sci3-dmo1:14002
*** Actions
*** Status (?)
**** Not tested yet
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status (/)
**** Driver passes basic functional test
** imagenex
** Gulper
*** no linux driver currently available (should be a simple 'fire' command)
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
Debian Linux Setup (todo):

* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** chmod 777 /dev/ttyS\*
* Investigate update to newer kernel (2.6.23 recommended)
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne
*** 06:49:34.623 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
06:49:34.625 ERROR \[SerialDevice\] cfsetospeed() failed
06:49:34.627 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:49:34.629 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:49:34.631 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:49:34.632 INFO \[TeledyneDvl\] initialize - Baud rate set to 38400.
*** 06:49:34.635 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 8 chars: EX10011
06:49:34.637 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:34.640 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.642 DEBUG \[SerialDevice\] readUntil: read C
06:49:34.644 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3994
*** 06:49:34.646 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.648 DEBUG \[SerialDevice\] readUntil: read B
06:49:34.650 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3987
*** 06:49:34.652 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.654 DEBUG \[SerialDevice\] readUntil: read 6
06:49:34.656 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3982
*** 06:49:34.658 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.660 DEBUG \[SerialDevice\] readUntil: read 1
06:49:34.662 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3976
*** 06:49:34.664 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.666 DEBUG \[SerialDevice\] readUntil: read 1
06:49:34.667 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3970
*** 06:49:34.670 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.672 DEBUG \[SerialDevice\] readUntil: read
06:49:34.673 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3964
*** 06:49:34.676 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.677 DEBUG \[SerialDevice\] readUntil: read
*** 06:49:34.679 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3958
*** 06:49:34.682 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.683 DEBUG \[SerialDevice\] readUntil: read >
06:49:34.685 DEBUG \[SerialDevice\] readUntil: succeeded in 48 msec
*** 06:49:34.687 INFO \[TeledyneDvl\] CB611
>
06:49:34.689 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 9 chars: EA+04500
06:49:34.692 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:34.694 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.696 DEBUG \[SerialDevice\] readUntil: read O
06:49:34.698 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3993
*** 06:49:34.701 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.703 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.705 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3986
*** 06:49:34.707 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.709 DEBUG \[SerialDevice\] readUntil: read B
06:49:34.711 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3980
*** 06:49:34.713 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.715 DEBUG \[SerialDevice\] readUntil: read J
06:49:34.717 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3974
*** 06:49:34.719 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.721 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.723 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3969
*** 06:49:34.725 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.727 DEBUG \[SerialDevice\] readUntil: read O
06:49:34.728 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3963
*** 06:49:34.731 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.733 DEBUG \[SerialDevice\] readUntil: read o
06:49:34.734 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3957
*** 06:49:34.736 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.738 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.740 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3951
*** 06:49:34.742 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.744 DEBUG \[SerialDevice\] readUntil: read c
06:49:34.746 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3945
*** 06:49:34.748 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.750 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.752 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3939
*** 06:49:34.755 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.757 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.759 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3933
*** 06:49:44.058 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:49:44.059 DEBUG \[SerialDevice\] readUntil: read
06:49:44.060 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 12 bytes read.
*** 06:49:44.061 ERROR \[TeledyneDvl\] O?BJ?Oo?c??
06:49:44.062 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent EA+04500. Recei
ved O?BJ?Oo?c??.
*** 06:49:44.062 ERROR \[TeledyneDvl\] initialize - Error setting command EA+04500.
*** 06:49:44.064 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 7 chars: WP0001
06:49:44.065 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:44.067 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.068 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.069 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3995
*** 06:49:44.071 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.072 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.072 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3992
*** 06:49:44.075 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.076 DEBUG \[SerialDevice\] readUntil: read B
06:49:44.077 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3988
*** 06:49:44.078 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.079 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.079 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3985
*** 06:49:44.080 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.081 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.083 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3981
*** 06:49:58.182 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:49:58.183 DEBUG \[SerialDevice\] readUntil: read
06:49:58.184 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 6 bytes read.
*** 06:49:58.185 ERROR \[TeledyneDvl\] ??B??
06:49:58.186 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent WP0001. Receive
d ??B??.
*** 06:49:58.187 ERROR \[TeledyneDvl\] initialize - Error setting command WP0001.
*** 06:49:58.188 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 5 chars: WN25
06:49:58.189 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:58.191 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.192 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.192 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3997
*** 06:49:58.195 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.197 DEBUG \[SerialDevice\] readUntil: read N
06:49:58.199 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3990
*** 06:49:58.201 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.203 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.205 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3984
*** 06:49:58.207 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.209 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.211 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3979
*** 06:49:58.213 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.215 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.217 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3973
*** 06:50:11.518 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:50:11.519 DEBUG \[SerialDevice\] readUntil: read
06:50:11.520 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 6 bytes read.
*** 06:50:11.521 ERROR \[TeledyneDvl\] ?N???
06:50:11.523 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent WN25. Received
?N???.
*** 06:50:11.524 ERROR \[TeledyneDvl\] initialize - Error setting command WN25.
*** 06:50:11.525 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 06:50:11.526 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 6 chars: WV210
06:50:11.527 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:50:11.531 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.531 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.532 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3995
*** 06:50:11.533 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.535 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.536 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3991
*** 06:50:11.537 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.538 DEBUG \[SerialDevice\] readUntil: read 2
06:50:11.539 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3988
*** 06:50:11.540 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.541 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.541 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3986
*** 06:50:11.544 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.545 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.546 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3982
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113960</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">871</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development
[Linux Port]

h2. Meeting Minutes
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">874</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">870</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development
[Linux Port]

h2. Meeting Minutes
[2007-02-02 Autonomy project|2007-02-02 Minutes]
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">873</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179447</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:thingsToDo}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; TODO:&nbsp; TM to mod auv-pkgs in cvs to add omniORB.cfg file for mvc-debian.
* Navigation drivers (first priority)
** ashtec(gps)
*** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status (+) &nbsp;
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
** bluefinBatt
*** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
*** Status (-) &nbsp;
**** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
*** ./crossbow \-dev /dev/ttyS11
*** Status (-) &nbsp;
**** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
** parosci \-&nbsp; Paroscientific pressure sensor
*** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
*** ./parosci \-dev /dev/ttyS4
**** wait a while for 'ping service worksite' to timeout
*** Actions:
**** added parosci.cfg to auv-linux/onboard/sampleConfig
**** &nbsp;
*** Status (-)
**** In progress...&nbsp;&nbsp; Getting an error "Failed to read serial number"
***** 06:43:56.058 DEBUG \[Parosci\] parsed PR (30) and TempInterval (10)
06:43:56.066 DEBUG \[SerialDevice\] Current ispeed setting: 13
***** 06:43:56.068 DEBUG \[SerialDevice\] Current ospeed setting: 13
***** 06:43:56.070 DEBUG \[SerialDevice\] change to speed setting 9600
***** 06:43:56.072 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:43:56.074 ERROR \[SerialDevice\] cfsetospeed() failed
06:43:56.075 DEBUG \[SerialDevice\] New ispeed setting: 13
***** 06:43:56.077 DEBUG \[SerialDevice\] New ospeed setting: 13
***** 06:43:56.079 DEBUG \[SerialDevice\] SerialDevice: done...
***** 06:43:56.200 ERROR \[Parosci\] Failed to read serial number
06:43:56.204 ERROR \[AuvService\] Failed to read serial numbre
06:46:15.026 DEBUG \[AuvService\] AuvService::signalHandler() - call cleanup()
** sonardyne
*** No test executable available
** tailcone
*** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
*** ./tailcone \-dev /dev/ttyS2
*** Cautions:
**** Recommend running tailcone tests while observing the tailcone
**** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
*** Status (/)
**** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
** Teledyne dvl
*** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
*** Actions
**** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Status (-)
**** In progress...&nbsp;&nbsp;
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
*** Actions:
*** Status (-)
**** In progress...&nbsp; getting and error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD att
ributes file "tcp:sci1-dmo1:10002"
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status (/)
**** Driver passes basic functional test.
** Biolume
*** tcp:sci3-dmo1:14002
*** Actions
*** Status (?)
**** Not tested yet
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status (/)
**** Driver passes basic functional test
** imagenex
** Gulper
*** no linux driver currently available (should be a simple 'fire' command)
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** chmod 777 /dev/ttyS\*
* Investigate update to newer kernel (2.6.23 recommended)
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne
*** 06:49:34.623 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
06:49:34.625 ERROR \[SerialDevice\] cfsetospeed() failed
06:49:34.627 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:49:34.629 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:49:34.631 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:49:34.632 INFO \[TeledyneDvl\] initialize - Baud rate set to 38400.
*** 06:49:34.635 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 8 chars: EX10011
06:49:34.637 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:34.640 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.642 DEBUG \[SerialDevice\] readUntil: read C
06:49:34.644 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3994
*** 06:49:34.646 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.648 DEBUG \[SerialDevice\] readUntil: read B
06:49:34.650 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3987
*** 06:49:34.652 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.654 DEBUG \[SerialDevice\] readUntil: read 6
06:49:34.656 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3982
*** 06:49:34.658 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.660 DEBUG \[SerialDevice\] readUntil: read 1
06:49:34.662 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3976
*** 06:49:34.664 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.666 DEBUG \[SerialDevice\] readUntil: read 1
06:49:34.667 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3970
*** 06:49:34.670 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.672 DEBUG \[SerialDevice\] readUntil: read
06:49:34.673 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3964
*** 06:49:34.676 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.677 DEBUG \[SerialDevice\] readUntil: read
*** 06:49:34.679 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3958
*** 06:49:34.682 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.683 DEBUG \[SerialDevice\] readUntil: read >
06:49:34.685 DEBUG \[SerialDevice\] readUntil: succeeded in 48 msec
*** 06:49:34.687 INFO \[TeledyneDvl\] CB611
>
06:49:34.689 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 9 chars: EA+04500
06:49:34.692 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:34.694 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.696 DEBUG \[SerialDevice\] readUntil: read O
06:49:34.698 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3993
*** 06:49:34.701 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.703 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.705 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3986
*** 06:49:34.707 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.709 DEBUG \[SerialDevice\] readUntil: read B
06:49:34.711 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3980
*** 06:49:34.713 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.715 DEBUG \[SerialDevice\] readUntil: read J
06:49:34.717 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3974
*** 06:49:34.719 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.721 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.723 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3969
*** 06:49:34.725 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.727 DEBUG \[SerialDevice\] readUntil: read O
06:49:34.728 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3963
*** 06:49:34.731 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.733 DEBUG \[SerialDevice\] readUntil: read o
06:49:34.734 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3957
*** 06:49:34.736 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.738 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.740 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3951
*** 06:49:34.742 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.744 DEBUG \[SerialDevice\] readUntil: read c
06:49:34.746 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3945
*** 06:49:34.748 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.750 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.752 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3939
*** 06:49:34.755 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.757 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.759 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3933
*** 06:49:44.058 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:49:44.059 DEBUG \[SerialDevice\] readUntil: read
06:49:44.060 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 12 bytes read.
*** 06:49:44.061 ERROR \[TeledyneDvl\] O?BJ?Oo?c??
06:49:44.062 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent EA+04500. Recei
ved O?BJ?Oo?c??.
*** 06:49:44.062 ERROR \[TeledyneDvl\] initialize - Error setting command EA+04500.
*** 06:49:44.064 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 7 chars: WP0001
06:49:44.065 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:44.067 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.068 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.069 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3995
*** 06:49:44.071 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.072 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.072 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3992
*** 06:49:44.075 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.076 DEBUG \[SerialDevice\] readUntil: read B
06:49:44.077 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3988
*** 06:49:44.078 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.079 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.079 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3985
*** 06:49:44.080 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.081 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.083 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3981
*** 06:49:58.182 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:49:58.183 DEBUG \[SerialDevice\] readUntil: read
06:49:58.184 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 6 bytes read.
*** 06:49:58.185 ERROR \[TeledyneDvl\] ??B??
06:49:58.186 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent WP0001. Receive
d ??B??.
*** 06:49:58.187 ERROR \[TeledyneDvl\] initialize - Error setting command WP0001.
*** 06:49:58.188 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 5 chars: WN25
06:49:58.189 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:58.191 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.192 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.192 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3997
*** 06:49:58.195 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.197 DEBUG \[SerialDevice\] readUntil: read N
06:49:58.199 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3990
*** 06:49:58.201 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.203 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.205 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3984
*** 06:49:58.207 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.209 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.211 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3979
*** 06:49:58.213 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.215 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.217 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3973
*** 06:50:11.518 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:50:11.519 DEBUG \[SerialDevice\] readUntil: read
06:50:11.520 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 6 bytes read.
*** 06:50:11.521 ERROR \[TeledyneDvl\] ?N???
06:50:11.523 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent WN25. Received
?N???.
*** 06:50:11.524 ERROR \[TeledyneDvl\] initialize - Error setting command WN25.
*** 06:50:11.525 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 06:50:11.526 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 6 chars: WV210
06:50:11.527 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:50:11.531 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.531 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.532 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3995
*** 06:50:11.533 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.535 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.536 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3991
*** 06:50:11.537 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.538 DEBUG \[SerialDevice\] readUntil: read 2
06:50:11.539 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3988
*** 06:50:11.540 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.541 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.541 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3986
*** 06:50:11.544 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.545 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.546 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3982
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113962</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">869</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development
[Linux Port]

h2. [Meeting Minutes]
[2007-02-02 Autonomy project|2007-02-02 Minutes]
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">872</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">868</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development
[Linux Port]

h2. [Meeting Minutes]
[2007-02-02 Autonomy project|2007-02-02 Minutes]
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">871</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">867</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development
[Linux Port]

h2. [Meeting Minutes]
[2007-02-02 Minutes]
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">870</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">855</id>
<property name="body"><![CDATA[* Tom strongly urged we use Corba as a mechanism to communicate between AMC and VCS (i.e current Layerd Control software).&nbsp; General agreement on its use, and its dependancy on a Linux port of the Layerd Control system was noted.
** There will likely be an ORB which will be on the MVC and AMC/autonomy will connect to it.
** Some complexity will increase with use of CORBA; however debugging is less of an issue since will have a similar issue with sockets.
** Determined that sockets or CORBA implementation is less of a mainline design issue for the autonomy work. We'll leverage off of whatever is appropriate. We have a possible April simple deployment test for the autonomy for which end of Feb. for testing the communication protocol between the AMC and MVC is important.

* Question:When does the VCS know to expect next behavior from the AMC?
** First VCS sends AMC a completion message (akin to SUCCESS, FAILURE)
** VCS will trigger an IDLE state for a *{+}fixed time-period{+}* (which is parameterized?). An IDLE is a quiescent behavior which will likely shut off the prop and ensure vehicle is not making any changes.
** AMC will recieve VCS status and send off *next* commmand to VCS.
** Meanwhile, also, AMC will expect results of behavior execution to be sent by VCS via a state update.
** Frederic suggested that one can send two following behaviors so AUV knows what is coming up. Problem with that is that these following behaviors might need to retracted. Even if AMC send's earliest end time that doesn't tell VCS what to do next.
* Rich and Rob are working on how to publish state to the AMC; currently designed the core representation which Conor will be able to use to compile into an agent on the AMC side.
** They are still working on the task to stick a behavior on the command stack.
** Setpoint (tells vehicle to run with a command heading angle or depth) is the first behavior to be implemented by Rob & Rich.
* Hans has H/w is bolted up in lab.
** Will build up Red Hat today.
** Then will put on the Net to be able to see if additional packages needed by a test compilation.
** Conor will drop EUROPA inside the stack for such a test compile.
* Clarified that the entire mission script is being run from AMC
** Instead of reading from a Mission Script, VCS will get the tokens corresponding to the script contents from the AMC
* What do we need when AMC initializes?&nbsp;
** look at begining of exisiting mission scripts; Frederic should have copies
** Primarily, depth envelope and mission timer info needs to be sent over to VCS.
* AMC autonomy code (now called '*{_}T-REX{_}*' for "_Teleo-reactive EXecutive_") will migrate to +Subversion+ on Brian's initiative. We'll us same repository as Brian; will need clients for Mac's and Linux.

From the 2/2 meeting notes, the overal scope of what actually needs to be done, corrsponds to the following:

*{+}Do be done{+}*:
* Behavior stack control

## start
## stop
## active status
## termination mode&nbsp;

* More parameters to be exposed from the MVC to the AMC

* For initialization, the AMC needs to send over following information over to the VCS:

## Timer&nbsp;&nbsp;&nbsp;&nbsp;
## depth envelope

* Need to implement an IDLE behavior to ensure that VCS doesn't summarily trigger an abort. One other possible behavior is a "Hang out" behavior when coming early to a waypoint
* Initiate hard abort

&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">858</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179398</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

Driver porting and validation
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
*** /dev/ser7
*** 9600 8N1
** bluefinBatt
*** /dev/ser10
** crossbow
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status
**** Basic functional
** Biolume
*** tcp:sci3-dmo1:14002
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status
**** Basic functional
** imagenex
* Other (from QNX cfg file)
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** dropWeightServer \-dev /dev/ser13
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** &nbsp;
*** || Parm || Description || Range (FUL) || Range (STD) ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | |
| c3 | Latitude sector | N or S | |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | |
| c5 | Longitude sector | E or W | |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | |
| d7 | Number of satellites used in position computation | 3 to 14 | |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | |
| c10 | Altitude unit of measure (always M) | M | |
| d11 | Geoidal separation value | \-999.99 to 999.99 | |
| c12 | Geoidal separation unit of measure (always M) | M | |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | |
| d14 | Differential base station ID number | 0 to 1023 | |
| hh | Checksum | 2-character hex | |
| | | | |
\\
** AshtecApp Test results
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113913</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8945674</id>
<property name="body"><![CDATA[h1. AUV Wiki


h2. Development

[Linux Port]
[Source Code]
[AUV Linux - Driver Port and Validation]
[AUV Build and Test Server Setup]\\

h2. Meeting Minutes

[2007-03-26 Autonomy project|Minutes from 2007-03-26--Status meeting on AUV Deliberative Autonomy project]
[2007-03-19 Autonomy project|Minutes from 2007-03-19--Status meeting on AUV Deliberative Autonomy project]
[2007-03-05 Autonomy project|Minutes from 2007-03-05--Status meeting on AUV Deliberative Autonomy project]
[2007-02-20 Autonomy project|Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]

h2. Miscellaneous

[MATLAB Tools]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912906</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179396</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

Driver porting and validation
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
*** /dev/ser7
*** 9600 8N1
** bluefinBatt
*** /dev/ser10
** crossbow
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status
**** Basic functional
** Biolume
*** tcp:sci3-dmo1:14002
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status
**** Basic functional
** imagenex
* Other (from QNX cfg file)
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** dropWeightServer \-dev /dev/ser13
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:2401/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** &nbsp;
*** || Parm || Description || Range (FUL) || Range (STD) ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | |
| c3 | Latitude sector | N or S | |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | |
| c5 | Longitude sector | E or W | |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | |
| d7 | Number of satellites used in position computation | 3 to 14 | |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | |
| c10 | Altitude unit of measure (always M) | M | |
| d11 |  Geoidal separation value |  \-999.99 to 999.99 | |
|  c12 |  Geoidal separation unit of measure (always M) |  M | |
|  d13 |  Age of differential corrections (seconds) |  0 to 999.999 | |
|  d14 |  Differential base station ID number |  0 to 1023 | |
|  hh |  Checksum |  2-character hex | |
| | | | |
\\
** AshtecApp Test results
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113911</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8945673</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912905</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179402</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

Driver porting and validation
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
*** /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status:
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.
** bluefinBatt
*** /dev/ser10
** crossbow
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status
**** Basic functional
** Biolume
*** tcp:sci3-dmo1:14002
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status
**** Basic functional
** imagenex
* Other (from QNX cfg file)
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** dropWeightServer \-dev /dev/ser13
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113917</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">852</id>
<property name="body"><![CDATA[Feb 2/2 meeting notes from [~kanna]:

1. Two separate connections 
	one for state
	other for commands
	these have subsequently been deemed to be bidirectional
	
2. Read the mission configuration script as it is; the structure is
{code}
	ID#
	behaviour {
		keywod = value;
	....
	}
{code}
	with the last token being most important

3. Tokens are placed on a linked list executed on a 200 ms control loop

4. We will need to modify the VCS (Vehicle Control System) s/w which nominally reads mission script; instead needs to get commands one at a time from the socket connection."Layered control" reads in mission file, converts to objects and sets up 200ms loop now instead of reading, it sets up a socket connection. Commands/requests to be as strings which can be handled with existing parser on the VCS side. See attached figure on VCS and AMC.

5. Adaptive Mission Controller has 3 functions
	1. create behavior
	2. destroy behavior
	3. behavior "done"

6. When a behavior terminates, then it will need to tell the AMC of its termination. All behaviour have a timeout
	- lots of constants in the behaviors; how do we bring that data over to the AMC without redundancy?
	- some parameters are hard-coded; we will need to parameterize them on the MVC side
	- real need of information about the achievement {{SUCCESS, FAILED, TIMEOUT}}
	- at initialization the AMC will send safety behavior parameters
	- important if no behavior left then abort we need to be aware about that and react accordingly -> We will need an IDLE behavior

7. Aborting a mission will be based on what the AMC sees. Do so by ensuring no tokens on are on the behavior stack.

8. Have  a loop back to test the path between the MVC and AMC. Use "setpoint"  (tells vehicle to run with a command heading angle or depth). Can test with a simulator.
	init behavior
	get state back

9. State ought to be in binary form to handle the quantity of data coming back.

10. From a timing perspective, call to a behavior can be blocked on the AMC's side since a single 'tick' inside the AMC could be longer than 200ms. Blocking on MVC will happen to a max of 200ms and will return when a behavior is spawned. If the behavior does not come back within 400ms , then there is a problem on the MVC and so abort the entire mission

11. Who does what/when; Baseline integration:
	AMC - init for timer and depth envelope
		- activate set point behaviour 
		- obtain state information with telemetry
		- client adaptor implementation
		- "exec" to invoke client
	MVC - set up socket connections
		- stub out behavior connection
		- taking the string and putting it onto the stack
		- get the stack to execute (different from current, since entire mission script is run)
		- run all the code on a QNX box by 7th
		- telemetry process Rob M
		
12. To start the AMC it might be done with a script while logging in as is currently done in AUV Ops. H/w in loop test in March; attempt to do at-sea tests beginning of April.

13. We will meet every week regularly Monday morning 10am for a quick half hour in Surface Commons. 

14. Rob telemetry: grab data from Layered Control and send chunks of it to AMC;
      Rich H: modify layered control to take commands and modify the command stack
      Hans: AMC h/w bolted on AUV by 2/15 (CTD is inhouse for next 2 weeks so Hans can integrate)



]]></property>
<property name="content" class="Comment" package="com.atlassian.confluence.pages"><id name="id">855</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">853</id>
<property name="body"><![CDATA[h1. Minutes from 2007-02-02: Introducing Autonomy Behaviors in the AUV's

h2. Notes
!AMC Overview.png!
* We need to know the state of behavior completion
** timed-out
** running
** failed
** success

* Some behaviors will not be modifiable by the AMC (such as depth envelope)

* LayeredControl.cpp reads mission file. New LayeredControl will have socket interface so behaviors can be serialized to AMC.
** LayeredControl methods to be added:
*** create behavior
*** destroy behavior
*** behavior done
*** query behavior (by id)
** Behavior needs a flag to indicate if it's running.

* Behvior stack is currently built with mission.cfg. A behavior is turned into an object. Each behavior object has an execute method. The execute method can not block. These behaviors are stored into a linked list which is walked every 200ms.
{code}behavior1 {
  name = value
  ... <-- Last token has highest priority
}
behavior2 {
 name = value
 ...
}{code}



h2. TODO
# Behavior stack control (and an abort stack)
#* start
#* stop
#* status
#* termination mode
# More parameters exposed
# Initialization
#* timer
#* depth envelope
# Need to specify a dummy behavior (i.e. idle; it just turns off the prop). So that the AUV can float if the AMC is thinking and no behavior is currently running.
# We need a hang out behavior so tha the AUV can hover underwater waiting for pickup.

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">856</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179400</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

Driver porting and validation
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
*** /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
** bluefinBatt
*** /dev/ser10
** crossbow
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status
**** Basic functional
** Biolume
*** tcp:sci3-dmo1:14002
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status
**** Basic functional
** imagenex
* Other (from QNX cfg file)
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** dropWeightServer \-dev /dev/ser13
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 |  , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113915</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179406</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

Driver porting and validation
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
*** /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status:
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.
** bluefinBatt
*** /dev/ser10
*** Status:
**** Not functional.&nbsp;&nbsp; Unable to establish serial connection - tried ./bluefinBatt \-n 3 \-dev /dev/ttySn (where n is 7, 8, 9, 10, 11), also tried ./bluefinBatt \-dev /dev/ttySN
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
*** ./crossbow \-dev /dev/ttyS11
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status
**** Basic functional
** Biolume
*** tcp:sci3-dmo1:14002
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status
**** Basic functional
** imagenex
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113921</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">865</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development
[Linux Port]

h2. Minutes
[2007-02-02 Minutes]
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">868</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179404</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

Driver porting and validation
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
*** /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status:
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.
** bluefinBatt
*** /dev/ser10
*** Status:
**** Not functional.&nbsp;&nbsp; Unable to establish serial connection - tried ./bluefinBatt \-n 3 \-dev /dev/ttySn (where n is 7, 8, 9, 10, 11)
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status
**** Basic functional
** Biolume
*** tcp:sci3-dmo1:14002
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status
**** Basic functional
** imagenex
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113919</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">840</id>
<property name="body"><![CDATA[h2. Overview
In 2007, the AUV operations group intends to port the AUV control software from QNX to Linux. We currently have 2 ARM boards that run Debian linux for development.

h2. Notes
[~oreilly] is interested in porting the IDL code to a Linux Corba ORB
[~brian] will be working on the port later this year.
Here's a list of [Missing Headers]

[~brent] has suggested that we use the same ARM-9 hardware as ESP for the AUV port. He has a Linux port that's designed to run headless, auto-connects to the network, boots fast, runs in 4 MB. (i.e. Talk to [~brent]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">843</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8945687</id>
<property name="body"><![CDATA[This page show a typical implementation of a reactor that connects TREX to an external system. To illustrate this I have taken the VCSAdapter  class that provide a connection to AUV Linux system using socket connection. The code  here can be found under TREX/ctd2007

h2. Reactor expected interface

{code:title=VCSAdapter.hh}
#ifndef H_VCSAdapter
#define H_VCSAdapter

# include "Adapter.hh"

namespace TREX {

  /** @brief Linux Interface to VCS and StatePublisher
   *
   * This class implenments a TREX reactor that provides a connection
   * to VcsServer and StatePublisher.
   *
   * @author Frederic Py <fpy@mbari.org>
   */
  class VCSAdapter: public Adapter {
  public:
    /** @brief Constructor
     *
     * This consdtructor is usually called by the factory that manages
     * configuration parsing
     *
     * @param agentName Name of the agent that will execute this reactor.
     * @param confgData CXonfiguration data for this reactor
     */
    VCSAdapter(LabelStr const &agentName, TiXmlElement const &configData);
    /** @brief Destructor
     */
    ~VCSAdapter();

    /** @brief handle agent initialization signal.
     *
     * This callback is called to indicate to reactors that the agent wait for
     * them to initialize.
     * In this case this is where TREX is initailizing the connections to
     * VCS and wait for feedback from the VCS to be ready to start the misssion.
     *
     * @param initialTick value of the initial tick (usually 0)
     * @param serversByTimeline mapping from timeline name to the connection to its owner
     * @param observer reference to the place where observation of thi reactor should be sent to 
     */
    void handleInit(TICK initialTick, std::map<double, ServerId> const &serversByTimeline, 
		    ObserverId const &observer);
    /** @brief Obsservation production 
     *
     * For uch a reactor this method is called while the agent ex-pect the reactort to produce its new
     * observations. In this case this is whaen the reactor collect all the informations sent from VCS and convert it in
     * @c Observations
     *
     * @retval true if no specific problem
     * @retval false in case of a critical issue
     */
    bool synchronize();
    /** @brief Signal sent  by the agent  to indicate that a new tick has been started
     */
    void handleTickStart();
    /** @brief Notification of a new observation coming from an external agent
     *
     * @note This hould never happen with this reactor as it does not obsserve anything in the agent	
     */
    void notify(Observation const &obs);    
    /** @brief Notification of a goal request
     *
     * This method indicate a new objective received fromn anopther reactor. In the case of this reactor
     * this goal is generally reflecting the execution of a new behavior.
     *
     * @param goal The objective as requested by the reactor
     */
    void handleRequest(GoalId const &goal);
    /** @brief Notification of a goal recall
     *
     * This method indicate to the reactor that a previously requested objective
     * is not part of the plan anymore and should -- if possible -- canceled. 
     *
     * @param goal The objective as requested by the reactor
     */
    void handleRecall(GoalId const &goal);
    
  private:
    /* Internal things specific to this reactor 
     */
    
  }; // TREX::VCSAdapter

} // TREX

#endif // H_VCSAdapter
{code}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912920</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">839</id>
<property name="body"><![CDATA[h2. Overview
In 2007, the AUV operations group intends to port the AUV control software from QNX to Linux. We currently have 2 ARM boards that run Debian linux for development.

h2. Notes
[~oreilly] is interested in porting the IDL code to a Linux Corba ORB
[~brian] will be working on the port later this year.
Here's a list of [Missing Headers]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">842</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">836</id>
<property name="body"><![CDATA[From [~rob]:
{quote}
These are probably QNX specific.  I'm looking now, and I've already found a few under /usr/watcom/10.6/usr/include.
{quote}]]></property>
<property name="content" class="Comment" package="com.atlassian.confluence.pages"><id name="id">839</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">835</id>
<property name="body"><![CDATA[h2. Missing Headers 

This page lists headers found in the sourcecode that are not found on Linux
conio.h
i86.h
process.h
sys/name.h
sys.kernel.h
sys/proxy.h
sys/psinfo.h
unix.h
/usr/include/syslog.h
sys/seginfo.h
sys/sched.h]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">838</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8945684</id>
<property name="body"><![CDATA[This page show a typical implementation of a reactor that connects TREX to an external system. To illustrate this I have taken the VCSAdapter  class that provide a connection to AUV Linux system using socket connection. The code  here can be found under TREX/ctd2007

h2. Reactor expected interface

{code:title=VCSAdapter.hh}
#ifndef H_VCSAdapter
#define H_VCSAdapter

# include <string>
# include <set>

# include "Adapter.hh"
# include "tcp_client.hh"
# include "udp_server.hh"

// From AUV 
# include "StatePacket.h"

namespace TREX {

  /** @brief Linux Interface to VCS and StatePublisher
   *
   * This class implenments a TREX reactor that provides a connection
   * to VcsServer and StatePublisher.
   *
   * @author Frederic Py <fpy@mbari.org>
   */
  class VCSAdapter: public Adapter {
  public:
    /** @brief Constructor
     *
     * This consdtructor is usually called by the factory that manages
     * configuration parsing
     *
     * @param agentName Name of the agent that will execute this reactor.
     * @param confgData CXonfiguration data for this reactor
     */
    VCSAdapter(LabelStr const &agentName, TiXmlElement const &configData);
    /** @brief Destructor
     */
    ~VCSAdapter();

    /** @brief handle agent initialization signal.
     *
     * This callback is called to indicate to reactors that the agent wait for
     * them to initialize.
     * In this case this is where TREX is initailizing the connections to
     * VCS and wait for feedback from the VCS to be ready to start the misssion.
     *
     * @param initialTick value of the initial tick (usually 0)
     * @param serversByTimeline mapping from timeline name to the connection to its owner
     * @param observer reference to the place where observation of thi reactor should be sent to 
     */
    void handleInit(TICK initialTick, std::map<double, ServerId> const &serversByTimeline, 
		    ObserverId const &observer);
    /** @brief Obsservation production 
     *
     * For uch a reactor this method is called while the agent ex-pect the reactort to produce its new
     * observations. In this case this is whaen the reactor collect all the informations sent from VCS and convert it in
     * @c Observations
     *
     * @retval true if no specific problem
     * @retval false in case of a critical issue
     */
    bool synchronize();
    /** @brief Signal sent  by the agent  to indicate that a new tick has been started
     */
    void handleTickStart();
    /** @brief Notification of a new observation coming from an external agent
     *
     * @note This hould never happen with this reactor as it does not obsserve anything in the agent	
     */
    void notify(Observation const &obs);    
    /** @brief Notification of a goal request
     *
     * This method indicate a new objective received fromn anopther reactor. In the case of this reactor
     * this goal is generally reflecting the execution of a new behavior.
     *
     * @param goal The objective as requested by the reactor
     */
    void handleRequest(GoalId const &goal);
    /** @brief Notification of a goal recall
     *
     * This method indicate to the reactor that a previously requested objective
     * is not part of the plan anymore and should -- if possible -- canceled. 
     *
     * @param goal The objective as requested by the reactor
     */
    void handleRecall(GoalId const &goal);
    
  private:
    /* Internal things specific to this reactor 
     */
    
  }; // TREX::VCSAdapter

} // TREX

#endif // H_VCSAdapter
{code}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912917</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179421</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

Driver porting and validation
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
*** /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status:
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.
** bluefinBatt
*** /dev/ser10
*** Status:
**** Not functional.&nbsp;&nbsp; Unable to establish serial connection - tried ./bluefinBatt \-n 3 \-dev /dev/ttySn (where n is 7, 8, 9, 10, 11), also tried ./bluefinBatt \-dev /dev/ttySN
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
*** ./crossbow \-dev /dev/ttyS11
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status
**** Basic functional
** Biolume
*** tcp:sci3-dmo1:14002
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status
**** Basic functional
** imagenex
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113936</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670113</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

Executive Summary:&nbsp;&nbsp;&nbsp; 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp; Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp; Navigation drivers are mostly&nbsp;functioning however a 'byte drop' problem is preventing long runs and is causing errors.&nbsp;&nbsp; Science drivers (Hydroscat, Seabird and Lisst) have been run on desktop machines but not exercised on the AUV.

\\
&nbsp;
* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] This is to fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp; An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;
*** \\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
*** parosci Paroscientific pressure sensor
\\
*** tailcone
\\
*** teledyne DVL
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
** TODO
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Device Emulation to insure regression test and code coverage of error handlers
\\
\\

Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;

Serial port infrastructure

SerTest test program

Code Review

Regression testing

PC104 stack with Xtreme104&nbsp;

Serial Device emulation for regression testing.
\\
\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637354</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8945691</id>
<property name="body"><![CDATA[This page show a typical implementation of a reactor that connects TREX to an external system. To illustrate this I have taken the VCSAdapter  class that provide a connection to AUV Linux system using socket connection. The code  here can be found under TREX/ctd2007

h2. Reactor expected interface

{code:title=VCSAdapter.hh}
#ifndef H_VCSAdapter
#define H_VCSAdapter

# include "Adapter.hh"

namespace TREX {

  /** @brief Linux Interface to VCS and StatePublisher
   *
   * This class implenments a TREX reactor that provides a connection
   * to VcsServer and StatePublisher.
   *
   * @author Frederic Py <fpy@mbari.org>
   */
  class VCSAdapter: public Adapter {
  public:
    /** @brief Constructor
     *
     * This consdtructor is usually called by the factory that manages
     * configuration parsing
     *
     * @param agentName Name of the agent that will execute this reactor.
     * @param confgData CXonfiguration data for this reactor
     */
    VCSAdapter(LabelStr const &agentName, TiXmlElement const &configData);
    /** @brief Destructor
     */
    ~VCSAdapter();

    /** @brief handle agent initialization signal.
     *
     * This callback is called to indicate to reactors that the agent wait for
     * them to initialize.
     * In this case this is where TREX is initailizing the connections to
     * VCS and wait for feedback from the VCS to be ready to start the misssion.
     *
     * @param initialTick value of the initial tick (usually 0)
     * @param serversByTimeline mapping from timeline name to the connection to its owner
     * @param observer reference to the place where observation of thi reactor should be sent to 
     */
    void handleInit(TICK initialTick, std::map<double, ServerId> const &serversByTimeline, 
		    ObserverId const &observer);
    /** @brief Obsservation production 
     *
     * For uch a reactor this method is called while the agent ex-pect the reactort to produce its new
     * observations. In this case this is whaen the reactor collect all the informations sent from VCS and convert it in
     * @c Observations
     *
     * @retval true if no specific problem
     * @retval false in case of a critical issue
     */
    bool synchronize();
    /** @brief Signal sent  by the agent  to indicate that a new tick has been started
     */
    void handleTickStart();
    /** @brief Notification of a new observation coming from an external agent
     *
     * @note This hould never happen with this reactor as it does not obsserve anything in the agent	
     */
    void notify(Observation const &obs);    
    /** @brief Notification of a goal request
     *
     * This method indicate a new objective received fromn anopther reactor. In the case of this reactor
     * this goal is generally reflecting the execution of a new behavior.
     *
     * @param goal The objective as requested by the reactor
     */
    void handleRequest(GoalId const &goal);
    /** @brief Notification of a goal recall
     *
     * This method indicate to the reactor that a previously requested objective
     * is not part of the plan anymore and should -- if possible -- canceled. 
     *
     * @param goal The objective as requested by the reactor
     */
    void handleRecall(GoalId const &goal);
    
  private:
    /* Internal things specific to this reactor 
     */
    
  }; // TREX::VCSAdapter

} // TREX

#endif // H_VCSAdapter
{code}

h2. Declare a new reactor type to the factory

At the beginning of VCSAdapter.cc one can see

{code}
namespace TREX {
  namespace {
    DeclareReactor<VCSAdapter> decl("VCSAdapter");
  }
}
{code}

This static variable generate a new factory producer that will call the VCSAdapter constructor when it will identify a "VCSAdapter" configuration in the XZML file. For example the following xml file will trigger this :

{code:xml|name=amc.vcs.new.xml}
<Config>
	<!-- Use this component when running onboard -->
	<TeleoReactor name="vcs" component="VCSAdapter"/>

 	<TeleoReactor name="exec" component="DeliberativeReactor" 
		lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>

	<!-- Skipper has 10 Hour lookahead. -->
 	<TeleoReactor name="skipper" component="DeliberativeReactor" 
		lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg" />
</Config>
{code}

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912924</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179425</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; TODO:&nbsp; TM to mod auv-pkgs in cvs to add omniORB.cfg file for mvc-debian.
* Navigation drivers (first priority)
** ashtec(gps)
*** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status (+) &nbsp;
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.
** bluefinBatt
*** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
*** Status (-) &nbsp;
**** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
*** ./crossbow \-dev /dev/ttyS11
*** Status (-) &nbsp;
**** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
*** Status (/)
**** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status (/)
**** Driver passes basic functional test.
** Biolume
*** tcp:sci3-dmo1:14002
*** Actions
*** Status (?)
**** Not tested yet
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status (/)
**** Driver passes basic functional test
** imagenex
** Gulper
*** no linux driver currently available (should be a simple 'fire' command)
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113940</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179423</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
*** /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status:
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.
** bluefinBatt
*** /dev/ser10
*** Status:
**** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
*** ./crossbow \-dev /dev/ttyS11
*** Status:
**** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
*** Status:
**** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status
**** Driver passes basic functional test.
** Biolume
*** tcp:sci3-dmo1:14002
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status
**** Driver passes basic functional test/
** imagenex
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113938</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8945694</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
*  [TREX - installation] a quick guide on how to install and use TREX ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8912927</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645142</id>
<property name="body"><![CDATA[This page documents the engineering development for integration of Autonomy project research tasks into ODSS.  See _Engineering/technology development_ section in the [2012 Autonomy project proposal|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf] for background on this effort. 

[Requirements]
HAB Algorithm Flow Diagrams (click on thumbnail to enlarge)


 
{gliffy:name=HABs Automated  Human in the loop Algorithm Flow|space=AUV|page=Autonomy ODSS Integration|pageid=18579613|align=left|size=T}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579624</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645141</id>
<property name="body"><![CDATA[This page documents the engineering development for integration of Autonomy project research tasks into ODSS.  See _Engineering/technology development_ section in the [2012 Autonomy project proposal|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf] for background on this effort. 

[Requirements]
HAB Algorithm Flow Diagrams (click on thumbnail to enlarge)


 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579623</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645140</id>
<property name="body"><![CDATA[This page documents the engineering development for integration of Autonomy project research tasks into ODSS.  See _Engineering/technology development_ section in the [2012 Autonomy project proposal|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf] for background on this effort. 

Requirements
HAB Algorithm Flow Diagrams (click on thumbnail to enlarge)

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579622</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645139</id>
<property name="body"><![CDATA[h1. Requirements
h3. Last updated:  1.24.12

The following outlines requirements to support event-response research for the Distributed Autonomy project and integration of its components into the ODSS.  These requirements are also intended to support research on folksonomy classification based on tagging, and machine learning to identifying key features that best describe data and significant events from past and future CANON field experiments.      

This is very much a work-in-progress and intended as starting point for discussion.

h3. Visualization
* Tool to assist human in the loop labeling/tagging of events
Display trends to inform users  on prediction. What kind of trends ? What kinds of predictions ? How to best visualize these ? 
* User login capability in ODSS
* STOQS spatial temporal query for past experiments to mine data for model development and to ground truth data
 
h3. Data Format and Query

* Spatial temporal query of satellite images (SST, MODIS, etc.)  to mine data for model development and to ground truth data
* Data shall be stored in a format compatible with algorithm development (Matlab ?), as necessary for building models.
* Data shall be time-stamped and spatially referenced in a standard format as necessary for e.g. interpolation, subsampling, etc. 


h3. Data Storage

Database capable of storing:

*Annotator (user)*
* properties (name, title, etc.)
* probability (e.g. probability provided correct label)

*Class attributes*
* tags
* labels (binary, multivalued, or continuous)  
* confidence (e.g. definitely, guessing, probably, percent)

*Images*

*Model parameters*
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579621</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645146</id>
<property name="body"><![CDATA[This page documents the engineering development for integration of Autonomy project research tasks into ODSS.  See _Engineering/technology development_ section in the [2012 Autonomy project proposal|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf] for background on this effort. 

[Requirements]
HABs Algorithm Flow Diagrams (click on thumbnail to enlarge)
!human-in-loop workflow.png|thumbnail!
!projection workflow.png|thumbnail! 
 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579628</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645145</id>
<property name="body"><![CDATA[This page documents the engineering development for integration of Autonomy project research tasks into ODSS.  See _Engineering/technology development_ section in the [2012 Autonomy project proposal|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf] for background on this effort. 

[Requirements]
HABs Algorithm Flow Diagrams (click on thumbnail to enlarge)


 
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579627</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645143</id>
<property name="body"><![CDATA[This page documents the engineering development for integration of Autonomy project research tasks into ODSS.  See _Engineering/technology development_ section in the [2012 Autonomy project proposal|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf] for background on this effort. 

[Requirements]
HAB Algorithm Flow Diagrams (click on thumbnail to enlarge)


 
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579625</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645149</id>
<property name="body"><![CDATA[This page documents the engineering development for integration of Autonomy project research tasks into ODSS.  See _Engineering/technology development_ section in the [2012 Autonomy project proposal|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf] for background on this effort. 

[Requirements]
HABs Algorithm Flow Diagrams (click on thumbnail to enlarge)
!human-in-loop workflow.png|thumbnail!
!projection workflow.png|thumbnail! 
!detection workflow.png|thumbnail! 
 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579631</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8945771</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet

h2. Directory structure

For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
* PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h2. Initializing TREX environment variables

The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of 
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
The compilation of TREX core libraries is done similarly
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc 
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal. 
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
  ** amc.sim.cfg: self contained simulation. The VCS is simulated vi a reactor exploiting the model given in simulator.nddl
  ** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
  ** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
  ** amc.play.cfg: used to replay a mission for debugging purpose.
  ** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* *.solver.cfg: Europa configuration to tweak the plan solver for the given reactor. 
* *.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings *.exec.nddl *.skipper.nddl *.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_  on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
 Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the *processes.cfg to see if it starts correct processes including statePublisher

h2. Starting a mission

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.

{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* -v for being verbose
* -sim when in simulation (ie no HW in the loop)
{info} 

{code:none|title=On Linux}
% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* -proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* -fastsim indicates to vcsServer that it will run into linux fast simulation  
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info} 

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] [<nstep>]
{code}

{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}

{info:title=flags information}
* -fast indicates that the clock used would connect to auv-linux fast simulation clock
* -sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on -fast or -sim mode. 
{info} 

You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log

{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log 
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim|-fast] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
> 
{code}

You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick (n), etc commands R/+/-/! are used to manipulate how much data you want  on the Debug.log starting from now.



]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913008</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645147</id>
<property name="body"><![CDATA[This page will refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09
* [TREX Volume Survey Operations] procedure for operations group to start the TREX volume survey
* [Autonomy Deployment Log]

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [Monte-Carlo Testing guide|https://oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist-V13.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect
* [Autonomy Plans for 2010 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans10.pdf]
* [Autonomy Plans for 2011 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans11.pdf]
* [Autonomy Critical Events for 2011|https://oceana.mbari.org/confluence/download/attachments/8912901/Timeline-2011.jpg ]
* [Decision Support for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/CANON.pdf]
* [TREX and DSS Communication Protocol for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Comm-strategy.pdf]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579629</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">833</id>
<property name="body"><![CDATA[h2. Overview
In 2007, the AUV operations group intends to port the AUV control software from QNX to Linux. We currently have 2 ARM boards that run Debian linux for development.

h2. Notes
[~oreilly] is interested in porting the IDL code to a Linux Corba ORB
[~brian] will be working on the port later this year.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">836</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645153</id>
<property name="body"><![CDATA[h1. Overview
This page documents the engineering development for integration of Autonomy project research into ODSS.  See _Engineering/technology development_ section in the [2012 Autonomy project proposal|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf] for background on this effort. 

h3. [Requirements] 
h3. HABs Algorithm Flow (click on thumbnail to enlarge)
Describe the inputs/output and major components using Harmful Algal Bloom use case.
!human-in-loop workflow.png|thumbnail!
!prediction workflow.png|thumbnail! 
!detection workflow.png|thumbnail! 
 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579635</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645152</id>
<property name="body"><![CDATA[h1. Overview
This page documents the engineering development for integration of Autonomy project research into ODSS.  See _Engineering/technology development_ section in the [2012 Autonomy project proposal|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf] for background on this effort. 

h3. [Requirements] 
h3. HABs Algorithm Flow (click on thumbnail to enlarge)
Describe the inputs/output and major components using Harmful Algal Bloom use case.
!human-in-loop workflow.png|thumbnail!
!projection workflow.png|thumbnail! 
!detection workflow.png|thumbnail! 
 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579634</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645151</id>
<property name="body"><![CDATA[This page documents the engineering development for integration of Autonomy project research tasks into ODSS.  See _Engineering/technology development_ section in the [2012 Autonomy project proposal|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf|https://mww.mbari.org/resources/2012_Proposal_Process/phase_I_pdfs/901010_Distributed-Autonomy.pdf] for background on this effort. 

[Requirements]
HABs Algorithm Flow Diagrams (click on thumbnail to enlarge)
Not sure how useful these are, but for not these help illustrate the inputs/output and major components.
!human-in-loop workflow.png|thumbnail!
!projection workflow.png|thumbnail! 
!detection workflow.png|thumbnail! 
 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579633</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645133</id>
<property name="body"><![CDATA[Requirements
HAB Algorithm Flow Diagrams (click on thumbnail to enlarge)

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579615</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645138</id>
<property name="body"><![CDATA[h1. Requirements
h3. Last updated:  1.24.12

The following outlines requirements to support event-response research for the Distributed Autonomy project and integration of its components into the ODSS.  These requirements are also intended to support research on folksonomy classification based on tagging, and machine learning to identifying key features that best describe data and significant events from past and future CANON field experiments.      

This is very much a work-in-progress and intended as starting point for discussion.

h3. Visualization
* Tool to assist human in the loop labeling/tagging of events
Display trends to inform users  on prediction. What kind of trends ? What kinds of predictions ? How to best visualize these ? 
* User login capability in ODSS
* STOQS spatial temporal query for past experiments to mine data for model development and to ground truth data
 
h3. Data Format and Query

* Spatial temporal query of satellite images (SST, MODIS, etc.)  to mine data for model development and to ground truth data
* Data shall be stored in a format compatible with algorithm development (Matlab ?), as necessary for building models.
* Data shall be time-stamped and spatially referenced in a standard format as necessary for e.g. interpolation, subsampling, etc. 


h3. Data Storage

Database capable of storing

*Annotator (user)*
* properties (name, title, etc.)
* probability (e.g. probability provided correct label)

*Class attributes*
* tags
* labels (binary, multivalued, or continuous)  
* confidence (e.g. definitely, guessing, probably, percent)

*Images*

*Model parameters*
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579620</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179517</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Next step is to detach parosci from AUV and run on desktop with protocol analyzer.
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** &nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** chmod 777 /dev/ttyS\*
* Investigate update to newer kernel (2.6.23 recommended)
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** exit back to user auv
*** \#\!/bin/sh
\# auv startup script
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
**** update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114034</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645136</id>
<property name="body"><![CDATA[h1. Requirements
h3. Last updated:  1.24.12

The following outlines requirements to support event-response research for the Distributed Autonomy project and integration of its components into the ODSS.  These requirements are also intended to support research on folksonomy classification based on tagging, and machine learning to identifying key features that best describe data and significant events from past and future CANON field experiments.      

This is very much a work-in-progress and intended as starting point for discussion.

h3. Visualization
* Tool to assist human in the loop labeling/tagging of events
Display trends to inform users  on prediction. What kind of trends ? What kinds of predictions ? How to best visualize these ? 
* User login capability in ODSS
* STOQS spatial temporal query for past experiments to mine data for model development and to ground truth data
 
h3. Data Format and Query

* Spatial temporal query of satellite images (SST, MODIS, etc.)  to mine data for model development and to ground truth data
* Data shall be stored in a format compatible with algorithm development (Matlab ?), as necessary for building models.
* Data shall be time-stamped and spatially referenced in a standard format as necessary for e.g. interpolation, subsampling, etc. 


h3. Data Storage

Database capable of storing

*Annotator (user)*
* properties (name, title, etc.)
* probability (e.g. probability provided correct label)

*Class attributes*
* tags
* labels (binary, multivalued, or continuous)  
* confidence (e.g. definitely, guessing, probably, percent)

*Images*

*Model parameters*
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579618</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179464</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; TODO:&nbsp; TM to mod auv-pkgs in cvs to add omniORB.cfg file for mvc-debian
** &nbsp;
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst Navigation drivers (first priority)
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait a while for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig
*** &nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp; Getting an error "Failed to read serial number"
**** 06:43:56.058 DEBUG \[Parosci\] parsed PR (30) and TempInterval (10)
06:43:56.066 DEBUG \[SerialDevice\] Current ispeed setting: 13
**** 06:43:56.068 DEBUG \[SerialDevice\] Current ospeed setting: 13
**** 06:43:56.070 DEBUG \[SerialDevice\] change to speed setting 9600
**** 06:43:56.072 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:43:56.074 ERROR \[SerialDevice\] cfsetospeed() failed
06:43:56.075 DEBUG \[SerialDevice\] New ispeed setting: 13
**** 06:43:56.077 DEBUG \[SerialDevice\] New ospeed setting: 13
**** 06:43:56.079 DEBUG \[SerialDevice\] SerialDevice: done...
**** 06:43:56.200 ERROR \[Parosci\] Failed to read serial number
06:43:56.204 ERROR \[AuvService\] Failed to read serial numbre
06:46:15.026 DEBUG \[AuvService\] AuvService::signalHandler() - call cleanup()\\
* sonardyne usbl
** No test executable available
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
** Status (-)
*** In progress...&nbsp;&nbsp;{dynamictasklist:ScienceDrivers}
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
*** Actions:
*** Status (-)
**** In progress...&nbsp; getting and error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD att
ributes file "tcp:sci1-dmo1:10002"
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status (/)
**** Driver passes basic functional test.
** Biolume
*** tcp:sci3-dmo1:14002
*** Actions
*** Status (?)
**** Not tested yet
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status (/)
**** Driver passes basic functional test
** imagenex
** Gulper
*** no linux driver currently available (should be a simple 'fire' command)
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** chmod 777 /dev/ttyS\*
* Investigate update to newer kernel (2.6.23 recommended)
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne
*** 06:49:34.623 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
06:49:34.625 ERROR \[SerialDevice\] cfsetospeed() failed
06:49:34.627 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:49:34.629 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:49:34.631 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:49:34.632 INFO \[TeledyneDvl\] initialize - Baud rate set to 38400.
*** 06:49:34.635 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 8 chars: EX10011
06:49:34.637 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:34.640 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.642 DEBUG \[SerialDevice\] readUntil: read C
06:49:34.644 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3994
*** 06:49:34.646 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.648 DEBUG \[SerialDevice\] readUntil: read B
06:49:34.650 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3987
*** 06:49:34.652 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.654 DEBUG \[SerialDevice\] readUntil: read 6
06:49:34.656 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3982
*** 06:49:34.658 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.660 DEBUG \[SerialDevice\] readUntil: read 1
06:49:34.662 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3976
*** 06:49:34.664 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.666 DEBUG \[SerialDevice\] readUntil: read 1
06:49:34.667 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3970
*** 06:49:34.670 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.672 DEBUG \[SerialDevice\] readUntil: read
06:49:34.673 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3964
*** 06:49:34.676 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.677 DEBUG \[SerialDevice\] readUntil: read
*** 06:49:34.679 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3958
*** 06:49:34.682 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.683 DEBUG \[SerialDevice\] readUntil: read >
06:49:34.685 DEBUG \[SerialDevice\] readUntil: succeeded in 48 msec
*** 06:49:34.687 INFO \[TeledyneDvl\] CB611
>
06:49:34.689 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 9 chars: EA+04500
06:49:34.692 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:34.694 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.696 DEBUG \[SerialDevice\] readUntil: read O
06:49:34.698 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3993
*** 06:49:34.701 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.703 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.705 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3986
*** 06:49:34.707 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.709 DEBUG \[SerialDevice\] readUntil: read B
06:49:34.711 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3980
*** 06:49:34.713 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.715 DEBUG \[SerialDevice\] readUntil: read J
06:49:34.717 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3974
*** 06:49:34.719 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.721 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.723 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3969
*** 06:49:34.725 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.727 DEBUG \[SerialDevice\] readUntil: read O
06:49:34.728 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3963
*** 06:49:34.731 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.733 DEBUG \[SerialDevice\] readUntil: read o
06:49:34.734 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3957
*** 06:49:34.736 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.738 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.740 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3951
*** 06:49:34.742 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.744 DEBUG \[SerialDevice\] readUntil: read c
06:49:34.746 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3945
*** 06:49:34.748 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.750 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.752 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3939
*** 06:49:34.755 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.757 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.759 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3933
*** 06:49:44.058 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:49:44.059 DEBUG \[SerialDevice\] readUntil: read
06:49:44.060 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 12 bytes read.
*** 06:49:44.061 ERROR \[TeledyneDvl\] O?BJ?Oo?c??
06:49:44.062 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent EA+04500. Recei
ved O?BJ?Oo?c??.
*** 06:49:44.062 ERROR \[TeledyneDvl\] initialize - Error setting command EA+04500.
*** 06:49:44.064 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 7 chars: WP0001
06:49:44.065 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:44.067 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.068 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.069 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3995
*** 06:49:44.071 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.072 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.072 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3992
*** 06:49:44.075 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.076 DEBUG \[SerialDevice\] readUntil: read B
06:49:44.077 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3988
*** 06:49:44.078 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.079 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.079 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3985
*** 06:49:44.080 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.081 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.083 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3981
*** 06:49:58.182 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:49:58.183 DEBUG \[SerialDevice\] readUntil: read
06:49:58.184 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 6 bytes read.
*** 06:49:58.185 ERROR \[TeledyneDvl\] ??B??
06:49:58.186 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent WP0001. Receive
d ??B??.
*** 06:49:58.187 ERROR \[TeledyneDvl\] initialize - Error setting command WP0001.
*** 06:49:58.188 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 5 chars: WN25
06:49:58.189 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:58.191 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.192 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.192 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3997
*** 06:49:58.195 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.197 DEBUG \[SerialDevice\] readUntil: read N
06:49:58.199 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3990
*** 06:49:58.201 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.203 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.205 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3984
*** 06:49:58.207 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.209 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.211 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3979
*** 06:49:58.213 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.215 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.217 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3973
*** 06:50:11.518 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:50:11.519 DEBUG \[SerialDevice\] readUntil: read
06:50:11.520 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 6 bytes read.
*** 06:50:11.521 ERROR \[TeledyneDvl\] ?N???
06:50:11.523 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent WN25. Received
?N???.
*** 06:50:11.524 ERROR \[TeledyneDvl\] initialize - Error setting command WN25.
*** 06:50:11.525 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 06:50:11.526 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 6 chars: WV210
06:50:11.527 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:50:11.531 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.531 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.532 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3995
*** 06:50:11.533 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.535 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.536 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3991
*** 06:50:11.537 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.538 DEBUG \[SerialDevice\] readUntil: read 2
06:50:11.539 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3988
*** 06:50:11.540 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.541 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.541 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3986
*** 06:50:11.544 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.545 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.546 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3982
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113979</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179462</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; TODO:&nbsp; TM to mod auv-pkgs in cvs to add omniORB.cfg file for mvc-debian.
* Navigation drivers (first priority)
** ashtec(gps)
*** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
*** 9600 8N1
*** Status (+) &nbsp;
**** ./ashtechapp \-dev /dev/ttyS6
**** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
** bluefinBatt
*** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
*** Status (-) &nbsp;
**** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
** crossbow
*** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
*** ./crossbow \-dev /dev/ttyS11
*** Status (-) &nbsp;
**** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
** parosci \-&nbsp; Paroscientific pressure sensor
*** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
*** ./parosci \-dev /dev/ttyS4
**** wait a while for 'ping service worksite' to timeout
*** Actions:
**** added parosci.cfg to auv-linux/onboard/sampleConfig
**** &nbsp;
*** Status (-)
**** In progress...&nbsp;&nbsp; Getting an error "Failed to read serial number"
***** 06:43:56.058 DEBUG \[Parosci\] parsed PR (30) and TempInterval (10)
06:43:56.066 DEBUG \[SerialDevice\] Current ispeed setting: 13
***** 06:43:56.068 DEBUG \[SerialDevice\] Current ospeed setting: 13
***** 06:43:56.070 DEBUG \[SerialDevice\] change to speed setting 9600
***** 06:43:56.072 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:43:56.074 ERROR \[SerialDevice\] cfsetospeed() failed
06:43:56.075 DEBUG \[SerialDevice\] New ispeed setting: 13
***** 06:43:56.077 DEBUG \[SerialDevice\] New ospeed setting: 13
***** 06:43:56.079 DEBUG \[SerialDevice\] SerialDevice: done...
***** 06:43:56.200 ERROR \[Parosci\] Failed to read serial number
06:43:56.204 ERROR \[AuvService\] Failed to read serial numbre
06:46:15.026 DEBUG \[AuvService\] AuvService::signalHandler() - call cleanup()
** sonardyne
*** No test executable available
** tailcone
*** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
*** ./tailcone \-dev /dev/ttyS2
*** Cautions:
**** Recommend running tailcone tests while observing the tailcone
**** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
*** Status (/)
**** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
** Teledyne dvl
*** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
*** Actions
**** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Status (-)
**** In progress...&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
*** Actions:
*** Status (-)
**** In progress...&nbsp; getting and error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD att
ributes file "tcp:sci1-dmo1:10002"
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status (/)
**** Driver passes basic functional test.
** Biolume
*** tcp:sci3-dmo1:14002
*** Actions
*** Status (?)
**** Not tested yet
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status (/)
**** Driver passes basic functional test
** imagenex
** Gulper
*** no linux driver currently available (should be a simple 'fire' command)
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** chmod 777 /dev/ttyS\*
* Investigate update to newer kernel (2.6.23 recommended)
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne
*** 06:49:34.623 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
06:49:34.625 ERROR \[SerialDevice\] cfsetospeed() failed
06:49:34.627 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:49:34.629 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:49:34.631 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:49:34.632 INFO \[TeledyneDvl\] initialize - Baud rate set to 38400.
*** 06:49:34.635 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 8 chars: EX10011
06:49:34.637 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:34.640 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.642 DEBUG \[SerialDevice\] readUntil: read C
06:49:34.644 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3994
*** 06:49:34.646 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.648 DEBUG \[SerialDevice\] readUntil: read B
06:49:34.650 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3987
*** 06:49:34.652 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.654 DEBUG \[SerialDevice\] readUntil: read 6
06:49:34.656 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3982
*** 06:49:34.658 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.660 DEBUG \[SerialDevice\] readUntil: read 1
06:49:34.662 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3976
*** 06:49:34.664 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.666 DEBUG \[SerialDevice\] readUntil: read 1
06:49:34.667 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3970
*** 06:49:34.670 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.672 DEBUG \[SerialDevice\] readUntil: read
06:49:34.673 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3964
*** 06:49:34.676 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.677 DEBUG \[SerialDevice\] readUntil: read
*** 06:49:34.679 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3958
*** 06:49:34.682 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.683 DEBUG \[SerialDevice\] readUntil: read >
06:49:34.685 DEBUG \[SerialDevice\] readUntil: succeeded in 48 msec
*** 06:49:34.687 INFO \[TeledyneDvl\] CB611
>
06:49:34.689 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 9 chars: EA+04500
06:49:34.692 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:34.694 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.696 DEBUG \[SerialDevice\] readUntil: read O
06:49:34.698 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3993
*** 06:49:34.701 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.703 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.705 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3986
*** 06:49:34.707 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.709 DEBUG \[SerialDevice\] readUntil: read B
06:49:34.711 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3980
*** 06:49:34.713 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.715 DEBUG \[SerialDevice\] readUntil: read J
06:49:34.717 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3974
*** 06:49:34.719 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.721 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.723 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3969
*** 06:49:34.725 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.727 DEBUG \[SerialDevice\] readUntil: read O
06:49:34.728 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3963
*** 06:49:34.731 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.733 DEBUG \[SerialDevice\] readUntil: read o
06:49:34.734 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3957
*** 06:49:34.736 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.738 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.740 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3951
*** 06:49:34.742 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.744 DEBUG \[SerialDevice\] readUntil: read c
06:49:34.746 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3945
*** 06:49:34.748 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.750 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.752 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3939
*** 06:49:34.755 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.757 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.759 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3933
*** 06:49:44.058 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:49:44.059 DEBUG \[SerialDevice\] readUntil: read
06:49:44.060 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 12 bytes read.
*** 06:49:44.061 ERROR \[TeledyneDvl\] O?BJ?Oo?c??
06:49:44.062 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent EA+04500. Recei
ved O?BJ?Oo?c??.
*** 06:49:44.062 ERROR \[TeledyneDvl\] initialize - Error setting command EA+04500.
*** 06:49:44.064 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 7 chars: WP0001
06:49:44.065 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:44.067 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.068 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.069 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3995
*** 06:49:44.071 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.072 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.072 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3992
*** 06:49:44.075 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.076 DEBUG \[SerialDevice\] readUntil: read B
06:49:44.077 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3988
*** 06:49:44.078 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.079 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.079 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3985
*** 06:49:44.080 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.081 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.083 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3981
*** 06:49:58.182 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:49:58.183 DEBUG \[SerialDevice\] readUntil: read
06:49:58.184 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 6 bytes read.
*** 06:49:58.185 ERROR \[TeledyneDvl\] ??B??
06:49:58.186 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent WP0001. Receive
d ??B??.
*** 06:49:58.187 ERROR \[TeledyneDvl\] initialize - Error setting command WP0001.
*** 06:49:58.188 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 5 chars: WN25
06:49:58.189 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:58.191 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.192 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.192 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3997
*** 06:49:58.195 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.197 DEBUG \[SerialDevice\] readUntil: read N
06:49:58.199 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3990
*** 06:49:58.201 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.203 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.205 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3984
*** 06:49:58.207 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.209 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.211 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3979
*** 06:49:58.213 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.215 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.217 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3973
*** 06:50:11.518 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:50:11.519 DEBUG \[SerialDevice\] readUntil: read
06:50:11.520 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 6 bytes read.
*** 06:50:11.521 ERROR \[TeledyneDvl\] ?N???
06:50:11.523 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent WN25. Received
?N???.
*** 06:50:11.524 ERROR \[TeledyneDvl\] initialize - Error setting command WN25.
*** 06:50:11.525 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 06:50:11.526 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 6 chars: WV210
06:50:11.527 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:50:11.531 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.531 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.532 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3995
*** 06:50:11.533 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.535 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.536 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3991
*** 06:50:11.537 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.538 DEBUG \[SerialDevice\] readUntil: read 2
06:50:11.539 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3988
*** 06:50:11.540 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.541 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.541 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3986
*** 06:50:11.544 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.545 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.546 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3982
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113977</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670030</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status
\\

Executive Summary:&nbsp;&nbsp;&nbsp; 50 days allocated, appr

\\
&nbsp;
* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] This is to fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp; An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;
*** \\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
*** parosci Paroscientific pressure sensor
\\
*** tailcone
\\
*** teledyne DVL
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
** TODO
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Device Emulation to insure regression test and code coverage of error handlers
\\
\\

Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;

Serial port infrastructure

SerTest test program

Code Review

Regression testing

PC104 stack with Xtreme104&nbsp;

Serial Device emulation for regression testing.
\\
\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637262</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179478</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait a while for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig
*** &nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp; Getting an error "Failed to read serial number"
**** 06:43:56.058 DEBUG \[Parosci\] parsed PR (30) and TempInterval (10)
06:43:56.066 DEBUG \[SerialDevice\] Current ispeed setting: 13
**** 06:43:56.068 DEBUG \[SerialDevice\] Current ospeed setting: 13
**** 06:43:56.070 DEBUG \[SerialDevice\] change to speed setting 9600
**** 06:43:56.072 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:43:56.074 ERROR \[SerialDevice\] cfsetospeed() failed
06:43:56.075 DEBUG \[SerialDevice\] New ispeed setting: 13
**** 06:43:56.077 DEBUG \[SerialDevice\] New ospeed setting: 13
**** 06:43:56.079 DEBUG \[SerialDevice\] SerialDevice: done...
**** 06:43:56.200 ERROR \[Parosci\] Failed to read serial number
06:43:56.204 ERROR \[AuvService\] Failed to read serial numbre
06:46:15.026 DEBUG \[AuvService\] AuvService::signalHandler() - call cleanup()
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
** Status (-)
*** In progress...&nbsp;&nbsp;
*** &nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** chmod 777 /dev/ttyS\*
* Investigate update to newer kernel (2.6.23 recommended)
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113993</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179477</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait a while for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig
*** &nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp; Getting an error "Failed to read serial number"
**** 06:43:56.058 DEBUG \[Parosci\] parsed PR (30) and TempInterval (10)
06:43:56.066 DEBUG \[SerialDevice\] Current ispeed setting: 13
**** 06:43:56.068 DEBUG \[SerialDevice\] Current ospeed setting: 13
**** 06:43:56.070 DEBUG \[SerialDevice\] change to speed setting 9600
**** 06:43:56.072 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:43:56.074 ERROR \[SerialDevice\] cfsetospeed() failed
06:43:56.075 DEBUG \[SerialDevice\] New ispeed setting: 13
**** 06:43:56.077 DEBUG \[SerialDevice\] New ospeed setting: 13
**** 06:43:56.079 DEBUG \[SerialDevice\] SerialDevice: done...
**** 06:43:56.200 ERROR \[Parosci\] Failed to read serial number
06:43:56.204 ERROR \[AuvService\] Failed to read serial numbre
06:46:15.026 DEBUG \[AuvService\] AuvService::signalHandler() - call cleanup()
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
** Status (-)
*** In progress...&nbsp;&nbsp;
*** &nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** chmod 777 /dev/ttyS\*
* Investigate update to newer kernel (2.6.23 recommended)
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
11:39:30.368 WARN \[TeledyneDvl\] Using default soundspeed: 0.0
IOR:010000001200000049444c3a6175762f44766c49463a312e3000000001000000000000006400
0000010102000d0000003133342e38392e33322e31360000880e0e000000fea5bade470000117200
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
11:39:30.376 INFO \[TeledyneDvl\]
&nbsp;Starting DVL Initialization.
*** 11:39:30.379 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
11:39:30.380 ERROR \[SerialDevice\] cfsetospeed() failed
11:39:30.683 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
11:39:30.684 ERROR \[SerialDevice\] cfsetospeed() failed
11:39:30.825 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 11:39:31.588 INFO \[TeledyneDvl\] CR1
\[Parameters set to FACTORY defaults\]
>
11:39:31.600 INFO \[TeledyneDvl\] PD0
>
11:39:31.612 INFO \[TeledyneDvl\] BK1
>
11:39:31.632 INFO \[TeledyneDvl\] TP00:00.33
>
11:39:31.652 INFO \[TeledyneDvl\] TE00:00:0.00
>
11:39:31.675 INFO \[TeledyneDvl\] BL,10,010,100
>
11:39:31.688 INFO \[TeledyneDvl\] BP001
>
11:39:31.707 INFO \[TeledyneDvl\] CF11010
>
11:39:31.720 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
11:39:31.721 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
11:39:31.722 ERROR \[SerialDevice\] cfsetospeed() failed
11:39:31.724 INFO \[TeledyneDvl\] initialize - Baud rate set to 38400.
*** 11:39:46.240 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 6 bytes read.
*** 11:39:46.241 ERROR \[TeledyneDvl\] O?BJ?
11:39:46.242 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent EX10011. Receiv
11:41:33.642 ERROR \[TeledyneDvl\] TM DBG: bytes \-1236990972, record read is:
*** 11:41:33.646 ERROR \[StreamSerialDriver\] run() - Got error from readRecord().
*** 11:40:00.760 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 7 bytes read.
*** 11:40:00.761 ERROR \[TeledyneDvl\] Oo?c??
11:40:00.762 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent EA+04500. Recei
ved Oo?c??.
*** 11:40:00.762 ERROR \[TeledyneDvl\] initialize - Error setting command EA+04500.
*** 11:40:15.576 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 6 bytes read.
*** 11:40:15.577 ERROR \[TeledyneDvl\] ??B??
11:40:15.578 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent WP0001. Receive
d ??B??.
*** 11:40:15.579 ERROR \[TeledyneDvl\] initialize - Error setting command WP0001.
*** 11:40:30.789 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 6 bytes read.
*** 11:40:30.789 ERROR \[TeledyneDvl\] ?N???
11:40:30.790 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent WN25. Received
?N???.
*** 11:40:30.791 ERROR \[TeledyneDvl\] initialize - Error setting command WN25.
*** 11:40:30.792 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 11:40:45.705 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 6 bytes read.
*** 11:40:45.706 ERROR \[TeledyneDvl\] ??2??
11:40:45.706 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent WV210. Received
&nbsp;??2??.
*** 11:40:45.707 ERROR \[TeledyneDvl\] initialize - Error setting command WV210.
*** 11:40:45.710 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 11:41:00.721 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 7 bytes read.
*** 11:41:00.722 ERROR \[TeledyneDvl\] O??c??
. Received O??c??. \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent EC1490
*** .1:41:00.723 ERROR \[TeledyneDvl\] initialize - Error setting command EC1490
*** 11:41:01.577 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
11:41:01.578 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
11:41:01.579 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 11:41:01.589 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 11:41:01.590 ERROR \[TeledyneDvl\] TM DBG: bytes \-1236990972, record read is: ?CS
*** 11:41:01.594 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
11:41:01.598 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 11:41:01.599 ERROR \[TeledyneDvl\] TM DBG: bytes \-1236990972, record read is:&nbsp;&nbsp; ER
R 01
*** 11:41:01.603 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
11:41:01.608 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 11:41:01.610 ERROR \[TeledyneDvl\] TM DBG: bytes \-1236990972, record read is: 0:
UNRE
*** 11:41:01.614 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
11:41:01.618 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 11:41:01.619 ERROR \[TeledyneDvl\] TM DBG: bytes \-1236990972, record read is: COGN
IZED CO
*** 11:41:01.623 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
11:41:01.627 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 11:41:01.628 ERROR \[TeledyneDvl\] TM DBG: bytes \-1236990972, record read is: MMAN
D
>
*** 11:41:01.632 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
11:41:17.633 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 11:41:17.634 ERROR \[TeledyneDvl\] TM DBG: bytes \-1236990972, record read is:
*** 11:41:17.638 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
11:41:33.641 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113992</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179475</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;\\

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait a while for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig
*** &nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp; Getting an error "Failed to read serial number"
**** 06:43:56.058 DEBUG \[Parosci\] parsed PR (30) and TempInterval (10)
06:43:56.066 DEBUG \[SerialDevice\] Current ispeed setting: 13
**** 06:43:56.068 DEBUG \[SerialDevice\] Current ospeed setting: 13
**** 06:43:56.070 DEBUG \[SerialDevice\] change to speed setting 9600
**** 06:43:56.072 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:43:56.074 ERROR \[SerialDevice\] cfsetospeed() failed
06:43:56.075 DEBUG \[SerialDevice\] New ispeed setting: 13
**** 06:43:56.077 DEBUG \[SerialDevice\] New ospeed setting: 13
**** 06:43:56.079 DEBUG \[SerialDevice\] SerialDevice: done...
**** 06:43:56.200 ERROR \[Parosci\] Failed to read serial number
06:43:56.204 ERROR \[AuvService\] Failed to read serial numbre
06:46:15.026 DEBUG \[AuvService\] AuvService::signalHandler() - call cleanup()
\\
* sonardyne usbl
** No test executable available\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
** Status (-)
*** In progress...&nbsp;&nbsp;
*** &nbsp;\\

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test\\
* imagenex\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** chmod 777 /dev/ttyS\*
* Investigate update to newer kernel (2.6.23 recommended)
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne
*** 06:49:34.623 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
06:49:34.625 ERROR \[SerialDevice\] cfsetospeed() failed
06:49:34.627 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:49:34.629 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:49:34.631 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:49:34.632 INFO \[TeledyneDvl\] initialize - Baud rate set to 38400.
*** 06:49:34.635 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 8 chars: EX10011
06:49:34.637 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:34.640 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.642 DEBUG \[SerialDevice\] readUntil: read C
06:49:34.644 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3994
*** 06:49:34.646 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.648 DEBUG \[SerialDevice\] readUntil: read B
06:49:34.650 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3987
*** 06:49:34.652 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.654 DEBUG \[SerialDevice\] readUntil: read 6
06:49:34.656 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3982
*** 06:49:34.658 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.660 DEBUG \[SerialDevice\] readUntil: read 1
06:49:34.662 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3976
*** 06:49:34.664 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.666 DEBUG \[SerialDevice\] readUntil: read 1
06:49:34.667 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3970
*** 06:49:34.670 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.672 DEBUG \[SerialDevice\] readUntil: read
06:49:34.673 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3964
*** 06:49:34.676 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.677 DEBUG \[SerialDevice\] readUntil: read
*** 06:49:34.679 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3958
*** 06:49:34.682 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.683 DEBUG \[SerialDevice\] readUntil: read >
06:49:34.685 DEBUG \[SerialDevice\] readUntil: succeeded in 48 msec
*** 06:49:34.687 INFO \[TeledyneDvl\] CB611
>
06:49:34.689 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 9 chars: EA+04500
06:49:34.692 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:34.694 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.696 DEBUG \[SerialDevice\] readUntil: read O
06:49:34.698 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3993
*** 06:49:34.701 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.703 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.705 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3986
*** 06:49:34.707 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.709 DEBUG \[SerialDevice\] readUntil: read B
06:49:34.711 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3980
*** 06:49:34.713 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.715 DEBUG \[SerialDevice\] readUntil: read J
06:49:34.717 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3974
*** 06:49:34.719 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.721 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.723 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3969
*** 06:49:34.725 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.727 DEBUG \[SerialDevice\] readUntil: read O
06:49:34.728 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3963
*** 06:49:34.731 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.733 DEBUG \[SerialDevice\] readUntil: read o
06:49:34.734 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3957
*** 06:49:34.736 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.738 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.740 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3951
*** 06:49:34.742 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.744 DEBUG \[SerialDevice\] readUntil: read c
06:49:34.746 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3945
*** 06:49:34.748 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.750 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.752 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3939
*** 06:49:34.755 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:34.757 DEBUG \[SerialDevice\] readUntil: read ?
06:49:34.759 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3933
*** 06:49:44.058 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:49:44.059 DEBUG \[SerialDevice\] readUntil: read
06:49:44.060 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 12 bytes read.
*** 06:49:44.061 ERROR \[TeledyneDvl\] O?BJ?Oo?c??
06:49:44.062 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent EA+04500. Recei
ved O?BJ?Oo?c??.
*** 06:49:44.062 ERROR \[TeledyneDvl\] initialize - Error setting command EA+04500.
*** 06:49:44.064 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 7 chars: WP0001
06:49:44.065 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:44.067 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.068 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.069 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3995
*** 06:49:44.071 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.072 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.072 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3992
*** 06:49:44.075 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.076 DEBUG \[SerialDevice\] readUntil: read B
06:49:44.077 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3988
*** 06:49:44.078 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.079 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.079 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3985
*** 06:49:44.080 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:44.081 DEBUG \[SerialDevice\] readUntil: read ?
06:49:44.083 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3981
*** 06:49:58.182 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:49:58.183 DEBUG \[SerialDevice\] readUntil: read
06:49:58.184 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 6 bytes read.
*** 06:49:58.185 ERROR \[TeledyneDvl\] ??B??
06:49:58.186 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent WP0001. Receive
d ??B??.
*** 06:49:58.187 ERROR \[TeledyneDvl\] initialize - Error setting command WP0001.
*** 06:49:58.188 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 5 chars: WN25
06:49:58.189 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:49:58.191 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.192 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.192 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3997
*** 06:49:58.195 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.197 DEBUG \[SerialDevice\] readUntil: read N
06:49:58.199 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3990
*** 06:49:58.201 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.203 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.205 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3984
*** 06:49:58.207 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.209 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.211 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3979
*** 06:49:58.213 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:49:58.215 DEBUG \[SerialDevice\] readUntil: read ?
06:49:58.217 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3973
*** 06:50:11.518 DEBUG \[SerialDevice\] read 0 chars from dev /dev/ttyS5
*** 06:50:11.519 DEBUG \[SerialDevice\] readUntil: read
06:50:11.520 ERROR \[TeledyneDvl\] readAscii() timed out.&nbsp; 6 bytes read.
*** 06:50:11.521 ERROR \[TeledyneDvl\] ?N???
06:50:11.523 ERROR \[TeledyneDvl\]&nbsp; writeReadAscii() - Error. Sent WN25. Received
?N???.
*** 06:50:11.524 ERROR \[TeledyneDvl\] initialize - Error setting command WN25.
*** 06:50:11.525 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 06:50:11.526 DEBUG \[SerialDevice\] /dev/ttyS5: wrote 6 chars: WV210
06:50:11.527 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=4000
*** 06:50:11.531 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.531 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.532 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3995
*** 06:50:11.533 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.535 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.536 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3991
*** 06:50:11.537 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.538 DEBUG \[SerialDevice\] readUntil: read 2
06:50:11.539 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3988
*** 06:50:11.540 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.541 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.541 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3986
*** 06:50:11.544 DEBUG \[SerialDevice\] read 1 chars from dev /dev/ttyS5
*** 06:50:11.545 DEBUG \[SerialDevice\] readUntil: read ?
06:50:11.546 DEBUG \[SerialDevice\] SerialDevice::readNChars() - timeout=3982
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113990</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179490</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait a while for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig
*** &nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp; Getting an error "Failed to read serial number"
**** 06:43:56.058 DEBUG \[Parosci\] parsed PR (30) and TempInterval (10)
06:43:56.066 DEBUG \[SerialDevice\] Current ispeed setting: 13
**** 06:43:56.068 DEBUG \[SerialDevice\] Current ospeed setting: 13
**** 06:43:56.070 DEBUG \[SerialDevice\] change to speed setting 9600
**** 06:43:56.072 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:43:56.074 ERROR \[SerialDevice\] cfsetospeed() failed
06:43:56.075 DEBUG \[SerialDevice\] New ispeed setting: 13
**** 06:43:56.077 DEBUG \[SerialDevice\] New ospeed setting: 13
**** 06:43:56.079 DEBUG \[SerialDevice\] SerialDevice: done...
**** 06:43:56.200 ERROR \[Parosci\] Failed to read serial number
06:43:56.204 ERROR \[AuvService\] Failed to read serial numbre
06:46:15.026 DEBUG \[AuvService\] AuvService::signalHandler() - call cleanup()
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
** Status (-)
*** In progress...&nbsp;&nbsp;
*** &nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** chmod 777 /dev/ttyS\*
* Investigate update to newer kernel (2.6.23 recommended)
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** exit back to user auv
*** \#\!/bin/sh
\# auv startup script
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
**** update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114005</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11272255</id>
<property name="body"><![CDATA[This page will refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09
* [Autonomy Deployment Log]

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [Monte-Carlo Testing guide|https://oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect
* [Autonomy Plans for 2010 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans10.pdf]
* [Decision Support for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/CANON.pdf]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11239489</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">984</id>
<property name="body"><![CDATA[* Tom strongly urged we use Corba as a mechanism to communicate between AMC and VCS (i.e current Layerd Control software).&nbsp; General agreement on its use, and its dependancy on a Linux port of the Layerd Control system was noted.
** There will likely be an ORB which will be on the MVC and AMC/autonomy will connect to it.
** Some complexity will increase with use of CORBA; however debugging is less of an issue since will have a similar issue with sockets.
** Determined that sockets or CORBA implementation is less of a mainline design issue for the autonomy work. We'll leverage off of whatever is appropriate. We have a possible April simple deployment test for the autonomy for which end of Feb. for testing the communication protocol between the AMC and MVC is important.

* Question:When does the VCS know to expect next behavior from the AMC?
** First VCS sends AMC a completion message (akin to SUCCESS, FAILURE)
** VCS will trigger an IDLE state for a *{+}fixed time-period{+}* (which is parameterized?). An IDLE is a quiescent behavior which will likely shut off the prop and ensure vehicle is not making any changes.
** AMC will recieve VCS status and send off *next* commmand to VCS.
** Meanwhile, also, AMC will expect results of behavior execution to be sent by VCS via a state update.
** Frederic suggested that one can send two following behaviors so AUV knows what is coming up. Problem with that is that these following behaviors might need to retracted. Even if AMC send's earliest end time that doesn't tell VCS what to do next.
* Rich and Rob are working on how to publish state to the AMC; currently designed the core representation which Conor will be able to use to compile into an agent on the AMC side.
** They are still working on the task to stick a behavior on the command stack.
** Setpoint (tells vehicle to run with a command heading angle or depth) is the first behavior to be implemented by Rob & Rich.
* Hans has H/w is bolted up in lab.
** Will build up Red Hat today.
** Then will put on the Net to be able to see if additional packages needed by a test compilation.
** Conor will drop EUROPA inside the stack for such a test compile.
* Clarified that the entire mission script is being run from AMC
** Instead of reading from a Mission Script, VCS will get the tokens corresponding to the script contents from the AMC
* What do we need when AMC initializes?&nbsp;
** look at begining of exisiting mission scripts; Frederic should have copies
** Primarily, depth envelope and mission timer info needs to be sent over to VCS.
* AMC autonomy code (now called '*{_}T-REX{_}*' for "_Teleo-reactive EXecutive_") will migrate to +Subversion+ on Brian's initiative. We'll us same repository as Brian; will need clients for Mac's and Linux.

From the 2/2 meeting notes, the overal scope of what actually needs to be done, corrsponds to the following:

*{+}Do be done{+}*:
* Behavior stack control

## start
## stop
## active status
## termination mode&nbsp;

* More parameters to be exposed from the MVC to the AMC

* For initialization, the AMC needs to send over following information over to the VCS:

## Timer&nbsp;&nbsp;&nbsp;&nbsp;
## depth envelope

* Need to implement an IDLE behavior to ensure that VCS doesn't summarily trigger an abort. One other possible behavior is a "Hang out" behavior when coming early to a waypoint
* Initiate hard abort

&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">987</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670216</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to develop termios serial driver and validate 12 port serial card kernel driver.&nbsp;&nbsp;Tune hardware
* Recommend build-up of a test PC104 (Lippert board) + Xtreme104 12 port serial card with harddisk.

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;


h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.
\\
\\
[Driver Porting Details]
\\
\\
&nbsp;

h4. \\


h3.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637461</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179376</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
** &nbsp;

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd for separate /home partition when building linux&nbsp;kernel to config the serial port&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs)&nbsp; (1.5 hrs)
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:2401/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for permanance after boot
*** su root
*** cd $AUV_PKGS
*** . 1_omniORB.bat
*** . 2_omniNotify.bat
*** . 3_gctpc.bat
*** . 4_apr.bat
*** . 5_apr-util.bat
*** . 6_log4cxx.bat
*** . 7_netcdb.bat
*** . 8_newmat.bat
*** . 9_final.bat
*** exit back to user auv
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.
\\
\\

Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
* Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
** ifup eth0 will also show the error
\\
* Network Settings (/etc/network/interfaces)
** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
*** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
*** 127.0.0.1 localhost.localdomain localhost
*** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
*** hostname mvc-debian.shore.mbari.org
*** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
**** address 134.89.32.16
**** netmask 255.255.254.0
**** gateway 134.89.32.1
**** broadcast 134.89.32.255
*** to check the hostname is set properly
**** uname \-n
**** hostname \-a
**** hostname \-s
**** hostname \-d
**** hostname \-f
**** hostname
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
** Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600009d080e000000fef0e0ce4700
003491000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
10:05:36.896 INFO \[AuvApplication\] You should override AuvApplication::run()
** 10:05:36.900 INFO \[Hydroscat\] stopping Hydroscat...
Segmentation fault
auv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e31360000330e0e000000fefae0ce4700
003499000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
10:05:46.321 INFO \[Hydroscat\] stopping Hydroscat...
10:05:46.337 INFO \[AuvApplication\] You should override AuvApplication::run()
** Segmentation fault
auv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113891</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179378</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
** &nbsp;

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs)&nbsp; (1.5 hrs)
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:2401/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for permanance after boot
*** su root
*** cd $AUV_PKGS
*** . 1_omniORB.bat
*** . 2_omniNotify.bat
*** . 3_gctpc.bat
*** . 4_apr.bat
*** . 5_apr-util.bat
*** . 6_log4cxx.bat
*** . 7_netcdb.bat
*** . 8_newmat.bat
*** . 9_cppunit.bat
*** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** exit back to user auv\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\ \\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
** Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600009d080e000000fef0e0ce4700
003491000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
10:05:36.896 INFO \[AuvApplication\] You should override AuvApplication::run()
** 10:05:36.900 INFO \[Hydroscat\] stopping Hydroscat...
Segmentation fault
auv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e31360000330e0e000000fefae0ce4700
003499000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
10:05:46.321 INFO \[Hydroscat\] stopping Hydroscat...
10:05:46.337 INFO \[AuvApplication\] You should override AuvApplication::run()
** Segmentation fault
auv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113893</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179372</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

Approach
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
** &nbsp;

Issues
* Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
** Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
*** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
** Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
*** Which Distro?
**** Debian Pro's
***** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
***** Robust, supported, production release avaible
***** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
***** Debian and it's derivatives are made by and used by hardcore linux developers / experts
**** Debian Con's
***** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
***** &nbsp;
**** Fedora Core 6 Pro's
***** Used by&nbsp;auv-linux developers on their workstations&nbsp;
***** Used by T-Rex team on workstations and embedded PC104 processor
***** Familiar to MBARI development engineers
**** Fedora Core 6 Con's
***** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
***** Fedora Core 6 is NO LONGER AVAILABLE for download
**** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.
** Install Debian 4.0 (etch):
*** Warning: 5GB harddisk will run out of space if config'd for separate /home partition when building linux&nbsp;kernel to config the serial port&nbsp;
*** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
*** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
*** Domain: shore.mbari.org
*** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
*** root password:&nbsp; dorado1
*** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
*** Use network mirror for complete package list (if internet connected)
*** Software install: Standard (only)
*** Install Grub to the master boot record
*** Remove DVD and allow boot from harddisk
*** Time: (~45 min depending on harddisk format time)
*** After boot, login as root and re-insert Debian 4 r3 net install DVD.
*** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
**** ant - XML build system
**** ant-optional
**** autoconf
**** autogen
**** automake&nbsp;(should already be selected)
**** binutils - GNU assembler, linker and binary utils
**** bison&nbsp; - (fixes error in auv-shared build where lex not found)
**** cccc - c and c+\+ code counter, software metrics tool (optional)
**** curves - cvs console app (optional)
**** cvs
**** doxygen
**** electric-fence - malloc debugger
**** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
**** g+\+ (4.1 pulls in gcc 4.1)
**** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
**** linux-source-2.6.18
**** make
**** (omniidl and omniorb are tempting - talk to Tom)
**** oprofile - performance profiling tool
**** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
**** editors (elvis-console for vi with multiple files, qemacs, vim)
**** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
*** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
**** \*apt-get install subversion&nbsp;&nbsp;
**** \*apt-get install libtool
**** apt-get install openssl
**** apt-get install ssh (secure shell server)
**** apt-get install minicom
**** apt-get install python-all
**** apt-get install python-all-dev&nbsp; (needed for omniORB build)
**** apt-get install lirc setserial
**** \*apt-get install linux-source-2.6.18
**** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs)&nbsp; (1.5 hrs)
**** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
**** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:2401/home/cvs'
**** cvs login
**** cvs checkout auv-pkgs
**** cvs checkout auv-shared
**** cvs checkout auv-linux
**** cd /home/auv/prj/auv-pkgs
**** source set-auv-env (or ". set-auv-env")
**** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for permanance after boot
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_final.bat
**** exit back to user auv
*** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
**** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
**** logged in as root
**** cp&nbsp;serial.conf /etc&nbsp;
**** cd /usr/src
**** tar jxf linux-source-2.6.18.tar.bz2
**** cd linux-source-2.6.18
**** make clean && make mrproper
**** uname \-r to get /boot/config-'uname \-r' name
**** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
**** make menuconfig
***** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
***** Device Drivers&nbsp; \--> Character devices
***** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
***** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
***** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
***** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
***** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
***** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
**** make-kpkg clean
**** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
***** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
**** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
**** _Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.
\\
\\
* Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
*** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
*** ifup eth0 will also show the error
\\
** Network Settings (/etc/network/interfaces)
*** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
**** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
**** 127.0.0.1 localhost.localdomain localhost
**** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
**** hostname mvc-debian.shore.mbari.org
**** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
***** address 134.89.32.16
***** netmask 255.255.254.0
***** gateway 134.89.32.1
***** broadcast 134.89.32.255
**** to check the hostname is set properly
***** uname \-n
***** hostname \-a
***** hostname \-s
***** hostname \-d
***** hostname \-f
***** hostname
*** &nbsp;
** &nbsp;
** Notes:
*** Corba
**** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
*** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
*** Tar up the built prj directory for transfer to another hard disk:
**** tar \-pczf auv-prj-built.tar.gz prj
** Drivers:
*** Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600009d080e000000fef0e0ce4700
003491000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
10:05:36.896 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 10:05:36.900 INFO \[Hydroscat\] stopping Hydroscat...
Segmentation fault
auv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e31360000330e0e000000fefae0ce4700
003499000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
10:05:46.321 INFO \[Hydroscat\] stopping Hydroscat...
10:05:46.337 INFO \[AuvApplication\] You should override AuvApplication::run()
*** Segmentation fault
auv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113887</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179374</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

Approach
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
** &nbsp;

Issues

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h2. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd for separate /home partition when building linux&nbsp;kernel to config the serial port&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs)&nbsp; (1.5 hrs)
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:2401/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for permanance after boot
*** su root
*** cd $AUV_PKGS
*** . 1_omniORB.bat
*** . 2_omniNotify.bat
*** . 3_gctpc.bat
*** . 4_apr.bat
*** . 5_apr-util.bat
*** . 6_log4cxx.bat
*** . 7_netcdb.bat
*** . 8_newmat.bat
*** . 9_final.bat
*** exit back to user auv
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.
\\
\\

Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
* Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
** ifup eth0 will also show the error
\\
* Network Settings (/etc/network/interfaces)
** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
*** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
*** 127.0.0.1 localhost.localdomain localhost
*** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
*** hostname mvc-debian.shore.mbari.org
*** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
**** address 134.89.32.16
**** netmask 255.255.254.0
**** gateway 134.89.32.1
**** broadcast 134.89.32.255
*** to check the hostname is set properly
**** uname \-n
**** hostname \-a
**** hostname \-s
**** hostname \-d
**** hostname \-f
**** hostname\\ \\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
** Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600009d080e000000fef0e0ce4700
003491000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
10:05:36.896 INFO \[AuvApplication\] You should override AuvApplication::run()
** 10:05:36.900 INFO \[Hydroscat\] stopping Hydroscat...
Segmentation fault
auv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e31360000330e0e000000fefae0ce4700
003499000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
10:05:46.321 INFO \[Hydroscat\] stopping Hydroscat...
10:05:46.337 INFO \[AuvApplication\] You should override AuvApplication::run()
** Segmentation fault
auv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113889</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11272286</id>
<property name="body"><![CDATA[auv-linux uses kernel "real-time" message queues to communicate between some if its internal processes.&nbsp; These kernel object persist between runs (until reboot).&nbsp; Flushing old data out of these queues at start up will fail if the message size has changed.&nbsp; Therefore, it is good practice to manually remove the queues after building auv-linux if there is a chance the these message formats have changed since the last run.&nbsp; To do this, you'll need to first mount a special  filesystem that affords access to kernel queues, if no already mounted:

&nbsp; #&nbsp; mkdir /dev/mqueue&nbsp;&nbsp; #by convention, this is the mount point
&nbsp; #&nbsp; mount \-t mqueue&nbsp; none&nbsp; /dev/mqueue


Then, remove the queues with this command (as a normal user, not root, for safety):



&nbsp; $&nbsp; rm _/_{_}dev/mqueue{_}_/_\*\\

&nbsp;And save yourself hours of frustration :D]]></property>
<property name="content" class="Comment" package="com.atlassian.confluence.pages"><id name="id">11239519</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11272275</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
* PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h2. Building our old version of Europa/Plasma

&nbsp;To apply the patch and build Europa/Plasma with GCC 4.3:
{code:none}
% cd $PLASMA_HOME
% patch -p1 < plasma-gcc4.3.patch
% jam && jam
{code}
\\

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
To compile TREX libraries, first download the Boost C+\+ library ([http://www.boost.org/]) and install it following the instructions outlined in the site.  Then compile TREX in a similar manner as Europa:
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated via a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher.

&nbsp;Note that threadfish.shore has a *ready to go binary* for AUV-Linux. Log in as 'dorado1' and cd down to 'coding/auv-linux'.

h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% omniNames&
% notifd -c $OMNINOTIFY_HOME/channel.cfg&

% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] <nstep>
Use <nstep> = 50
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11239508</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670208</id>
<property name="body"><![CDATA[*Auv Driver Portnig Links*
* *[AUV Linux - Driver Port and Validation]*
* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
\\
\\

h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}
\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00

E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080

007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF468

19F04C10088000000000000000000000000010A0031004400008000800080008000800080008000800

08000800080008000800080008000800080008000800080008000800080008000800080008000800080

00800080008000800080008000800080008000800080008000800080008000800080008000800080008

00080008000800080008000800080008000800080008000800080008000800080008000800080008000

80008000800080008000800080008000800080008000800080008000800080008000800080008000800

080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C06

0E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090

306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F45393

5362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B

2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B

2625272B2625272B2625282B2625282B00046400000000006400000064000000640000006400000064

00000064000000640000006400000064000000640000006400000064000000640000006400000064000

00064000000640000006400000064000000640000006400000064000000640000006400000601000000

DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A

0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637453</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670207</id>
<property name="body"><![CDATA[*Auv Driver Portnig Links* AUV Debian4 Linux Install
 Termios Dev Info
*&nbsp;*
\\
\\
h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}
\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00

E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080

007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF468

19F04C10088000000000000000000000000010A0031004400008000800080008000800080008000800

08000800080008000800080008000800080008000800080008000800080008000800080008000800080

00800080008000800080008000800080008000800080008000800080008000800080008000800080008

00080008000800080008000800080008000800080008000800080008000800080008000800080008000

80008000800080008000800080008000800080008000800080008000800080008000800080008000800

080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C06

0E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090

306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F45393

5362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B

2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B

2625272B2625272B2625282B2625282B00046400000000006400000064000000640000006400000064

00000064000000640000006400000064000000640000006400000064000000640000006400000064000

00064000000640000006400000064000000640000006400000064000000640000006400000601000000

DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A

0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637452</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179392</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

Driver porting and validation
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
*** /dev/ser7
*** 9600 8N1
** bluefinBatt
*** /dev/ser10
** crossbow
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status
**** Basic functional
** Biolume
*** tcp:sci3-dmo1:14002
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status
**** Basic functional
** imagenex
* Other (from QNX cfg file)
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** dropWeightServer \-dev /dev/ser13
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:2401/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with *$PASHR*,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** *$PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.*
*** *TIME: 18:38:31 UTC*\\
*LOCKED:03 23 16*\\
*COUNT :54 26 17*
** *NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by* *exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*).&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].*
** *&nbsp;*
** *$PASHS,NME,POS,A,ON,1&nbsp;&nbsp;* *comprehensive position information through port A at a set rate (1HZ)*
*** *$PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20*\\ \\
** AshtecApp Test results
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113907</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11272271</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
* PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
To compile TREX libraries, first download the Boost C++ library (http://www.boost.org/) and install it following the instructions outlined in the site.  Then compile TREX in a similar manner as Europa:
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated via a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher.

&nbsp;Note that threadfish.shore has a *ready to go binary* for AUV-Linux. Log in as 'dorado1' and cd down to 'coding/auv-linux'.


h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% omniNames&
% notifd -c $OMNINOTIFY_HOME/channel.cfg&

% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] <nstep>
Use <nstep> = 50
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11239504</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8945915</id>
<property name="body"><![CDATA[*Brent*:
Wait for tutorial on AUV Linux (this Wed 4th @ 2pm)
March 26 is for integrating VCSServer w/ Linux. Brent is aware that we would like to have an "integrated" VCSServer with the T-REX port which is adequately tested.

*Thom*:

Coverity for static analysis of T-REX+EUROPA code base needed. However, Coverity is single project license. Need $2500 for additional project license. Should be institute wide not just project wide.

Will build T-REX under Debian this week and report back.

*Frederic*:

Testing modem for the Front following effort shows a bug on the T-REX side. Note that one can receive a msg. from modem within T-REX without sending it via Iridium. Effective way to test.
KDD paper is another focus of attention this week.

*Hans:*

Initialization problem on AL3A modem could be because of&nbsp; handshaking. Needs to investigate.
Q: What needs to be done to get a 20\+ hr mission using T-REX? Essentially T-REX is 'ready'. But to ensure that schedules mesh and we get maximum time in the water + data, important to start thinking of longer duration (and overnight) runs. Also need a way to abort T-REX over the Iridium if/when something goes wrong and vehicle is being tracked from shore. And need to figure out how to re-target the vehicle over the modem to go to a new waypoint so that one can send a waypoint from shore which is used to abort the T-REX plan and generate a waypoint to pick up the vehicle.&nbsp;The fundamental issue is how T-REX terminates. Some progress towards this has been implemented by Frederic for Front following.

Do not have a clean way to wrap up a Volume Survey however. This would be something to target.\\
Front Following algorithm: Work with John R to make sure we're on the same 'page'.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913157</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11272273</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
* PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h2. Building our old version of Europa/Plasma

&nbsp;One most apply the attached patch to build our old version of the Europa/Plasma NDDL compiler/evaluator with GCC 4.3

&nbsp;To apply the patch and build it:
{code:none}
% cd $PLASMA_HOME
% patch -p1 < plasma-gcc4.3.patch
% jam && jam
{code}

\\

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
To compile TREX libraries, first download the Boost C+\+ library ([http://www.boost.org/]) and install it following the instructions outlined in the site.  Then compile TREX in a similar manner as Europa:
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated via a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher.

&nbsp;Note that threadfish.shore has a *ready to go binary* for AUV-Linux. Log in as 'dorado1' and cd down to 'coding/auv-linux'.

h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% omniNames&
% notifd -c $OMNINOTIFY_HOME/channel.cfg&

% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] <nstep>
Use <nstep> = 50
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11239506</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670204</id>
<property name="body"><![CDATA[\\ \\

h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}

\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\ \\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00

E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080

007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF468

19F04C10088000000000000000000000000010A0031004400008000800080008000800080008000800

08000800080008000800080008000800080008000800080008000800080008000800080008000800080

00800080008000800080008000800080008000800080008000800080008000800080008000800080008

00080008000800080008000800080008000800080008000800080008000800080008000800080008000

80008000800080008000800080008000800080008000800080008000800080008000800080008000800

080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C06

0E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090

306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F45393

5362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B

2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B

2625272B2625272B2625282B2625282B00046400000000006400000064000000640000006400000064

00000064000000640000006400000064000000640000006400000064000000640000006400000064000

00064000000640000006400000064000000640000006400000064000000640000006400000601000000

DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A

0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637449</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179388</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

Driver porting and validation
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
*** /dev/ser7
** bluefinBatt
*** /dev/ser10
** crossbow
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status
**** Basic functional
** Biolume
*** tcp:sci3-dmo1:14002
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status
**** Basic functional
** imagenex
* Other (from QNX cfg file)
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** dropWeightServer \-dev /dev/ser13
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:2401/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
** Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
** Output on March 10:
*** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
*** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
*** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
*** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
*** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
*** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
*** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
*** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
*** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
*** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
*** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
*** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
*** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
*** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
*** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
*** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
*** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
*** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
*** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
*** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
*** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
*** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
*** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
*** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
*** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
*** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
*** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
*** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
*** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
*** The driver then processes records normally without fault (tested for 20 minutes)
** &nbsp;\\
** Ashtec GPS driver
*** &nbsp;Upon application of power,
**** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
**** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
**** *$PASHQ,HST to view results of self-diagnostic*
**** *Time to First Fix (TTFF).** *Re-acquisition 3 seconds*
* *Hot Start 11 seconds*
* *Warm Start 35 seconds*
* *Cold Start 90 seconds*
**** &nbsp;The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc** f1 Receiver name (maximum 10 characters)
* f2 Main processor firmware version (maximum 10 characters)
* f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
* f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
* f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
* cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*) characters
**** *Option Description:&nbsp;&nbsp; (typical string looks like* \\
*$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D:)** Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
* \[O\] Raw data output
* \[P\] Carrier phase tracking
* \[U\] Differential RTCM - remote station
* \[B\] Differential RTCM - base station
* \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
* \[L\] Timing pulse output (1PPS)
* \[E\] Photogrammetry event marker
* \[C\] Strobe correlator
* \[N\] Beacon (Not applicable to DG14)
* \[Y\] SBAS
* \[X\] User-defined messaging (Not applicable to DG14)
* \[D\] Multi-base differential
* \[R\] Third serial port (C) (Not applicable to DG14)
* \[A\] Altitude limit removed
* \[V\] Speed limit removed*** Test&nbsp;results&nbsp;
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
*** &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113903</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670205</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to develop termios serial driver and validate 12 port serial card kernel driver.&nbsp;&nbsp;Tune hardware
* Recommend build-up of a test PC104 (Lippert board) + Xtreme104 12 port serial card with harddisk.

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;


h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.
\\
\\
[Driver Porting Details]
\\
\\
&nbsp;

h4. \\


h3.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637450</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179390</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

Driver porting and validation
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
*** /dev/ser7
*** 9600 8N1
** bluefinBatt
*** /dev/ser10
** crossbow
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status
**** Basic functional
** Biolume
*** tcp:sci3-dmo1:14002
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status
**** Basic functional
** imagenex
* Other (from QNX cfg file)
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** dropWeightServer \-dev /dev/ser13
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:2401/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
* &nbsp;
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic\*
*** Time to First Fix (TTFF).
*** Re-acquisition 3 seconds
*** Hot Start 11 seconds
*** Warm Start 35 seconds
*** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
**** Test results
** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113905</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670200</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to develop termios serial driver and validate 12 port serial card kernel driver.&nbsp;&nbsp;Tune hardware
* Recommend build-up of a test PC104 (Lippert board) + Xtreme104 12 port serial card with harddisk.

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;


h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.
\\
\\
[Driver Porting Details]
\\
\\
&nbsp;

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637445</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179384</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

Driver porting and validation
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
*** /dev/ser7
** bluefinBatt
*** /dev/ser10
** crossbow
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status
**** Basic functional
** Biolume
*** tcp:sci3-dmo1:14002
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status
**** Basic functional
** imagenex
* Other (from QNX cfg file)
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** dropWeightServer \-dev /dev/ser13
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:2401/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
** Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
** Output on March 10:
*** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
*** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
*** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
*** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
*** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
*** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
*** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
*** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
*** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
*** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
*** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
*** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
*** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
*** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
*** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
*** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
*** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
*** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
*** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off).
*** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
*** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
*** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
*** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
*** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
*** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
*** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
*** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
*** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
*** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
*** &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113899</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670199</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to validate 12 port serial card kernel drivers, aid in proper tuning

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;


h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
** Serial Device driver.
*** Verify serial port throughput (SerTest) and resolve linux kernel driver or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.
\\
\\
[Driver Porting Details]
\\
\\
&nbsp;

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637444</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670202</id>
<property name="body"><![CDATA[]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637447</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179386</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

Driver porting and validation
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
*** /dev/ser7
** bluefinBatt
*** /dev/ser10
** crossbow
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status
**** Basic functional
** Biolume
*** tcp:sci3-dmo1:14002
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status
**** Basic functional
** imagenex
* Other (from QNX cfg file)
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** dropWeightServer \-dev /dev/ser13
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
\\
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:2401/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
**** exit back to user auv
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run a sample driver
**** &nbsp;
**** mkdir /home/auv/prj/auv-linux/onboard/logs/latest
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
** Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
** Output on March 10:
*** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
*** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
*** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
*** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
*** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
*** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
*** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
*** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
*** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
*** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
*** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
*** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
*** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
*** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
*** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
*** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
*** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
*** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
*** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
*** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
*** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
*** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
*** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
*** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
*** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
*** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
*** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
*** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
*** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
*** The driver then processes records normally without fault (tested for 20 minutes)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113901</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670196</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to validate 12 port serial card kernel drivers, aid in proper tuning

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;


h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux Install]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
** Serial Device driver.
*** Verify serial port throughput (SerTest) and resolve linux kernel driver or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.
\\
\\

\\
\\
&nbsp;

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Driver Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
* A good DVL record in PD0 format (1466 bytes) looks like

7F7FDB02000714004F0088005201B8011E028402000009124A42002C041901009001B00001400B00E80300003C13941100007D1D5A029E010105320026004D00000248B1150900000000000000000080007E0008040A04193A1000000003060000AA2C27FFB9002300790A000007000000FFFF4DFFFF46819F04C10088000000000000000000000000010A003100440000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800002485252305F6823264F551F0C25270E0814180D05120D050A090C060E0C0A03090A09071302090D0402080908080D0B0407080C070A0406060C08030A0A0A0A0603090306060C060C040705070C0E060A0906070A0C0B0805070708070A07060D0708060D0003483F453935362E2D2D2D2B2B2A29292A2827272A2826272A2726282A2625292B2624282B2625282B2624292B2625262A2625282B2625282A2624262B2624272B2625272B2625262B2624282B2625292A2625282B2625272B2625272B2625282B2625282B000464000000000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000064000000640000006400000601000000DC1E0005E80300000000000000000000000000800080008000800000000000000000000064000A000A0064000700D6002700AA00C0CA88850000000000000064C40900000000000000000001000100C03A6D74
\\

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637440</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179380</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

Driver porting and validation
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
** bluefinBatt
** crossbow
** parosci
** sonardyne
** tailcone
** Teledyne
* Science drivers
** Seabird
** Hydroscat
*** Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Biolume
** lisst
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** imagenex

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs)&nbsp; (1.5 hrs)
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:2401/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for permanance after boot
*** su root
*** cd $AUV_PKGS
*** . 1_omniORB.bat
*** . 2_omniNotify.bat
*** . 3_gctpc.bat
*** . 4_apr.bat
*** . 5_apr-util.bat
*** . 6_log4cxx.bat
*** . 7_netcdb.bat
*** . 8_newmat.bat
*** . 9_cppunit.bat
*** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** exit back to user auv
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
** Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600009d080e000000fef0e0ce4700
003491000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
10:05:36.896 INFO \[AuvApplication\] You should override AuvApplication::run()
** 10:05:36.900 INFO \[Hydroscat\] stopping Hydroscat...
Segmentation fault
auv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e31360000330e0e000000fefae0ce4700
003499000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
10:05:46.321 INFO \[Hydroscat\] stopping Hydroscat...
10:05:46.337 INFO \[AuvApplication\] You should override AuvApplication::run()
** Segmentation fault
auv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113895</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">8945913</id>
<property name="body"><![CDATA[*Brent*:
Wait for tutorial on AUV Linux (this Wed 4th @ 2pm)
March 26 is for integrating VCSServer w/ Linux. Brent is aware that we would like to have an "integrated" VCSServer with the T-REX port which is adequately tested.

*Thom*:

Coverity for static analysis of T-REX+EUROPA code base needed. However, Coverity is single project license. Need $2500 for additional project license. Should be institute wide not just project wide.

Will build T-REX under Debian this week and report back.

*Fred*:


Testing modem for the Front following effort shows a bug on the T-REX side. Note that one can receive a msg. from modem within T-REX without sending it via Iridium. Effective way to test.
KDD paper is another focus of attention this week.



*Hans:*

Initialization problem on AL3A modem could be because of&nbsp; handshaking. Needs to investigate.
Q: What needs to be done to get a 20\+ hr mission using T-REX? Essentially T-REX is 'ready'. But to ensure that schedules mesh and we get maximum time in the water + data, important to start thinking of longer duration (and overnight) runs. Also need a way to abort T-REX over the Iridium if/when something goes wrong and vehicle is being tracked from shore. And need to figure out how to re-target the vehicle over the modem to go to a new waypoint so that one can send a waypoint from shore which is used to abort the T-REX plan and generate a waypoint to pick up the vehicle.&nbsp;The fundamental issue is how T-REX terminates. Some progress towards this has been implemented by Frederic for Front following.

Do not have a clean way to wrap up a Volume Survey however.&nbsp; ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">8913155</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11272259</id>
<property name="body"><![CDATA[The following are _some_ of the critical events for 2010 for the autonomy project. It includes CANON related events which are likely to have an impact on us and/or require our collective participation. Travel events relate to where some of us will likely be out; target paper deadlines are for journal articles that I expect we will be writing up. Additional papers for other conferences (including MTS/Oceans) are not included. Two seminars (Tambe: Distributed Control and Baliga: Systems Biology) are of likely interest and potential importance to us all.

&nbsp;Note this is a living document and likely to change.\\

!Timeline-2010.jpg|align=center,width=32,height=32!
&nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11239492</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11272262</id>
<property name="body"><![CDATA[This page will refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09
* [Autonomy Deployment Log]

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [Monte-Carlo Testing guide|https://oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect
* [Autonomy Plans for 2010 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans10.pdf]
* [Autonomy timeline and critical events 2010|https://oceana.mbari.org/confluence/download/attachments/8912901/Timeline-2010.pdf]
* [Decision Support for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/CANON.pdf]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11239495</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179382</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

Driver porting and validation
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
* Navigation drivers
** ashtec(gps)
*** /dev/ser7
** bluefinBatt
*** /dev/ser10
** crossbow
** parosci
*** /dev/ser5
** sonardyne
** tailcone
*** /dev/ser3
** Teledyne
*** /dev/ser6
* Science drivers
** Seabird
*** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
*** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Hydroscat
*** tcp:sci2-dmo1:14002&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
*** Status
**** Basic functional
** Biolume
*** tcp:sci3-dmo1:14002
** lisst
*** tcp:sci3-dmo1:14001&nbsp;
*** Actions
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
*** Status
**** Basic functional
** imagenex
* Other (from QNX cfg file)
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** dropWeightServer \-dev /dev/ser13
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \\ \\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** &nbsp;
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs)&nbsp; (1.5 hrs)
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:2401/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for permanance after boot
*** su root
*** cd $AUV_PKGS
*** . 1_omniORB.bat
*** . 2_omniNotify.bat
*** . 3_gctpc.bat
*** . 4_apr.bat
*** . 5_apr-util.bat
*** . 6_log4cxx.bat
*** . 7_netcdb.bat
*** . 8_newmat.bat
*** . 9_cppunit.bat
*** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** exit back to user auv
\\
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj
* Drivers:
** Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600009d080e000000fef0e0ce4700
003491000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
10:05:36.896 INFO \[AuvApplication\] You should override AuvApplication::run()
** 10:05:36.900 INFO \[Hydroscat\] stopping Hydroscat...
Segmentation fault
auv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e31360000330e0e000000fefae0ce4700
003499000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
10:05:46.321 INFO \[Hydroscat\] stopping Hydroscat...
10:05:46.337 INFO \[AuvApplication\] You should override AuvApplication::run()
** Segmentation fault
auv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3113897</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11272261</id>
<property name="body"><![CDATA[The following are _some_ of the critical events for 2010 for the autonomy project. It includes CANON related events which are likely to have an impact on us and/or require our collective participation. Travel events relate to where some of us will likely be out; target paper deadlines are for journal articles that I expect we will be writing up. Additional papers for other conferences (including MTS/Oceans) are not included. Two seminars (Tambe: Distributed Control and Baliga: Systems Biology) are of likely interest and potential importance to us all.

&nbsp;Note this is a living document and likely to change.
\\ !Timeline-2010.jpg!
&nbsp;

&nbsp;
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11239494</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">918</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development
[Linux Port]
[Source Code]

h2. Meeting Minutes
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">921</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">917</id>
<property name="body"><![CDATA[RH: AMC agent class created in the vehicle tree
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + socket server listens for commands
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + string us unencoided
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + can send the vehicle state even if there is no listener
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + Fred has socket on client side
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + RH code in CVS not SVN
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + need to agree on data structure (RW needs to check in on CVS side)
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + Keep header file on CVS side for now
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + will need a port number
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + implement a local port for both client and server will be needed as a stub
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + RH has implemented a simple client stub just for testing
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + added a capability to add some behavior in the middle of the stack data structure
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + Stack is a dynamic array not a linked list

CM:&nbsp;&nbsp;&nbsp; Have subversion running

&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + naming is T-REX for the project name in svn
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + underneath is the agent
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + CTD-2007 project is specific for this year
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + path network given in detail
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + Hans will give a specific mission in MB which will have waypoints
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + Need to have a mechanism to generate input made available automatically by automated generation
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + Need to have a mechanism which is usable - at a basic level, science goals are associated with a link
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + Hans: reason dynamically about energy state and surfacing events.
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + path generation is not optimal but can reason about the path networks - uses resources to find if goals are achieved
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + network restricts spatially what the vehicle can do
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + then we ask the vehicle WHAT to do
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + Hans: for operational use of network maps, can use MB System from Caress as a possibility
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + Hans: Huxley using multiple vehicle modalities (yo-yo, flying) are difficult to put together
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + Behaviors interaction will be modeled inside the planner
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + All behaviors will now be available for possible use rather than being in a library hierarchy
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + Goto Waypoint simply sets the bearing and then is used to determine when waypoint is reached
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + If waypoint behavior is killed then vehicle will keep heading in the same direction; so need to figure out - careful with how the waypoint behavior is cleaned
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + Need to tackle the behavior dependency
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + Gulper arming and firing need to be coordinated so that latency is minimized; will need to figure out how to coordinate the instruments primitives
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + Guarantees that something is on the stack always
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + behavior has a "should run" (horizontal/vertical) method to disambiguate which can and cannot run for modeling inside planner
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; +

RM:&nbsp;&nbsp;&nbsp; adding to StatePackage.h to what comes out in TLM
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + adds to the state vector
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + hooked into SIM and can see the contents of State

Hans:&nbsp;&nbsp;&nbsp; Stack on lab
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + should finished by tomorrow Wed 21st
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + then needs to drill into the ball and stick things inside
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; + rig a switch to turn on the AMC on/off

(might go out Fri for MultiBeam)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">920</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">920</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development
[Linux Port]
[Source Code]

h2. Meeting Minutes
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]
[2007-02-20 Autonomy project|Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">923</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">919</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development
[Linux Port]
[Source Code]

h2. Meeting Minutes
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]
[2007-02-20 Autonomy project|]

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">922</id>
</property>
</object>
<object class="Labelling" package="com.atlassian.confluence.labels">
<id name="id">30867461</id>
<property name="label" class="Label" package="com.atlassian.confluence.labels"><id name="id">6422536</id>
</property>
<property name="content" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">750</id>
</property>
<property name="spaceKey"><![CDATA[AUV]]></property>
<property name="user"><![CDATA[headley]]></property>
<property name="creationDate">2019-01-07 16:00:23.610</property>
<property name="lastModificationDate">2019-01-07 16:00:23.610</property>
</object>
<object class="Labelling" package="com.atlassian.confluence.labels">
<id name="id">9011204</id>
<property name="label" class="Label" package="com.atlassian.confluence.labels"><id name="id">9142273</id>
</property>
<property name="content" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">750</id>
</property>
<property name="spaceKey"><![CDATA[AUV]]></property>
<property name="user"><![CDATA[kanna]]></property>
<property name="creationDate">2009-02-02 11:27:26.187</property>
<property name="lastModificationDate">2009-02-02 11:27:26.187</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10387545</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window (Term 2), login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# \[dorado1@trex2 \~\]$ *cd amc*
# \[dorado1@trex2 amc\]$ *. config.amc*
# Check the Iridium Modem
## *% minicom iridium*&nbsp;&nbsp; (dev/ttyS0 9600 8N1)
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, switch back to Term1 (mvc-dmo1 qnx)
### bash-2.00$ *cd $AUV/bin*
### bash-2.00$ *reset_a3la*&nbsp;&nbsp; (toggle modem power)&nbsp;
## Switch back to Term2 (trex2)&nbsp;minicom session&nbsp;
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In Term 3:
### \[dorado1@trex2 amc\]$ *nal \-dev /dev/ttyS0*
### should see startup, and then:&nbsp; &nbsp;\[AuvApplication\] run() - just sleeps by default
## In Term 2:
### \[dorado1@trex2 amc\]$ *cd $AUV_HOME/onboard/devices/iridium/tests*
### \[dorado1@trex2 tests\]$ *storefwdclient \-f test-a3la.sbd*
### Observe the nal driver output in Term3 and also examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# in Term3 Start the nal driver for the vsim test
## \[dorado1@trex2 amc\]$ *nohup nal \-dev /dev/ttyS0 &*
## \[dorado1@trex2 amc\]$ *tail \-f nohup.out*&nbsp; &nbsp; (check the nal driver is running - look for \[AuvApplication\] run() - just sleeps by default)
# Test the modem with a text file
## \[dorado1@trex2 tests\]$ *storefwdclient&nbsp;&nbsp;*&nbsp;&nbsp; (enter a meaningful&nbsp;test message and then wait)
## tail \-f nohup.out in Term3 or tail \-f modem.log
## If the storefwdclient fails to send the message, start storefwdclient again with no messages (enter, enter)
## A successful message from Term2 (storefwdclient looks like:

{code}
"StoreAndForward.Downlink succeeded" payload: This is Thom running VSIM at 2:45 on 2 May 2009
Got StoreAndForward event: ConnectModem complete
Done.
terminate called after throwing an instance of 'omni_thread_fatal'
{code}
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# In Term2 (trex2), make sure the config&nbsp;file is correct for vsim&nbsp;
## % \[dorado1@trex2 tests\]$ *cd \~/amc/missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In Term1&nbsp;(mvc-dmo1), startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# In Term2 Move back to the T-REX stack to fire up the T-REX client
# \[dorado1@trex2 missions\]$ *nohup ../exec/amc_o_rt front.cfg&nbsp;&nbsp;&*&nbsp;&nbsp;&nbsp; (For the time being, mission file is front.cfg).&nbsp;&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
## in Term1, bash-2.00$ *ps \-a*

{code}
  PID  PGRP SID PRI STATE   BLK  SIZE COMMAND
   17     7   0 24f  RECV     0  632K (//9/bin/Dev32)
   22     7   0 10r  RECV     0  216K (//9/bin/Pipe)
   24     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   25     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   26     7   0 20r  RECV     0  300K (//9/bin/Dev.ctiser)
   27     7   0 20r  RECV     0  440K (//9/bin/Dev32.ansi)
   31     7   0  9o  RECV     0  148K (//9/bin/Dev32.par)
   32    17   0 20r  RECV     0  316K (//9/bin/Dev32.pty)
   36     4   0 10o  RECV     0 18272K (//9/bin/Fsys.floppy)
   37     7   0 10o  RECV     0   56K (//9/bin/Iso9660fsys)
   40     7   0 20o  RECV     0   20K (//9/bin/nameloc)
   41     7   0 20o REPLY     0   16K (//9/bin/nameloc)
   43     7   0 10o  RECV     0  120K (//9/bin/Dosfsys)
   45     7   0 23r  RECV     0  336K (//9/bin/Net)
   47     7   0 20r  RECV     0  348K (//9/bin/Net.ether82557)
   48     7   0 20r  RECV     0   56K (//9/bin/Net.ether1000)
   87     7   0 10o  WAIT    -1   28K (//9/bin/tinit)
   90     7   0 10o  RECV     0   20K (//9/bin/tinit)
   91     7   0 14o  RECV     0   68K (//9/bin/Mqueue)
28928 28123   2 10o REPLY     0   36K supervisor -plan AmcPlan.cfg -dyno
28942 28123   2 10o REPLY    22   16K tee -i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
28951 28123   2 10o  RECV     0   28K eventLogServer
28953 28123   2 18o  RECV     0   64K workSite
22812 28123   2 14o  RECV     0   72K vehicleConfigurationServer
28959 28123   2 10o  RECV     0   32K externalCommsServer
28963 28123   2 14o  RECV     0  112K navigationServer
22820 28123   2 10o  RECV 28983   32K externalComms
28968 28123   2 10o  RECV     0  140K layeredControl erver -dyno -plan AmcPlan.cfg -abort
28970 28123   2 18o  RECV     0  132K navigation
28972 28123   2 14o  RECV     0   56K dynamicControlServer
28973 28123   2 14o  RECV     0  176K layeredControl -dyno -plan AmcPlan.cfg -abort abortMplan.cfg
28985 28123   2 14o  RECV     0  148K simulator
22331 28123   2 14o  RECV     0   28K simTailCone
22333 28123   2 18o  RECV     0   32K simAhrs
28991 28123   2 18o  RECV     0   72K simGps
28993 28123   2 18o  RECV     0   28K simDepthSensor
 2375 28123   2 10o  RECV     0   60K seabirdServer -n CtdIFServer -dev tcp:sci1-dmo1:10001
22857 28123   2 10o  RECV     0   60K seabirdServer -n ctdDriver2 -dev tcp:sci1-dmo1:10002
29003 28123   2 10o  RECV 29009   92K seabirdDriver -n CtdIFServer -serial tcp:sci1-dmo1:10001,9600,8,n,1
29004 28123   2 10o  RECV 29010   92K seabirdDriver -n ctdDriver2 -serial tcp:sci1-dmo1:10002,9600,8,n,1
22862 28123   2 18o  RECV     0   48K simDvl
29011 28123   2 10o  RECV     0   48K dropWeightServer -dev /dev/ser13
22869 28123   2 10o  RECV     0   64K statePublisher
22872 28123   2 10o REPLY    17   52K dropWeight -serial /dev/ser13,9600,8,n,1
28125 28123   2 10o  RECV 28926   64K ./vcsServer -v
[1]+  Exit 221                nohup ./vcsServer -v


{code}

h1. Hardware-in-the-loop Test

Open 4 terminal sessions

h5. Term1:&nbsp;

*telnet mvc-dmo1*

bash-2.00$ *cd /home/dorado1/auv_autonomy*

bash-2.00$ *. configSrc*

bash-2.00$ *qtalk \-m /dev/ser13*
*\!a<enter>*&nbsp; (look for gulperFB=1), then *ctrl-a, x*
\\
\\

h5. Term2:&nbsp;&nbsp;

*ping trex2* (waiting for the boot)&nbsp;

*ssh trex2*

\[dorado1@trex2 dorado1\]$ *cd amc*&nbsp; (/home/dorado1/amc)

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 amc\]$ *cd missions*

\[dorado1@trex2 missions\]$ *cat vcs.cfg*
{code}
<!-- Configuration file used byt VCS/CORBA adapter and others to --
  -- declare the timelines which interface with the vehicle and other --
  -- parameters.
     Note : the remoteName should preferably be  by default (at least --
  -- on svn) mvc-dmo1 other attributes of the main tag ashould _not_ --
  -- be changed ! (except you know exactly what you are doing)
-->
<Config log="1" localPort="8002" remoteName="mvc-dmo1" remotePort="8004" missionStart="init.cfg">
        <Timeline name="vehicleState"  command="0" />
        <Timeline name="setpoint" class="Setpoint" command="1" />
        <Timeline name="descend"  class="Descend" command="1" />
        <Timeline name="ascend"   class="Ascend" command="1" />
        <Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
        <Timeline name="getgps" class="GPS" command="1" />
        <Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
\[dorado1@trex2 missions\]$
\\
\[dorado1@trex2 missions\]$ *cat amc.cfg*
{code}
<!-- This file is the basic configuration for:
     - connecting to the auv (QNX or Linux)
     - and send/receive messages through the iridium modem.
     As fo now the connect is set to 1 by default as this file should
     be used on "real" conditions.
-->
<Config>
        <!- Use this component when running onboard ->
        <TeleoReactor name="vcs" component="VCSAdapter"/>         <TeleoReactor name="exec" component="DeliberativeReactor"
                lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>
        <TeleoReactor name="downlink" component="Downlink" lookAhead="1" latency="0" log="1" connect="1" config="downlink.cfg"/>
        <!- Skipper has 10 Hour lookahead. ->
        <TeleoReactor name="skipper" component="DeliberativeReactor"
                lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg"/>
</Config>
{code}

h5.


h5. Term3:

*slogin trex2*&nbsp;&nbsp;&nbsp; (or ssh trex2)

\[dorado1@trex2 amc\]$ *cd amc*

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 \~\]$ *minicom iridium*
Then type "*AT*" and look for "OK" (no quotes)

If the vehicle has just been powered up, there is no response so you'll need to enable the A3LA modem power

h5. Term1:

Switch back to Term1 (QNX mvc-dmo1) to toggle the modem power

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *reset_a3la*

h5. Term3:&nbsp;

Switch back to Term3 where minicom is running and type "AT", sometimes it says ERROR, just type AT again

Here's a sample of the minicom session:
{code}
Welcome to minicom 2.1
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jul 26 2006, 06:38:09.
Press CTRL-A Z for help on special keys
ERROR
OK
+SBDI: 0, 1602, 0, 0, 0, 0
OK
{code}
type ctrl-a, then x to leave minicom
\\

h5. Term4 (trex2):

\[dorado1@trex2 \~\]$ *cd amc*
\[dorado1@trex2 amc\]$ *. config.amc*
\[dorado1@trex2 amc\]$ *cd $AUV_HOME/onboard/bin*
\[dorado1@trex2 auv-linux\]$ *pwd*
/home/dorado1/auv-linux/onboard/bin

\[dorado1@trex2 bin\]$ *nohup ./nal \-dev /dev/ttyS0 &*
{code}
[1] 1968
[dorado1@trex2 bin]$ nohup: appending output to `nohup.out'
{code}
\[dorado1@trex2 bin\]$ *tail \-f nohup.out*
\\
{code}
terminate called after throwing an instance of 'omni_thread_fatal'
Reading log4cxx configuration file "/home/dorado1/auv-linux/onboard//sampleConfig/log4cxx.cfg"
14:20:15.598 DEBUG [NALDriver] read +GCMI response
14:20:15.623 INFO [NALDriver] manufacturer:
OK
14:20:15.623 INFO [NALDriver] initialize() complete
IOR:010000001a00000049444c3a6175762f53746f7265416e6446776449463a312e300<snip>000
14:20:15.643 DEBUG [NALApp] Leaving NALApp.initialize()
14:20:15.644 INFO [AuvApplication] run() - just sleeps by default
{code}
Then tail the modem.log

\[dorado1@trex2 bin\]$ *cd $AUV_LOG_DIR*
\[dorado1@trex2 logs\]$ *tail \-f modem.log*

\\
&nbsp;

h5. In Term3:

&nbsp;\[dorado1@trex2 bin\]$ *storefwdclient*&nbsp;&nbsp;&nbsp; (type in a descriptive test string like "This is the vehicle on the zephyr hardware in the loop test by Thom")

Check to see that the email arrived, \[auvsbd\] SBD Msg From Unit: 300003000227440, with an \*.sbd as attachment.&nbsp;&nbsp; Open the attachment with a text editor to verify the message
\\

h5. In Term1:

bash-2.00$ *cd $AUV_CONFIG_DIR*&nbsp;

bash-2.00$ *cp devices.test.cfg devices.cfg*

h5. In Term2 (trex2 in missions dir)

Verify the settings in init.cfg

\[dorado1@trex2 missions\]$ *pwd*
/home/dorado1/amc/missions
\[dorado1@trex2 missions\]$ *cat init.cfg*
\\
{code}
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
{code}

h5. In Term1 (mvc-dmo1):

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *nohup ./vcsServer \-v &*
\[1\] 8344
bash-2.00$ *ps \-a*
{code}
 8346  8344   2 10o REPLY    82   64K ./vcsServer -v
[1]+  Exit 154                nohup ./vcsServer -v
bash-2.00$ cd $AUV_LOG_DIR
bash-2.00$ ls
2009.117.00/              2009.119.00/              latest@
2009.118.00/              2009.119.01/              nov.13th.vcs.tar
2009.118.05/              CVS/                      testLogs/
2009.118.06/              VcsServer.log.0
{code}
bash-2.00$ *cd ../logs*

bash-2.00$ *tail \-f VcsServer.log.0*

h5. In Term2:

\[dorado1@trex2 missions\]$ *nohup ../exec/amc_o_rt msg.timing.1.cfg &*
\[dorado1@trex2 missions\]$ *cd ../log/*
\[dorado1@trex2 log\]$ *tail \-f latest/TREX.log*
\\

bash-2.00$ *tail \-f VcsServer.log.0*
\\
{code}
62940673.813,
######################### Wed Apr 29 21:31:13 2009
62940673.943, VcsServer -- configuration:
        Port = 8004 ms
62940673.943, VcsServer: Socket created on fd 6
62940673.993, VcsServer - running
62940853.801, VcsServer: Connected to client on 134.89.32.39
62940853.801, VcsServer[t=0, delta=0]: Grabbing data
62940853.981, VcsServer:initMission:
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
}
62940854.331, VcsServer::initMission() - starting supervisor
62940855.371, VcsServer::openLC() - created IF with LayeredControl
62940855.671, VcsServer[t=1.86987, delta=1.86987]: Grabbing data
62940891.739, VcsServer: ack - STARTED:0
62940952.044, VcsServer::handleLCMessages() - AMC mission started
62940952.044, VcsServer: ack - FINISHED:0
62941028.259, VcsServer: ack - FINISHED:5167
62941033.779, VcsServer: handling insertBehavior
62941034.039, VcsServer: ack - STARTED:6226
62941037.969, VcsServer[t=184.167, delta=0.43997]: Grabbing data
<snip> 
62941045.198, VcsServer: ack - FINISHED:6226
62941052.248, VcsServer: No ping received for 7 of up to 12 seconds
62941053.058, VcsServer: No ping received for 8 of up to 12 seconds
62941054.137, VcsServer: No ping received for 9 of up to 12 seconds
62941055.217, VcsServer: No ping received for 10 of up to 12 seconds
62941055.697, VcsServer::recvString - received 0 bytes when expected 4 (uint32_t) !!!
62941055.697, Received a NULL message : should no happen.
{code}\\
\\
\\
\\
\\
\\

bash-2.00$ ps \-a
{code}
  PID  PGRP SID PRI STATE   BLK  SIZE COMMAND
 8707  8344   2 14o  RECV     0   60K dynamicControlServer
   17     7   0 24f  RECV     0  632K (//9/bin/Dev32)
 8726  8344   2 14o  RECV     0  176K layeredControl -dyno -plan AmcPlan.cfg -abort abortMplan.cfg
   23     7   0 10r  RECV     0   32K (//9/bin/Pipe)
   24     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   25     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   26     7   0 20r  RECV     0  300K (//9/bin/Dev.ctiser)
   27     7   0 20r  RECV     0  440K (//9/bin/Dev32.ansi)
   31     7   0  9o  RECV     0  148K (//9/bin/Dev32.par)
   32    17   0 20r  RECV     0  316K (//9/bin/Dev32.pty)
   36     4   0 10o  RECV     0 18272K (//9/bin/Fsys.floppy)
   37     7   0 10o  RECV     0   56K (//9/bin/Iso9660fsys)
   40     7   0 20o  RECV     0   20K (//9/bin/nameloc)
   41     7   0 20o REPLY     0   16K (//9/bin/nameloc)
   43     7   0 10o  RECV     0  120K (//9/bin/Dosfsys)
   45     7   0 23r  RECV     0  336K (//9/bin/Net)
   47     7   0 20r  RECV     0  348K (//9/bin/Net.ether82557)
   48     7   0 20r  RECV     0   56K (//9/bin/Net.ether1000)
 8754  8344   2 18o  RECV     0  132K navigation
 8756  8344   2 14o  RECV     0   64K newTailConeServer -dev /dev/ser3
 8758  8344   2 18o  RECV     0   60K m3dmgx1Server -dev /dev/ser12 -useForNav
 8761  8344   2 19o REPLY     0   96K newTailConeDriver -dev /dev/ser3,9600,8,n,1
 8762  8344   2 18o  RECV     0   48K gpsServer -r ashtech -dev /dev/ser7
 8766  8344   2 10o  RECV     0   88K m3dmgx1 -serial /dev/ser12,9600,8,n,1
 8767  8344   2 10o  RECV     0   60K parosciServer -dev /dev/ser5
 8772  8344   2 10o  RECV  8791   60K ashtechDriver -serial /dev/ser7,9600,8,n,1
 8773  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver -dev tcp:sci1-dmo1:10001
 8774  8344   2 19o REPLY    17   84K parosci -serial /dev/ser5,9600,8,n,1
 8778  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver2 -dev tcp:sci1-dmo1:10002
 8779  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver -serial tcp:sci1-dmo1:10001,9600,8,n,1
 8782  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver2 -serial tcp:sci1-dmo1:10002,9600,8,n,1
 8793  8344   2 10o  RECV     0   52K bluefinBattServer -dev /dev/ser10
 8796  8344   2 18o  RECV     0   52K dvlServer -dev /dev/ser6
   94     7   0 10o  WAIT    -1   28K (//9/bin/tinit)
 8799  8344   2 10o REPLY     0   68K bluefinBattDriver -dev /dev/ser10
   98     7   0 10o  RECV     0   20K (//9/bin/tinit)
   99     7   0 14o  RECV     0   68K (//9/bin/Mqueue)
 8804  8344   2 10o REPLY    17   80K dvl -serial /dev/ser6,9600,8,n,1
 8806  8344   2 10o  RECV     0   48K dropWeightServer -dev /dev/ser13
 8814  8344   2 10o  RECV     0   64K statePublisher
 8818  8344   2 10o READY         52K dropWeight -serial /dev/ser13,9600,8,n,1
 8346  8344   2 10o REPLY     0   64K ./vcsServer -v
 8658  8344   2 10o REPLY     0   36K supervisor -plan AmcPlan.cfg -dyno
 8667  8344   2 10o REPLY    23   16K tee -i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
 8675  8344   2 10o  RECV     0   28K eventLogServer
 8677  8344   2 18o  RECV     0   64K workSite
 8679  8344   2 18o  RECV     0   72K vehicleConfigurationServer
 8682  8344   2 10o  RECV     0   32K externalCommsServer
 8686  8344   2 14o  RECV     0  112K navigationServer
 8688  8344   2 10o  RECV  8760   32K externalComms
 8690  8344   2 10o  RECV     0  140K layeredControl erver -dyno -plan AmcPlan.cfg -abort
{code}
bash-2.00$ *slay supervisor*
bash-2.00$ *ps \-a&nbsp;&nbsp;*

h5. In Term2 (trex2):

Verify that amc_o_rt has terminated

\[dorado1@trex2 log\]$ *ps \-elf \| grep amc*
0 R dorado1&nbsp;&nbsp; 2040&nbsp; 1761&nbsp; 0&nbsp; 78&nbsp;&nbsp; 0 \-&nbsp;&nbsp; 975 \-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14:45 pts/0&nbsp;&nbsp;&nbsp; 00:00:00 grep amc

Verify that TREX did not have a problem (relax in the log is BAD)
\\
\[dorado1@trex2 log\]$ *grep relax latest/TREX.log*
\[dorado1@trex2 log\]$
\\

Before turning off the power to the&nbsp;vehicle,&nbsp;shutdown the OS on TREX2 and mvc-dmo1 to prep for power off

\[dorado1@trex2 logs\]$ su root
Password:
\[root@trex2 logs\]# /sbin/shutdown now

Broadcast message from root (pts/2) (Wed Apr 29 14:48:07 2009):

The system is going down to maintenance mode NOW\!
\[root@trex2 logs\]#

In Term1:

bash-2.00$ su root
bash-2.00# shutdown \-b

h4. Testing goal posting through iridium

starts the mission  msg.timing.1.cfg

\[dorado1@trex2 missions\]$ *../exec/amc_o_rt msg.timing.1.cfg*

look for the creation of the pipe on TREX.log

\[dorado1@trex2 missions\]$ *tail -f ../log/latest/TREX.log | grep listening*
\[downlink\] listening to "msg.timing.1.downlink" (fid=<a number>)

The pipe msg.timing.1.downlink (naming convention is <name of the mission>.downlink) has been created in the directory where TREX has been started (in this case ~/amc/missions). You can then send the goal through this pipe. Create a file goal.sbd with following content :
{code}
<Goal on="front" predicate="Front.Info">
 <Assert name="depth"><value type="float" name="17"/></Assert>
 <Assert name="temperature"><value type="float" name="1.520000e+01"/></Assert>
 <Assert name="mapDepth"><value type="float" name="30"/></Assert>
</Goal>
{code}
And send it in the pipe :
\[dorado1@trex2 missions\] *cat goal.sbd > msg.timing.1.cfg

{note}
this has to be done relatively quickly to avoid to miss the only communication window in msg.timing.1
{note}

then check that the goal has been correctly collected and dispatched before the end of the mission. You should see a message similar to this in TREX.log

\[downlink\]\[<number>\]Dispatching Front.Info(<a number>)
\[exec\]\[<number>\]Request received: ON front REQ Front.Info(<a number>)...




]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10354778</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10945022</id>
<property name="body"><![CDATA[This page will refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09
* [Autonomy Deployment Log]

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [Monte-Carlo Testing guide|https://oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10912267</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830867</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window, login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# Check the Iridium Modem
## *% minicom iridium*
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, exit minicom
### at the command line, enter 'reset_a3la' to run the modem power cycling script
#### *% reset_a3la*
## *% minicom iridium*
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In terminal session 1:
### % nal \-dev /dev/ttyS0
## In terminal session 2:
### % &nbsp;cd \~/auv-linux/onboard/devices/iridium/tests
### % storefwdclient \-f test-a3la.sbd
### examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# Start the nal driver for the vsim test
## % nohup nal \-dev /dev/ttyS0 &
## % tail \-f nohup.out&nbsp;&nbsp; (check the nal driver is running - look for sleep)
# Test the modem with a text file
## storefwd client<enter>&nbsp;&nbsp; (enter a test message and then wait)
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# On TREX2, make sure the config&nbsp;file is correct for vsim&nbsp;
## % *cd missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In the telnet to mvc-dmo1, startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# Move back to the T-REX stack to fire up the T-REX client
# *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\
\\

h1. Hardware-in-the-loop Test

Open 4 terminal sessions

h5. Term1:&nbsp;

*telnet mvc-dmo1*

bash-2.00$ *cd /home/dorado1/auv_autonomy*

bash-2.00$ *. configSrc*

bash-2.00$ *qtalk \-m /dev/ser13*
*\!a<enter>*&nbsp; (look for gulperFB=1), then *ctrl-a, x*
\\
\\

h5. Term2:&nbsp;&nbsp;

*ping trex2* (waiting for the boot)&nbsp;

*ssh trex2*

\[dorado1@trex2 dorado1\]$ *cd amc*&nbsp; (/home/dorado1/amc)

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 amc\]$ *cd missions*

\[dorado1@trex2 missions\]$ *cat vcs.cfg*
{code}
<!-- Configuration file used byt VCS/CORBA adapter and others to --
  -- declare the timelines which interface with the vehicle and other --
  -- parameters.
     Note : the remoteName should preferably be  by default (at least --
  -- on svn) mvc-dmo1 other attributes of the main tag ashould _not_ --
  -- be changed ! (except you know exactly what you are doing)
-->
<Config log="1" localPort="8002" remoteName="mvc-dmo1" remotePort="8004" missionStart="init.cfg">
        <Timeline name="vehicleState"  command="0" />
        <Timeline name="setpoint" class="Setpoint" command="1" />
        <Timeline name="descend"  class="Descend" command="1" />
        <Timeline name="ascend"   class="Ascend" command="1" />
        <Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
        <Timeline name="getgps" class="GPS" command="1" />
        <Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
\[dorado1@trex2 missions\]$
\\
\[dorado1@trex2 missions\]$ *cat amc.cfg*
{code}
<!-- This file is the basic configuration for:
     - connecting to the auv (QNX or Linux)
     - and send/receive messages through the iridium modem.
     As fo now the connect is set to 1 by default as this file should
     be used on "real" conditions.
-->
<Config>
        <!- Use this component when running onboard ->
        <TeleoReactor name="vcs" component="VCSAdapter"/>         <TeleoReactor name="exec" component="DeliberativeReactor"
                lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>
        <TeleoReactor name="downlink" component="Downlink" lookAhead="1" latency="0" log="1" connect="1" config="downlink.cfg"/>
        <!- Skipper has 10 Hour lookahead. ->
        <TeleoReactor name="skipper" component="DeliberativeReactor"
                lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg"/>
</Config>
{code}

h5.


h5. Term3:

*slogin trex2*&nbsp;&nbsp;&nbsp; (or ssh trex2)

\[dorado1@trex2 amc\]$ *cd amc*

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 \~\]$ *minicom iridium*
Then type "*AT*" and look for "OK" (no quotes)

If the vehicle has just been powered up, there is no response so you'll need to enable the A3LA modem power

h5. Term1:

Switch back to Term1 (QNX mvc-dmo1) to toggle the modem power

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *reset_a3la*

h5. Term3:&nbsp;

Switch back to Term3 where minicom is running and type "AT", sometimes it says ERROR, just type AT again

Here's a sample of the minicom session:
{code}
Welcome to minicom 2.1
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jul 26 2006, 06:38:09.
Press CTRL-A Z for help on special keys
ERROR
OK
+SBDI: 0, 1602, 0, 0, 0, 0
OK
{code}
type ctrl-a, then x to leave minicom
\\

h5. Term4 (trex2):

\[dorado1@trex2 \~\]$ *cd amc*
\[dorado1@trex2 amc\]$ *. config.amc*
\[dorado1@trex2 amc\]$ *cd $AUV_HOME/onboard/bin*
\[dorado1@trex2 auv-linux\]$ *pwd*
/home/dorado1/auv-linux/onboard/bin

\[dorado1@trex2 bin\]$ *nohup ./nal \-dev /dev/ttyS0 &*
{code}
[1] 1968
[dorado1@trex2 bin]$ nohup: appending output to `nohup.out'
{code}
\[dorado1@trex2 bin\]$ *tail \-f nohup.out*
\\
{code}
terminate called after throwing an instance of 'omni_thread_fatal'
Reading log4cxx configuration file "/home/dorado1/auv-linux/onboard//sampleConfig/log4cxx.cfg"
14:20:15.598 DEBUG [NALDriver] read +GCMI response
14:20:15.623 INFO [NALDriver] manufacturer:
OK
14:20:15.623 INFO [NALDriver] initialize() complete
IOR:010000001a00000049444c3a6175762f53746f7265416e6446776449463a312e300<snip>000
14:20:15.643 DEBUG [NALApp] Leaving NALApp.initialize()
14:20:15.644 INFO [AuvApplication] run() - just sleeps by default
{code}
Then tail the modem.log

\[dorado1@trex2 bin\]$ *cd $AUV_LOG_DIR*
\[dorado1@trex2 logs\]$ *tail \-f modem.log*

\\
&nbsp;

h5. In Term3:

&nbsp;\[dorado1@trex2 bin\]$ *storefwdclient*&nbsp;&nbsp;&nbsp; (type in a descriptive test string like "This is the vehicle on the zephyr hardware in the loop test by Thom")

Check to see that the email arrived, \[auvsbd\] SBD Msg From Unit: 300003000227440, with an \*.sbd as attachment.&nbsp;&nbsp; Open the attachment with a text editor to verify the message
\\

h5. In Term1:

bash-2.00$ *cd $AUV_CONFIG_DIR*&nbsp;

bash-2.00$ *cp devices.test.cfg devices.cfg*

h5. In Term2 (trex2 in missions dir)

Verify the settings in init.cfg

\[dorado1@trex2 missions\]$ *pwd*
/home/dorado1/amc/missions
\[dorado1@trex2 missions\]$ *cat init.cfg*
\\
{code}
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
{code}

h5. In Term1 (mvc-dmo1):

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *nohup ./vcsServer \-v &*
\[1\] 8344
bash-2.00$ *ps \-a*
{code}
 8346  8344   2 10o REPLY    82   64K ./vcsServer -v
[1]+  Exit 154                nohup ./vcsServer -v
bash-2.00$ cd $AUV_LOG_DIR
bash-2.00$ ls
2009.117.00/              2009.119.00/              latest@
2009.118.00/              2009.119.01/              nov.13th.vcs.tar
2009.118.05/              CVS/                      testLogs/
2009.118.06/              VcsServer.log.0
{code}
bash-2.00$ *cd ../logs*

bash-2.00$ *tail \-f VcsServer.log.0*

h5. In Term2:

\[dorado1@trex2 missions\]$ *nohup ../exec/amc_o_rt msg.timing.1.cfg &*
\[dorado1@trex2 missions\]$ *cd ../log/*
\[dorado1@trex2 log\]$ *tail \-f latest/TREX.log*
\\

bash-2.00$ *tail \-f VcsServer.log.0*
\\
{code}
62940673.813,
######################### Wed Apr 29 21:31:13 2009
62940673.943, VcsServer -- configuration:
        Port = 8004 ms
62940673.943, VcsServer: Socket created on fd 6
62940673.993, VcsServer - running
62940853.801, VcsServer: Connected to client on 134.89.32.39
62940853.801, VcsServer[t=0, delta=0]: Grabbing data
62940853.981, VcsServer:initMission:
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
}
62940854.331, VcsServer::initMission() - starting supervisor
62940855.371, VcsServer::openLC() - created IF with LayeredControl
62940855.671, VcsServer[t=1.86987, delta=1.86987]: Grabbing data
62940891.739, VcsServer: ack - STARTED:0
62940952.044, VcsServer::handleLCMessages() - AMC mission started
62940952.044, VcsServer: ack - FINISHED:0
62941028.259, VcsServer: ack - FINISHED:5167
62941033.779, VcsServer: handling insertBehavior
62941034.039, VcsServer: ack - STARTED:6226
62941037.969, VcsServer[t=184.167, delta=0.43997]: Grabbing data
<snip> 
62941045.198, VcsServer: ack - FINISHED:6226
62941052.248, VcsServer: No ping received for 7 of up to 12 seconds
62941053.058, VcsServer: No ping received for 8 of up to 12 seconds
62941054.137, VcsServer: No ping received for 9 of up to 12 seconds
62941055.217, VcsServer: No ping received for 10 of up to 12 seconds
62941055.697, VcsServer::recvString - received 0 bytes when expected 4 (uint32_t) !!!
62941055.697, Received a NULL message : should no happen.
{code}\\
\\
\\
\\

bash-2.00$ ps \-a
{code}
  PID  PGRP SID PRI STATE   BLK  SIZE COMMAND
 8707  8344   2 14o  RECV     0   60K dynamicControlServer
   17     7   0 24f  RECV     0  632K (//9/bin/Dev32)
 8726  8344   2 14o  RECV     0  176K layeredControl -dyno -plan AmcPlan.cfg -abort abortMplan.cfg
   23     7   0 10r  RECV     0   32K (//9/bin/Pipe)
   24     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   25     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   26     7   0 20r  RECV     0  300K (//9/bin/Dev.ctiser)
   27     7   0 20r  RECV     0  440K (//9/bin/Dev32.ansi)
   31     7   0  9o  RECV     0  148K (//9/bin/Dev32.par)
   32    17   0 20r  RECV     0  316K (//9/bin/Dev32.pty)
   36     4   0 10o  RECV     0 18272K (//9/bin/Fsys.floppy)
   37     7   0 10o  RECV     0   56K (//9/bin/Iso9660fsys)
   40     7   0 20o  RECV     0   20K (//9/bin/nameloc)
   41     7   0 20o REPLY     0   16K (//9/bin/nameloc)
   43     7   0 10o  RECV     0  120K (//9/bin/Dosfsys)
   45     7   0 23r  RECV     0  336K (//9/bin/Net)
   47     7   0 20r  RECV     0  348K (//9/bin/Net.ether82557)
   48     7   0 20r  RECV     0   56K (//9/bin/Net.ether1000)
 8754  8344   2 18o  RECV     0  132K navigation
 8756  8344   2 14o  RECV     0   64K newTailConeServer -dev /dev/ser3
 8758  8344   2 18o  RECV     0   60K m3dmgx1Server -dev /dev/ser12 -useForNav
 8761  8344   2 19o REPLY     0   96K newTailConeDriver -dev /dev/ser3,9600,8,n,1
 8762  8344   2 18o  RECV     0   48K gpsServer -r ashtech -dev /dev/ser7
 8766  8344   2 10o  RECV     0   88K m3dmgx1 -serial /dev/ser12,9600,8,n,1
 8767  8344   2 10o  RECV     0   60K parosciServer -dev /dev/ser5
 8772  8344   2 10o  RECV  8791   60K ashtechDriver -serial /dev/ser7,9600,8,n,1
 8773  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver -dev tcp:sci1-dmo1:10001
 8774  8344   2 19o REPLY    17   84K parosci -serial /dev/ser5,9600,8,n,1
 8778  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver2 -dev tcp:sci1-dmo1:10002
 8779  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver -serial tcp:sci1-dmo1:10001,9600,8,n,1
 8782  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver2 -serial tcp:sci1-dmo1:10002,9600,8,n,1
 8793  8344   2 10o  RECV     0   52K bluefinBattServer -dev /dev/ser10
 8796  8344   2 18o  RECV     0   52K dvlServer -dev /dev/ser6
   94     7   0 10o  WAIT    -1   28K (//9/bin/tinit)
 8799  8344   2 10o REPLY     0   68K bluefinBattDriver -dev /dev/ser10
   98     7   0 10o  RECV     0   20K (//9/bin/tinit)
   99     7   0 14o  RECV     0   68K (//9/bin/Mqueue)
 8804  8344   2 10o REPLY    17   80K dvl -serial /dev/ser6,9600,8,n,1
 8806  8344   2 10o  RECV     0   48K dropWeightServer -dev /dev/ser13
 8814  8344   2 10o  RECV     0   64K statePublisher
 8818  8344   2 10o READY         52K dropWeight -serial /dev/ser13,9600,8,n,1
 8346  8344   2 10o REPLY     0   64K ./vcsServer -v
 8658  8344   2 10o REPLY     0   36K supervisor -plan AmcPlan.cfg -dyno
 8667  8344   2 10o REPLY    23   16K tee -i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
 8675  8344   2 10o  RECV     0   28K eventLogServer
 8677  8344   2 18o  RECV     0   64K workSite
 8679  8344   2 18o  RECV     0   72K vehicleConfigurationServer
 8682  8344   2 10o  RECV     0   32K externalCommsServer
 8686  8344   2 14o  RECV     0  112K navigationServer
 8688  8344   2 10o  RECV  8760   32K externalComms
 8690  8344   2 10o  RECV     0  140K layeredControl erver -dyno -plan AmcPlan.cfg -abort
{code}
bash-2.00$ *slay supervisor*
bash-2.00$ *ps \-a&nbsp;&nbsp;*

h5. In Term2 (trex2):

Verify that amc_o_rt has terminated

\[dorado1@trex2 log\]$ *ps \-elf \| grep amc*
0 R dorado1&nbsp;&nbsp; 2040&nbsp; 1761&nbsp; 0&nbsp; 78&nbsp;&nbsp; 0 \-&nbsp;&nbsp; 975 \-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14:45 pts/0&nbsp;&nbsp;&nbsp; 00:00:00 grep amc

Verify that TREX did not have a problem (relax in the log is BAD)
\\
\[dorado1@trex2 log\]$ *grep relax latest/TREX.log*
\[dorado1@trex2 log\]$
\\

Before turning off the power to the&nbsp;vehicle,&nbsp;shutdown the OS on TREX2 and mvc-dmo1 to prep for power off

\[dorado1@trex2 logs\]$ su root
Password:
\[root@trex2 logs\]# /sbin/shutdown now

Broadcast message from root (pts/2) (Wed Apr 29 14:48:07 2009):

The system is going down to maintenance mode NOW\!
\[root@trex2 logs\]#

In Term1:

bash-2.00$ su root
bash-2.00# shutdown \-b]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798112</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830869</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window (Term 2), login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# \[dorado1@trex2 \~\]$ *cd amc*
# \[dorado1@trex2 amc\]$ *. config.amc*
# Check the Iridium Modem
## *% minicom iridium*&nbsp;&nbsp; (dev/ttyS0 9600 8N1)
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, switch back to Term1 (mvc-dmo1 qnx)
### bash-2.00$ *cd $AUV/bin*
### bash-2.00$ *reset_a3la*&nbsp;&nbsp; (toggle modem power)&nbsp;
## Switch back to Term2 (trex2)&nbsp;minicom session&nbsp;
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In terminal session 1:
### % nal \-dev /dev/ttyS0
## In terminal session 2:
### % &nbsp;cd \~/auv-linux/onboard/devices/iridium/tests
### % storefwdclient \-f test-a3la.sbd
### examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# Start the nal driver for the vsim test
## % nohup nal \-dev /dev/ttyS0 &
## % tail \-f nohup.out&nbsp;&nbsp; (check the nal driver is running - look for sleep)
# Test the modem with a text file
## storefwd client<enter>&nbsp;&nbsp; (enter a test message and then wait)
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# On TREX2, make sure the config&nbsp;file is correct for vsim&nbsp;
## % *cd missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In the telnet to mvc-dmo1, startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# Move back to the T-REX stack to fire up the T-REX client
# *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\
\\

h1. Hardware-in-the-loop Test

Open 4 terminal sessions

h5. Term1:&nbsp;

*telnet mvc-dmo1*

bash-2.00$ *cd /home/dorado1/auv_autonomy*

bash-2.00$ *. configSrc*

bash-2.00$ *qtalk \-m /dev/ser13*
*\!a<enter>*&nbsp; (look for gulperFB=1), then *ctrl-a, x*
\\
\\

h5. Term2:&nbsp;&nbsp;

*ping trex2* (waiting for the boot)&nbsp;

*ssh trex2*

\[dorado1@trex2 dorado1\]$ *cd amc*&nbsp; (/home/dorado1/amc)

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 amc\]$ *cd missions*

\[dorado1@trex2 missions\]$ *cat vcs.cfg*
{code}
<!-- Configuration file used byt VCS/CORBA adapter and others to --
  -- declare the timelines which interface with the vehicle and other --
  -- parameters.
     Note : the remoteName should preferably be  by default (at least --
  -- on svn) mvc-dmo1 other attributes of the main tag ashould _not_ --
  -- be changed ! (except you know exactly what you are doing)
-->
<Config log="1" localPort="8002" remoteName="mvc-dmo1" remotePort="8004" missionStart="init.cfg">
        <Timeline name="vehicleState"  command="0" />
        <Timeline name="setpoint" class="Setpoint" command="1" />
        <Timeline name="descend"  class="Descend" command="1" />
        <Timeline name="ascend"   class="Ascend" command="1" />
        <Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
        <Timeline name="getgps" class="GPS" command="1" />
        <Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
\[dorado1@trex2 missions\]$
\\
\[dorado1@trex2 missions\]$ *cat amc.cfg*
{code}
<!-- This file is the basic configuration for:
     - connecting to the auv (QNX or Linux)
     - and send/receive messages through the iridium modem.
     As fo now the connect is set to 1 by default as this file should
     be used on "real" conditions.
-->
<Config>
        <!- Use this component when running onboard ->
        <TeleoReactor name="vcs" component="VCSAdapter"/>         <TeleoReactor name="exec" component="DeliberativeReactor"
                lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>
        <TeleoReactor name="downlink" component="Downlink" lookAhead="1" latency="0" log="1" connect="1" config="downlink.cfg"/>
        <!- Skipper has 10 Hour lookahead. ->
        <TeleoReactor name="skipper" component="DeliberativeReactor"
                lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg"/>
</Config>
{code}

h5.


h5. Term3:

*slogin trex2*&nbsp;&nbsp;&nbsp; (or ssh trex2)

\[dorado1@trex2 amc\]$ *cd amc*

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 \~\]$ *minicom iridium*
Then type "*AT*" and look for "OK" (no quotes)

If the vehicle has just been powered up, there is no response so you'll need to enable the A3LA modem power

h5. Term1:

Switch back to Term1 (QNX mvc-dmo1) to toggle the modem power

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *reset_a3la*

h5. Term3:&nbsp;

Switch back to Term3 where minicom is running and type "AT", sometimes it says ERROR, just type AT again

Here's a sample of the minicom session:
{code}
Welcome to minicom 2.1
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jul 26 2006, 06:38:09.
Press CTRL-A Z for help on special keys
ERROR
OK
+SBDI: 0, 1602, 0, 0, 0, 0
OK
{code}
type ctrl-a, then x to leave minicom
\\

h5. Term4 (trex2):

\[dorado1@trex2 \~\]$ *cd amc*
\[dorado1@trex2 amc\]$ *. config.amc*
\[dorado1@trex2 amc\]$ *cd $AUV_HOME/onboard/bin*
\[dorado1@trex2 auv-linux\]$ *pwd*
/home/dorado1/auv-linux/onboard/bin

\[dorado1@trex2 bin\]$ *nohup ./nal \-dev /dev/ttyS0 &*
{code}
[1] 1968
[dorado1@trex2 bin]$ nohup: appending output to `nohup.out'
{code}
\[dorado1@trex2 bin\]$ *tail \-f nohup.out*
\\
{code}
terminate called after throwing an instance of 'omni_thread_fatal'
Reading log4cxx configuration file "/home/dorado1/auv-linux/onboard//sampleConfig/log4cxx.cfg"
14:20:15.598 DEBUG [NALDriver] read +GCMI response
14:20:15.623 INFO [NALDriver] manufacturer:
OK
14:20:15.623 INFO [NALDriver] initialize() complete
IOR:010000001a00000049444c3a6175762f53746f7265416e6446776449463a312e300<snip>000
14:20:15.643 DEBUG [NALApp] Leaving NALApp.initialize()
14:20:15.644 INFO [AuvApplication] run() - just sleeps by default
{code}
Then tail the modem.log

\[dorado1@trex2 bin\]$ *cd $AUV_LOG_DIR*
\[dorado1@trex2 logs\]$ *tail \-f modem.log*

\\
&nbsp;

h5. In Term3:

&nbsp;\[dorado1@trex2 bin\]$ *storefwdclient*&nbsp;&nbsp;&nbsp; (type in a descriptive test string like "This is the vehicle on the zephyr hardware in the loop test by Thom")

Check to see that the email arrived, \[auvsbd\] SBD Msg From Unit: 300003000227440, with an \*.sbd as attachment.&nbsp;&nbsp; Open the attachment with a text editor to verify the message
\\

h5. In Term1:

bash-2.00$ *cd $AUV_CONFIG_DIR*&nbsp;

bash-2.00$ *cp devices.test.cfg devices.cfg*

h5. In Term2 (trex2 in missions dir)

Verify the settings in init.cfg

\[dorado1@trex2 missions\]$ *pwd*
/home/dorado1/amc/missions
\[dorado1@trex2 missions\]$ *cat init.cfg*
\\
{code}
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
{code}

h5. In Term1 (mvc-dmo1):

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *nohup ./vcsServer \-v &*
\[1\] 8344
bash-2.00$ *ps \-a*
{code}
 8346  8344   2 10o REPLY    82   64K ./vcsServer -v
[1]+  Exit 154                nohup ./vcsServer -v
bash-2.00$ cd $AUV_LOG_DIR
bash-2.00$ ls
2009.117.00/              2009.119.00/              latest@
2009.118.00/              2009.119.01/              nov.13th.vcs.tar
2009.118.05/              CVS/                      testLogs/
2009.118.06/              VcsServer.log.0
{code}
bash-2.00$ *cd ../logs*

bash-2.00$ *tail \-f VcsServer.log.0*

h5. In Term2:

\[dorado1@trex2 missions\]$ *nohup ../exec/amc_o_rt msg.timing.1.cfg &*
\[dorado1@trex2 missions\]$ *cd ../log/*
\[dorado1@trex2 log\]$ *tail \-f latest/TREX.log*
\\

bash-2.00$ *tail \-f VcsServer.log.0*
\\
{code}
62940673.813,
######################### Wed Apr 29 21:31:13 2009
62940673.943, VcsServer -- configuration:
        Port = 8004 ms
62940673.943, VcsServer: Socket created on fd 6
62940673.993, VcsServer - running
62940853.801, VcsServer: Connected to client on 134.89.32.39
62940853.801, VcsServer[t=0, delta=0]: Grabbing data
62940853.981, VcsServer:initMission:
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
}
62940854.331, VcsServer::initMission() - starting supervisor
62940855.371, VcsServer::openLC() - created IF with LayeredControl
62940855.671, VcsServer[t=1.86987, delta=1.86987]: Grabbing data
62940891.739, VcsServer: ack - STARTED:0
62940952.044, VcsServer::handleLCMessages() - AMC mission started
62940952.044, VcsServer: ack - FINISHED:0
62941028.259, VcsServer: ack - FINISHED:5167
62941033.779, VcsServer: handling insertBehavior
62941034.039, VcsServer: ack - STARTED:6226
62941037.969, VcsServer[t=184.167, delta=0.43997]: Grabbing data
<snip> 
62941045.198, VcsServer: ack - FINISHED:6226
62941052.248, VcsServer: No ping received for 7 of up to 12 seconds
62941053.058, VcsServer: No ping received for 8 of up to 12 seconds
62941054.137, VcsServer: No ping received for 9 of up to 12 seconds
62941055.217, VcsServer: No ping received for 10 of up to 12 seconds
62941055.697, VcsServer::recvString - received 0 bytes when expected 4 (uint32_t) !!!
62941055.697, Received a NULL message : should no happen.
{code}\\
\\
\\
\\
\\

bash-2.00$ ps \-a
{code}
  PID  PGRP SID PRI STATE   BLK  SIZE COMMAND
 8707  8344   2 14o  RECV     0   60K dynamicControlServer
   17     7   0 24f  RECV     0  632K (//9/bin/Dev32)
 8726  8344   2 14o  RECV     0  176K layeredControl -dyno -plan AmcPlan.cfg -abort abortMplan.cfg
   23     7   0 10r  RECV     0   32K (//9/bin/Pipe)
   24     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   25     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   26     7   0 20r  RECV     0  300K (//9/bin/Dev.ctiser)
   27     7   0 20r  RECV     0  440K (//9/bin/Dev32.ansi)
   31     7   0  9o  RECV     0  148K (//9/bin/Dev32.par)
   32    17   0 20r  RECV     0  316K (//9/bin/Dev32.pty)
   36     4   0 10o  RECV     0 18272K (//9/bin/Fsys.floppy)
   37     7   0 10o  RECV     0   56K (//9/bin/Iso9660fsys)
   40     7   0 20o  RECV     0   20K (//9/bin/nameloc)
   41     7   0 20o REPLY     0   16K (//9/bin/nameloc)
   43     7   0 10o  RECV     0  120K (//9/bin/Dosfsys)
   45     7   0 23r  RECV     0  336K (//9/bin/Net)
   47     7   0 20r  RECV     0  348K (//9/bin/Net.ether82557)
   48     7   0 20r  RECV     0   56K (//9/bin/Net.ether1000)
 8754  8344   2 18o  RECV     0  132K navigation
 8756  8344   2 14o  RECV     0   64K newTailConeServer -dev /dev/ser3
 8758  8344   2 18o  RECV     0   60K m3dmgx1Server -dev /dev/ser12 -useForNav
 8761  8344   2 19o REPLY     0   96K newTailConeDriver -dev /dev/ser3,9600,8,n,1
 8762  8344   2 18o  RECV     0   48K gpsServer -r ashtech -dev /dev/ser7
 8766  8344   2 10o  RECV     0   88K m3dmgx1 -serial /dev/ser12,9600,8,n,1
 8767  8344   2 10o  RECV     0   60K parosciServer -dev /dev/ser5
 8772  8344   2 10o  RECV  8791   60K ashtechDriver -serial /dev/ser7,9600,8,n,1
 8773  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver -dev tcp:sci1-dmo1:10001
 8774  8344   2 19o REPLY    17   84K parosci -serial /dev/ser5,9600,8,n,1
 8778  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver2 -dev tcp:sci1-dmo1:10002
 8779  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver -serial tcp:sci1-dmo1:10001,9600,8,n,1
 8782  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver2 -serial tcp:sci1-dmo1:10002,9600,8,n,1
 8793  8344   2 10o  RECV     0   52K bluefinBattServer -dev /dev/ser10
 8796  8344   2 18o  RECV     0   52K dvlServer -dev /dev/ser6
   94     7   0 10o  WAIT    -1   28K (//9/bin/tinit)
 8799  8344   2 10o REPLY     0   68K bluefinBattDriver -dev /dev/ser10
   98     7   0 10o  RECV     0   20K (//9/bin/tinit)
   99     7   0 14o  RECV     0   68K (//9/bin/Mqueue)
 8804  8344   2 10o REPLY    17   80K dvl -serial /dev/ser6,9600,8,n,1
 8806  8344   2 10o  RECV     0   48K dropWeightServer -dev /dev/ser13
 8814  8344   2 10o  RECV     0   64K statePublisher
 8818  8344   2 10o READY         52K dropWeight -serial /dev/ser13,9600,8,n,1
 8346  8344   2 10o REPLY     0   64K ./vcsServer -v
 8658  8344   2 10o REPLY     0   36K supervisor -plan AmcPlan.cfg -dyno
 8667  8344   2 10o REPLY    23   16K tee -i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
 8675  8344   2 10o  RECV     0   28K eventLogServer
 8677  8344   2 18o  RECV     0   64K workSite
 8679  8344   2 18o  RECV     0   72K vehicleConfigurationServer
 8682  8344   2 10o  RECV     0   32K externalCommsServer
 8686  8344   2 14o  RECV     0  112K navigationServer
 8688  8344   2 10o  RECV  8760   32K externalComms
 8690  8344   2 10o  RECV     0  140K layeredControl erver -dyno -plan AmcPlan.cfg -abort
{code}
bash-2.00$ *slay supervisor*
bash-2.00$ *ps \-a&nbsp;&nbsp;*

h5. In Term2 (trex2):

Verify that amc_o_rt has terminated

\[dorado1@trex2 log\]$ *ps \-elf \| grep amc*
0 R dorado1&nbsp;&nbsp; 2040&nbsp; 1761&nbsp; 0&nbsp; 78&nbsp;&nbsp; 0 \-&nbsp;&nbsp; 975 \-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14:45 pts/0&nbsp;&nbsp;&nbsp; 00:00:00 grep amc

Verify that TREX did not have a problem (relax in the log is BAD)
\\
\[dorado1@trex2 log\]$ *grep relax latest/TREX.log*
\[dorado1@trex2 log\]$
\\

Before turning off the power to the&nbsp;vehicle,&nbsp;shutdown the OS on TREX2 and mvc-dmo1 to prep for power off

\[dorado1@trex2 logs\]$ su root
Password:
\[root@trex2 logs\]# /sbin/shutdown now

Broadcast message from root (pts/2) (Wed Apr 29 14:48:07 2009):

The system is going down to maintenance mode NOW\!
\[root@trex2 logs\]#

In Term1:

bash-2.00$ su root
bash-2.00# shutdown \-b]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798114</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830859</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window, login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# Check the Iridium Modem
## *% minicom iridium*
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, exit minicom
### at the command line, enter 'reset_a3la' to run the modem power cycling script
#### *% reset_a3la*
## *% minicom iridium*
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In terminal session 1:
### % nal \-dev /dev/ttyS0
## In terminal session 2:
### % &nbsp;cd \~/auv-linux/onboard/devices/iridium/tests
### % storefwdclient \-f test-a3la.sbd
### examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# Start the nal driver for the vsim test
## % nohup nal \-dev /dev/ttyS0 &
## % tail \-f nohup.out&nbsp;&nbsp; (check the nal driver is running - look for sleep)
# Test the modem with a text file
## storefwd client<enter>&nbsp;&nbsp; (enter a test message and then wait)
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# On TREX2, make sure the config&nbsp;file is correct for vsim&nbsp;
## % *cd missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In the telnet to mvc-dmo1, startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# Move back to the T-REX stack to fire up the T-REX client
# *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\
\\

h1. Hardware-in-the-loop Test

Open 4 terminal sessions

h5. Term1:&nbsp;

*telnet mvc-dmo1*

bash-2.00$ *cd /home/dorado1/auv_autonomy*

bash-2.00$ *. configSrc*

bash-2.00$ *qtalk \-m /dev/ser13*
*\!a<enter>*&nbsp; (look for gulperFB=1), then *ctrl-a, x*
\\
\\

h5. Term2:&nbsp;&nbsp;

*ping trex2* (waiting for the boot)&nbsp;

*ssh trex2*

\[dorado1@trex2 dorado1\]$ *cd amc*&nbsp; (/home/dorado1/amc)
{code}
[dorado1@trex2 amc]$ . config.amc[dorado1@trex2 amc]$ cd missions
[dorado1@trex2 missions]$ cat vcs.cfg
<!-- Configuration file used byt VCS/CORBA adapter and others to --
  -- declare the timelines which interface with the vehicle and other --
  -- parameters.
     Note : the remoteName should preferably be  by default (at least --
  -- on svn) mvc-dmo1 other attributes of the main tag ashould _not_ --
  -- be changed ! (except you know exactly what you are doing)
-->
<Config log="1" localPort="8002" remoteName="mvc-dmo1" remotePort="8004" missionStart="init.cfg">
        <Timeline name="vehicleState"  command="0" />
        <Timeline name="setpoint" class="Setpoint" command="1" />
        <Timeline name="descend"  class="Descend" command="1" />
        <Timeline name="ascend"   class="Ascend" command="1" />
        <Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
        <Timeline name="getgps" class="GPS" command="1" />
        <Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
\[dorado1@trex2 missions\]$
\\
\[dorado1@trex2 missions\]$ *cat amc.cfg*
{code}
<!-- This file is the basic configuration for:
     - connecting to the auv (QNX or Linux)
     - and send/receive messages through the iridium modem.
     As fo now the connect is set to 1 by default as this file should
     be used on "real" conditions.
-->
<Config>
        <!- Use this component when running onboard ->
        <TeleoReactor name="vcs" component="VCSAdapter"/>         <TeleoReactor name="exec" component="DeliberativeReactor"
                lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>
        <TeleoReactor name="downlink" component="Downlink" lookAhead="1" latency="0" log="1" connect="1" config="downlink.cfg"/>
        <!- Skipper has 10 Hour lookahead. ->
        <TeleoReactor name="skipper" component="DeliberativeReactor"
                lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg"/>
</Config>
{code}

h5.

Term3:

*slogin trex2*&nbsp;&nbsp;&nbsp; (or ssh trex2)

\[dorado1@trex2 amc\]$ *cd amc*

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 \~\]$ *minicom iridium*
Then type "*AT*" and look for "OK" (no quotes)

If the vehicle has just been powered up, there is no response so you'll need to enable the A3LA modem power

h5. Term1:

Switch back to Term1 (QNX mvc-dmo1) to toggle the modem power

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *reset_a3la*

h5. Term3:&nbsp;

Switch back to Term3 where minicom is running and type "AT", sometimes it says ERROR, just type AT again

Here's a sample of the minicom session:
{code}
Welcome to minicom 2.1
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jul 26 2006, 06:38:09.
Press CTRL-A Z for help on special keys
ERROR
OK
+SBDI: 0, 1602, 0, 0, 0, 0
OK
{code}
type ctrl-a, then x to leave minicom
\\

h5. Term4 (trex2):

\[dorado1@trex2 \~\]$ *cd amc*
\[dorado1@trex2 amc\]$ *. config.amc*
\[dorado1@trex2 amc\]$ *cd $AUV_HOME/onboard/bin*
\[dorado1@trex2 auv-linux\]$ *pwd*
/home/dorado1/auv-linux/onboard/bin

\[dorado1@trex2 bin\]$ *nohup ./nal \-dev /dev/ttyS0 &*
{code}
[1] 1968
[dorado1@trex2 bin]$ nohup: appending output to `nohup.out'
{code}
\[dorado1@trex2 bin\]$ *tail \-f nohup.out*
\\
{code}
terminate called after throwing an instance of 'omni_thread_fatal'
Reading log4cxx configuration file "/home/dorado1/auv-linux/onboard//sampleConfig/log4cxx.cfg"
14:20:15.598 DEBUG [NALDriver] read +GCMI response
14:20:15.623 INFO [NALDriver] manufacturer:
OK
14:20:15.623 INFO [NALDriver] initialize() complete
IOR:010000001a00000049444c3a6175762f53746f7265416e6446776449463a312e300<snip>000
14:20:15.643 DEBUG [NALApp] Leaving NALApp.initialize()
14:20:15.644 INFO [AuvApplication] run() - just sleeps by default
{code}
Then tail the modem.log

\[dorado1@trex2 bin\]$ *cd $AUV_LOG_DIR*
\[dorado1@trex2 logs\]$ *tail \-f modem.log*

\\
&nbsp;

h5. In Term3:

&nbsp;\[dorado1@trex2 bin\]$ *storefwdclient*&nbsp;&nbsp;&nbsp; (type in a descriptive test string like "This is the vehicle on the zephyr hardware in the loop test by Thom")

Check to see that the email arrived, \[auvsbd\] SBD Msg From Unit: 300003000227440, with an \*.sbd as attachment.&nbsp;&nbsp; Open the attachment with a text editor to verify the message
\\

h5. In Term1:

bash-2.00$ *cd $AUV_CONFIG_DIR*&nbsp;

bash-2.00$ *cp devices.test.cfg devices.cfg*

h5. In Term2 (trex2 in missions dir)

Verify the settings in init.cfg

\[dorado1@trex2 missions\]$ *pwd*
/home/dorado1/amc/missions
\[dorado1@trex2 missions\]$ *cat init.cfg*
\\
{code}
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
{code}

h5. In Term1 (mvc-dmo1):

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *nohup ./vcsServer \-v &*
\[1\] 8344
bash-2.00$ *ps \-a*
{code}
 8346  8344   2 10o REPLY    82   64K ./vcsServer -v
[1]+  Exit 154                nohup ./vcsServer -v
bash-2.00$ cd $AUV_LOG_DIR
bash-2.00$ ls
2009.117.00/              2009.119.00/              latest@
2009.118.00/              2009.119.01/              nov.13th.vcs.tar
2009.118.05/              CVS/                      testLogs/
2009.118.06/              VcsServer.log.0
{code}
bash-2.00$ *tail \-f VcsServer.log.0*

h5. In Term2:

\[dorado1@trex2 missions\]$ *nohup ../exec/amc_o_rt msg.timing.1.cfg &*
\[dorado1@trex2 missions\]$ *cd ../log/*
\[dorado1@trex2 log\]$ *tail \-f latest/TREX.log*
\\

bash-2.00$ *tail \-f VcsServer.log.0*
\\
{code}
62940673.813,
######################### Wed Apr 29 21:31:13 2009
62940673.943, VcsServer -- configuration:
        Port = 8004 ms
62940673.943, VcsServer: Socket created on fd 6
62940673.993, VcsServer - running
62940853.801, VcsServer: Connected to client on 134.89.32.39
62940853.801, VcsServer[t=0, delta=0]: Grabbing data
62940853.981, VcsServer:initMission:
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
}
62940854.331, VcsServer::initMission() - starting supervisor
62940855.371, VcsServer::openLC() - created IF with LayeredControl
62940855.671, VcsServer[t=1.86987, delta=1.86987]: Grabbing data
62940891.739, VcsServer: ack - STARTED:0
62940952.044, VcsServer::handleLCMessages() - AMC mission started
62940952.044, VcsServer: ack - FINISHED:0
62941028.259, VcsServer: ack - FINISHED:5167
62941033.779, VcsServer: handling insertBehavior
62941034.039, VcsServer: ack - STARTED:6226
62941037.969, VcsServer[t=184.167, delta=0.43997]: Grabbing data
<snip> 
62941045.198, VcsServer: ack - FINISHED:6226
62941052.248, VcsServer: No ping received for 7 of up to 12 seconds
62941053.058, VcsServer: No ping received for 8 of up to 12 seconds
62941054.137, VcsServer: No ping received for 9 of up to 12 seconds
62941055.217, VcsServer: No ping received for 10 of up to 12 seconds
62941055.697, VcsServer::recvString - received 0 bytes when expected 4 (uint32_t) !!!
62941055.697, Received a NULL message : should no happen.
{code}\\
\\

bash-2.00$ ps \-a
{code}
  PID  PGRP SID PRI STATE   BLK  SIZE COMMAND
 8707  8344   2 14o  RECV     0   60K dynamicControlServer
   17     7   0 24f  RECV     0  632K (//9/bin/Dev32)
 8726  8344   2 14o  RECV     0  176K layeredControl -dyno -plan AmcPlan.cfg -abort abortMplan.cfg
   23     7   0 10r  RECV     0   32K (//9/bin/Pipe)
   24     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   25     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   26     7   0 20r  RECV     0  300K (//9/bin/Dev.ctiser)
   27     7   0 20r  RECV     0  440K (//9/bin/Dev32.ansi)
   31     7   0  9o  RECV     0  148K (//9/bin/Dev32.par)
   32    17   0 20r  RECV     0  316K (//9/bin/Dev32.pty)
   36     4   0 10o  RECV     0 18272K (//9/bin/Fsys.floppy)
   37     7   0 10o  RECV     0   56K (//9/bin/Iso9660fsys)
   40     7   0 20o  RECV     0   20K (//9/bin/nameloc)
   41     7   0 20o REPLY     0   16K (//9/bin/nameloc)
   43     7   0 10o  RECV     0  120K (//9/bin/Dosfsys)
   45     7   0 23r  RECV     0  336K (//9/bin/Net)
   47     7   0 20r  RECV     0  348K (//9/bin/Net.ether82557)
   48     7   0 20r  RECV     0   56K (//9/bin/Net.ether1000)
 8754  8344   2 18o  RECV     0  132K navigation
 8756  8344   2 14o  RECV     0   64K newTailConeServer -dev /dev/ser3
 8758  8344   2 18o  RECV     0   60K m3dmgx1Server -dev /dev/ser12 -useForNav
 8761  8344   2 19o REPLY     0   96K newTailConeDriver -dev /dev/ser3,9600,8,n,1
 8762  8344   2 18o  RECV     0   48K gpsServer -r ashtech -dev /dev/ser7
 8766  8344   2 10o  RECV     0   88K m3dmgx1 -serial /dev/ser12,9600,8,n,1
 8767  8344   2 10o  RECV     0   60K parosciServer -dev /dev/ser5
 8772  8344   2 10o  RECV  8791   60K ashtechDriver -serial /dev/ser7,9600,8,n,1
 8773  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver -dev tcp:sci1-dmo1:10001
 8774  8344   2 19o REPLY    17   84K parosci -serial /dev/ser5,9600,8,n,1
 8778  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver2 -dev tcp:sci1-dmo1:10002
 8779  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver -serial tcp:sci1-dmo1:10001,9600,8,n,1
 8782  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver2 -serial tcp:sci1-dmo1:10002,9600,8,n,1
 8793  8344   2 10o  RECV     0   52K bluefinBattServer -dev /dev/ser10
 8796  8344   2 18o  RECV     0   52K dvlServer -dev /dev/ser6
   94     7   0 10o  WAIT    -1   28K (//9/bin/tinit)
 8799  8344   2 10o REPLY     0   68K bluefinBattDriver -dev /dev/ser10
   98     7   0 10o  RECV     0   20K (//9/bin/tinit)
   99     7   0 14o  RECV     0   68K (//9/bin/Mqueue)
 8804  8344   2 10o REPLY    17   80K dvl -serial /dev/ser6,9600,8,n,1
 8806  8344   2 10o  RECV     0   48K dropWeightServer -dev /dev/ser13
 8814  8344   2 10o  RECV     0   64K statePublisher
 8818  8344   2 10o READY         52K dropWeight -serial /dev/ser13,9600,8,n,1
 8346  8344   2 10o REPLY     0   64K ./vcsServer -v
 8658  8344   2 10o REPLY     0   36K supervisor -plan AmcPlan.cfg -dyno
 8667  8344   2 10o REPLY    23   16K tee -i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
 8675  8344   2 10o  RECV     0   28K eventLogServer
 8677  8344   2 18o  RECV     0   64K workSite
 8679  8344   2 18o  RECV     0   72K vehicleConfigurationServer
 8682  8344   2 10o  RECV     0   32K externalCommsServer
 8686  8344   2 14o  RECV     0  112K navigationServer
 8688  8344   2 10o  RECV  8760   32K externalComms
 8690  8344   2 10o  RECV     0  140K layeredControl erver -dyno -plan AmcPlan.cfg -abort
{code}
bash-2.00$ *slay supervisor*
bash-2.00$ *ps \-a&nbsp;&nbsp;*

h5. In Term2 (trex2):

Verify that amc_o_rt has terminated

\[dorado1@trex2 log\]$ *ps \-elf \| grep amc*
0 R dorado1&nbsp;&nbsp; 2040&nbsp; 1761&nbsp; 0&nbsp; 78&nbsp;&nbsp; 0 \-&nbsp;&nbsp; 975 \-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14:45 pts/0&nbsp;&nbsp;&nbsp; 00:00:00 grep amc

Verify that TREX did not have a problem (relax in the log is BAD)
\\
\[dorado1@trex2 log\]$ *grep relax latest/TREX.log*
\[dorado1@trex2 log\]$
\\

Before turning off the power to the&nbsp;vehicle,&nbsp;shutdown the OS on TREX2 and mvc-dmo1 to prep for power off

\[dorado1@trex2 logs\]$ su root
Password:
\[root@trex2 logs\]# /sbin/shutdown now

Broadcast message from root (pts/2) (Wed Apr 29 14:48:07 2009):

The system is going down to maintenance mode NOW\!
\[root@trex2 logs\]#

In Term1:

bash-2.00$ su root
bash-2.00# shutdown \-b]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798103</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830861</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window, login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# Check the Iridium Modem
## *% minicom iridium*
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, exit minicom
### at the command line, enter 'reset_a3la' to run the modem power cycling script
#### *% reset_a3la*
## *% minicom iridium*
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In terminal session 1:
### % nal \-dev /dev/ttyS0
## In terminal session 2:
### % &nbsp;cd \~/auv-linux/onboard/devices/iridium/tests
### % storefwdclient \-f test-a3la.sbd
### examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# Start the nal driver for the vsim test
## % nohup nal \-dev /dev/ttyS0 &
## % tail \-f nohup.out&nbsp;&nbsp; (check the nal driver is running - look for sleep)
# Test the modem with a text file
## storefwd client<enter>&nbsp;&nbsp; (enter a test message and then wait)
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# On TREX2, make sure the config&nbsp;file is correct for vsim&nbsp;
## % *cd missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In the telnet to mvc-dmo1, startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# Move back to the T-REX stack to fire up the T-REX client
# *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\
\\

h1. Hardware-in-the-loop Test

Open 4 terminal sessions

h5. Term1:&nbsp;

*telnet mvc-dmo1*

bash-2.00$ *cd /home/dorado1/auv_autonomy*

bash-2.00$ *. configSrc*

bash-2.00$ *qtalk \-m /dev/ser13*
*\!a<enter>*&nbsp; (look for gulperFB=1), then *ctrl-a, x*
\\
\\

h5. Term2:&nbsp;&nbsp;

*ping trex2* (waiting for the boot)&nbsp;

*ssh trex2*

\[dorado1@trex2 dorado1\]$ *cd amc*&nbsp; (/home/dorado1/amc)

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 amc\]$ *cd missions*

\[dorado1@trex2 missions\]$ *cat vcs.cfg*

{code}
<!-- Configuration file used byt VCS/CORBA adapter and others to --
  -- declare the timelines which interface with the vehicle and other --
  -- parameters.
     Note : the remoteName should preferably be  by default (at least --
  -- on svn) mvc-dmo1 other attributes of the main tag ashould _not_ --
  -- be changed ! (except you know exactly what you are doing)
-->
<Config log="1" localPort="8002" remoteName="mvc-dmo1" remotePort="8004" missionStart="init.cfg">
        <Timeline name="vehicleState"  command="0" />
        <Timeline name="setpoint" class="Setpoint" command="1" />
        <Timeline name="descend"  class="Descend" command="1" />
        <Timeline name="ascend"   class="Ascend" command="1" />
        <Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
        <Timeline name="getgps" class="GPS" command="1" />
        <Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
\[dorado1@trex2 missions\]$
\\
\[dorado1@trex2 missions\]$ *cat amc.cfg*
{code}
<!-- This file is the basic configuration for:
     - connecting to the auv (QNX or Linux)
     - and send/receive messages through the iridium modem.
     As fo now the connect is set to 1 by default as this file should
     be used on "real" conditions.
-->
<Config>
        <!- Use this component when running onboard ->
        <TeleoReactor name="vcs" component="VCSAdapter"/>         <TeleoReactor name="exec" component="DeliberativeReactor"
                lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>
        <TeleoReactor name="downlink" component="Downlink" lookAhead="1" latency="0" log="1" connect="1" config="downlink.cfg"/>
        <!- Skipper has 10 Hour lookahead. ->
        <TeleoReactor name="skipper" component="DeliberativeReactor"
                lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg"/>
</Config>
{code}

h5.


h5. Term3:

*slogin trex2*&nbsp;&nbsp;&nbsp; (or ssh trex2)

\[dorado1@trex2 amc\]$ *cd amc*

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 \~\]$ *minicom iridium*
Then type "*AT*" and look for "OK" (no quotes)

If the vehicle has just been powered up, there is no response so you'll need to enable the A3LA modem power

h5. Term1:

Switch back to Term1 (QNX mvc-dmo1) to toggle the modem power

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *reset_a3la*

h5. Term3:&nbsp;

Switch back to Term3 where minicom is running and type "AT", sometimes it says ERROR, just type AT again

Here's a sample of the minicom session:
{code}
Welcome to minicom 2.1
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jul 26 2006, 06:38:09.
Press CTRL-A Z for help on special keys
ERROR
OK
+SBDI: 0, 1602, 0, 0, 0, 0
OK
{code}
type ctrl-a, then x to leave minicom
\\

h5. Term4 (trex2):

\[dorado1@trex2 \~\]$ *cd amc*
\[dorado1@trex2 amc\]$ *. config.amc*
\[dorado1@trex2 amc\]$ *cd $AUV_HOME/onboard/bin*
\[dorado1@trex2 auv-linux\]$ *pwd*
/home/dorado1/auv-linux/onboard/bin

\[dorado1@trex2 bin\]$ *nohup ./nal \-dev /dev/ttyS0 &*
{code}
[1] 1968
[dorado1@trex2 bin]$ nohup: appending output to `nohup.out'
{code}
\[dorado1@trex2 bin\]$ *tail \-f nohup.out*
\\
{code}
terminate called after throwing an instance of 'omni_thread_fatal'
Reading log4cxx configuration file "/home/dorado1/auv-linux/onboard//sampleConfig/log4cxx.cfg"
14:20:15.598 DEBUG [NALDriver] read +GCMI response
14:20:15.623 INFO [NALDriver] manufacturer:
OK
14:20:15.623 INFO [NALDriver] initialize() complete
IOR:010000001a00000049444c3a6175762f53746f7265416e6446776449463a312e300<snip>000
14:20:15.643 DEBUG [NALApp] Leaving NALApp.initialize()
14:20:15.644 INFO [AuvApplication] run() - just sleeps by default
{code}
Then tail the modem.log

\[dorado1@trex2 bin\]$ *cd $AUV_LOG_DIR*
\[dorado1@trex2 logs\]$ *tail \-f modem.log*

\\
&nbsp;

h5. In Term3:

&nbsp;\[dorado1@trex2 bin\]$ *storefwdclient*&nbsp;&nbsp;&nbsp; (type in a descriptive test string like "This is the vehicle on the zephyr hardware in the loop test by Thom")

Check to see that the email arrived, \[auvsbd\] SBD Msg From Unit: 300003000227440, with an \*.sbd as attachment.&nbsp;&nbsp; Open the attachment with a text editor to verify the message
\\

h5. In Term1:

bash-2.00$ *cd $AUV_CONFIG_DIR*&nbsp;

bash-2.00$ *cp devices.test.cfg devices.cfg*

h5. In Term2 (trex2 in missions dir)

Verify the settings in init.cfg

\[dorado1@trex2 missions\]$ *pwd*
/home/dorado1/amc/missions
\[dorado1@trex2 missions\]$ *cat init.cfg*
\\
{code}
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
{code}

h5. In Term1 (mvc-dmo1):

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *nohup ./vcsServer \-v &*
\[1\] 8344
bash-2.00$ *ps \-a*
{code}
 8346  8344   2 10o REPLY    82   64K ./vcsServer -v
[1]+  Exit 154                nohup ./vcsServer -v
bash-2.00$ cd $AUV_LOG_DIR
bash-2.00$ ls
2009.117.00/              2009.119.00/              latest@
2009.118.00/              2009.119.01/              nov.13th.vcs.tar
2009.118.05/              CVS/                      testLogs/
2009.118.06/              VcsServer.log.0
{code}
bash-2.00$ *tail \-f VcsServer.log.0*

h5. In Term2:

\[dorado1@trex2 missions\]$ *nohup ../exec/amc_o_rt msg.timing.1.cfg &*
\[dorado1@trex2 missions\]$ *cd ../log/*
\[dorado1@trex2 log\]$ *tail \-f latest/TREX.log*
\\

bash-2.00$ *tail \-f VcsServer.log.0*
\\
{code}
62940673.813,
######################### Wed Apr 29 21:31:13 2009
62940673.943, VcsServer -- configuration:
        Port = 8004 ms
62940673.943, VcsServer: Socket created on fd 6
62940673.993, VcsServer - running
62940853.801, VcsServer: Connected to client on 134.89.32.39
62940853.801, VcsServer[t=0, delta=0]: Grabbing data
62940853.981, VcsServer:initMission:
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
}
62940854.331, VcsServer::initMission() - starting supervisor
62940855.371, VcsServer::openLC() - created IF with LayeredControl
62940855.671, VcsServer[t=1.86987, delta=1.86987]: Grabbing data
62940891.739, VcsServer: ack - STARTED:0
62940952.044, VcsServer::handleLCMessages() - AMC mission started
62940952.044, VcsServer: ack - FINISHED:0
62941028.259, VcsServer: ack - FINISHED:5167
62941033.779, VcsServer: handling insertBehavior
62941034.039, VcsServer: ack - STARTED:6226
62941037.969, VcsServer[t=184.167, delta=0.43997]: Grabbing data
<snip> 
62941045.198, VcsServer: ack - FINISHED:6226
62941052.248, VcsServer: No ping received for 7 of up to 12 seconds
62941053.058, VcsServer: No ping received for 8 of up to 12 seconds
62941054.137, VcsServer: No ping received for 9 of up to 12 seconds
62941055.217, VcsServer: No ping received for 10 of up to 12 seconds
62941055.697, VcsServer::recvString - received 0 bytes when expected 4 (uint32_t) !!!
62941055.697, Received a NULL message : should no happen.
{code}\\
\\
\\

bash-2.00$ ps \-a
{code}
  PID  PGRP SID PRI STATE   BLK  SIZE COMMAND
 8707  8344   2 14o  RECV     0   60K dynamicControlServer
   17     7   0 24f  RECV     0  632K (//9/bin/Dev32)
 8726  8344   2 14o  RECV     0  176K layeredControl -dyno -plan AmcPlan.cfg -abort abortMplan.cfg
   23     7   0 10r  RECV     0   32K (//9/bin/Pipe)
   24     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   25     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   26     7   0 20r  RECV     0  300K (//9/bin/Dev.ctiser)
   27     7   0 20r  RECV     0  440K (//9/bin/Dev32.ansi)
   31     7   0  9o  RECV     0  148K (//9/bin/Dev32.par)
   32    17   0 20r  RECV     0  316K (//9/bin/Dev32.pty)
   36     4   0 10o  RECV     0 18272K (//9/bin/Fsys.floppy)
   37     7   0 10o  RECV     0   56K (//9/bin/Iso9660fsys)
   40     7   0 20o  RECV     0   20K (//9/bin/nameloc)
   41     7   0 20o REPLY     0   16K (//9/bin/nameloc)
   43     7   0 10o  RECV     0  120K (//9/bin/Dosfsys)
   45     7   0 23r  RECV     0  336K (//9/bin/Net)
   47     7   0 20r  RECV     0  348K (//9/bin/Net.ether82557)
   48     7   0 20r  RECV     0   56K (//9/bin/Net.ether1000)
 8754  8344   2 18o  RECV     0  132K navigation
 8756  8344   2 14o  RECV     0   64K newTailConeServer -dev /dev/ser3
 8758  8344   2 18o  RECV     0   60K m3dmgx1Server -dev /dev/ser12 -useForNav
 8761  8344   2 19o REPLY     0   96K newTailConeDriver -dev /dev/ser3,9600,8,n,1
 8762  8344   2 18o  RECV     0   48K gpsServer -r ashtech -dev /dev/ser7
 8766  8344   2 10o  RECV     0   88K m3dmgx1 -serial /dev/ser12,9600,8,n,1
 8767  8344   2 10o  RECV     0   60K parosciServer -dev /dev/ser5
 8772  8344   2 10o  RECV  8791   60K ashtechDriver -serial /dev/ser7,9600,8,n,1
 8773  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver -dev tcp:sci1-dmo1:10001
 8774  8344   2 19o REPLY    17   84K parosci -serial /dev/ser5,9600,8,n,1
 8778  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver2 -dev tcp:sci1-dmo1:10002
 8779  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver -serial tcp:sci1-dmo1:10001,9600,8,n,1
 8782  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver2 -serial tcp:sci1-dmo1:10002,9600,8,n,1
 8793  8344   2 10o  RECV     0   52K bluefinBattServer -dev /dev/ser10
 8796  8344   2 18o  RECV     0   52K dvlServer -dev /dev/ser6
   94     7   0 10o  WAIT    -1   28K (//9/bin/tinit)
 8799  8344   2 10o REPLY     0   68K bluefinBattDriver -dev /dev/ser10
   98     7   0 10o  RECV     0   20K (//9/bin/tinit)
   99     7   0 14o  RECV     0   68K (//9/bin/Mqueue)
 8804  8344   2 10o REPLY    17   80K dvl -serial /dev/ser6,9600,8,n,1
 8806  8344   2 10o  RECV     0   48K dropWeightServer -dev /dev/ser13
 8814  8344   2 10o  RECV     0   64K statePublisher
 8818  8344   2 10o READY         52K dropWeight -serial /dev/ser13,9600,8,n,1
 8346  8344   2 10o REPLY     0   64K ./vcsServer -v
 8658  8344   2 10o REPLY     0   36K supervisor -plan AmcPlan.cfg -dyno
 8667  8344   2 10o REPLY    23   16K tee -i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
 8675  8344   2 10o  RECV     0   28K eventLogServer
 8677  8344   2 18o  RECV     0   64K workSite
 8679  8344   2 18o  RECV     0   72K vehicleConfigurationServer
 8682  8344   2 10o  RECV     0   32K externalCommsServer
 8686  8344   2 14o  RECV     0  112K navigationServer
 8688  8344   2 10o  RECV  8760   32K externalComms
 8690  8344   2 10o  RECV     0  140K layeredControl erver -dyno -plan AmcPlan.cfg -abort
{code}
bash-2.00$ *slay supervisor*
bash-2.00$ *ps \-a&nbsp;&nbsp;*

h5. In Term2 (trex2):

Verify that amc_o_rt has terminated

\[dorado1@trex2 log\]$ *ps \-elf \| grep amc*
0 R dorado1&nbsp;&nbsp; 2040&nbsp; 1761&nbsp; 0&nbsp; 78&nbsp;&nbsp; 0 \-&nbsp;&nbsp; 975 \-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14:45 pts/0&nbsp;&nbsp;&nbsp; 00:00:00 grep amc

Verify that TREX did not have a problem (relax in the log is BAD)
\\
\[dorado1@trex2 log\]$ *grep relax latest/TREX.log*
\[dorado1@trex2 log\]$
\\

Before turning off the power to the&nbsp;vehicle,&nbsp;shutdown the OS on TREX2 and mvc-dmo1 to prep for power off

\[dorado1@trex2 logs\]$ su root
Password:
\[root@trex2 logs\]# /sbin/shutdown now

Broadcast message from root (pts/2) (Wed Apr 29 14:48:07 2009):

The system is going down to maintenance mode NOW\!
\[root@trex2 logs\]#

In Term1:

bash-2.00$ su root
bash-2.00# shutdown \-b]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798105</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830857</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window, login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# Check the Iridium Modem
## *% minicom iridium*
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, exit minicom
### at the command line, enter 'reset_a3la' to run the modem power cycling script
#### *% reset_a3la*
## *% minicom iridium*
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In terminal session 1:
### % nal \-dev /dev/ttyS0
## In terminal session 2:
### % &nbsp;cd \~/auv-linux/onboard/devices/iridium/tests
### % storefwdclient \-f test-a3la.sbd
### examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# Start the nal driver for the vsim test
## % nohup nal \-dev /dev/ttyS0 &
## % tail \-f nohup.out&nbsp;&nbsp; (check the nal driver is running - look for sleep)
# Test the modem with a text file
## storefwd client<enter>&nbsp;&nbsp; (enter a test message and then wait)
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# On TREX2, make sure the config&nbsp;file is correct for vsim&nbsp;
## % *cd missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In the telnet to mvc-dmo1, startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# Move back to the T-REX stack to fire up the T-REX client
# *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\
\\

h1. Hardware-in-the-loop Test

Open 4 terminal sessions

h5. Term1:&nbsp;

*telnet mvc-dmo1*

bash-2.00$ *cd /home/dorado1/auv_autonomy*

bash-2.00$ *. configSrc*

bash-2.00$ *qtalk \-m /dev/ser13*
*\!a<enter>*&nbsp; (look for gulperFB=1), then *ctrl-a, x*
\\
\\

h5. Term2:&nbsp;&nbsp;

*ssh trex2*

\[dorado1@trex2 dorado1\]$ *cd amc*&nbsp; (/home/dorado1/amc)
{code}
[dorado1@trex2 amc]$ . config.amc[dorado1@trex2 amc]$ cd missions
[dorado1@trex2 missions]$ cat vcs.cfg
<!-- Configuration file used byt VCS/CORBA adapter and others to --
  -- declare the timelines which interface with the vehicle and other --
  -- parameters.
     Note : the remoteName should preferably be  by default (at least --
  -- on svn) mvc-dmo1 other attributes of the main tag ashould _not_ --
  -- be changed ! (except you know exactly what you are doing)
-->
<Config log="1" localPort="8002" remoteName="mvc-dmo1" remotePort="8004" missionStart="init.cfg">
        <Timeline name="vehicleState"  command="0" />
        <Timeline name="setpoint" class="Setpoint" command="1" />
        <Timeline name="descend"  class="Descend" command="1" />
        <Timeline name="ascend"   class="Ascend" command="1" />
        <Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
        <Timeline name="getgps" class="GPS" command="1" />
        <Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
\[dorado1@trex2 missions\]$
\\
\[dorado1@trex2 missions\]$ *cat amc.cfg*
{code}
<!-- This file is the basic configuration for:
     - connecting to the auv (QNX or Linux)
     - and send/receive messages through the iridium modem.
     As fo now the connect is set to 1 by default as this file should
     be used on "real" conditions.
-->
<Config>
        <!- Use this component when running onboard ->
        <TeleoReactor name="vcs" component="VCSAdapter"/>         <TeleoReactor name="exec" component="DeliberativeReactor"
                lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>
        <TeleoReactor name="downlink" component="Downlink" lookAhead="1" latency="0" log="1" connect="1" config="downlink.cfg"/>
        <!- Skipper has 10 Hour lookahead. ->
        <TeleoReactor name="skipper" component="DeliberativeReactor"
                lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg"/>
</Config>
{code}

h5.

Term3:

*slogin trex2*&nbsp;&nbsp;&nbsp; (or ssh trex2)

\[dorado1@trex2 amc\]$ *cd amc*

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 \~\]$ *minicom iridium*
Then type "*AT*" and look for "OK" (no quotes)

If the vehicle has just been powered up, there is no response so you'll need to enable the A3LA modem power

h5. Term1:

Switch back to Term1 (QNX mvc-dmo1) to toggle the modem power

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *reset_a3la*

h5. Term3:&nbsp;

Switch back to Term3 where minicom is running and type "AT", sometimes it says ERROR, just type AT again

Here's a sample of the minicom session:
{code}
Welcome to minicom 2.1
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jul 26 2006, 06:38:09.
Press CTRL-A Z for help on special keys
ERROR
OK
+SBDI: 0, 1602, 0, 0, 0, 0
OK
{code}
type ctrl-a, then x to leave minicom
\\

h5. Term4 (trex2):

\[dorado1@trex2 \~\]$ *cd amc*
\[dorado1@trex2 amc\]$ *. config.amc*
\[dorado1@trex2 amc\]$ *cd $AUV_HOME/onboard/bin*
\[dorado1@trex2 auv-linux\]$ *pwd*
/home/dorado1/auv-linux/onboard/bin

\[dorado1@trex2 bin\]$ *nohup ./nal \-dev /dev/ttyS0 &*
{code}
[1] 1968
[dorado1@trex2 bin]$ nohup: appending output to `nohup.out'
{code}
\[dorado1@trex2 bin\]$ *tail \-f nohup.out*
\\
{code}
terminate called after throwing an instance of 'omni_thread_fatal'
Reading log4cxx configuration file "/home/dorado1/auv-linux/onboard//sampleConfig/log4cxx.cfg"
14:20:15.598 DEBUG [NALDriver] read +GCMI response
14:20:15.623 INFO [NALDriver] manufacturer:
OK
14:20:15.623 INFO [NALDriver] initialize() complete
IOR:010000001a00000049444c3a6175762f53746f7265416e6446776449463a312e300<snip>000
14:20:15.643 DEBUG [NALApp] Leaving NALApp.initialize()
14:20:15.644 INFO [AuvApplication] run() - just sleeps by default
{code}
Then tail the modem.log

\[dorado1@trex2 bin\]$ *cd $AUV_LOG_DIR*
\[dorado1@trex2 logs\]$ *tail \-f modem.log*

\\
&nbsp;

h5. In Term3:

&nbsp;\[dorado1@trex2 bin\]$ *storefwdclient*&nbsp;&nbsp;&nbsp; (type in a descriptive test string like "This is the vehicle on the zephyr hardware in the loop test by Thom")

Check to see that the email arrived, \[auvsbd\] SBD Msg From Unit: 300003000227440, with an \*.sbd as attachment.&nbsp;&nbsp; Open the attachment with a text editor to verify the message
\\

h5. In Term1:

bash-2.00$ *cd $AUV_CONFIG_DIR*&nbsp;

bash-2.00$ *cp devices.test.cfg devices.cfg*

h5. In Term2 (trex2 in missions dir)

Verify the settings in init.cfg

\[dorado1@trex2 missions\]$ *pwd*
/home/dorado1/amc/missions
\[dorado1@trex2 missions\]$ *cat init.cfg*
\\
{code}
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
{code}

h5. In Term1 (mvc-dmo1):

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *nohup ./vcsServer \-v &*
\[1\] 8344
bash-2.00$ *ps \-a*
{code}
 8346  8344   2 10o REPLY    82   64K ./vcsServer -v
[1]+  Exit 154                nohup ./vcsServer -v
bash-2.00$ cd $AUV_LOG_DIR
bash-2.00$ ls
2009.117.00/              2009.119.00/              latest@
2009.118.00/              2009.119.01/              nov.13th.vcs.tar
2009.118.05/              CVS/                      testLogs/
2009.118.06/              VcsServer.log.0
{code}
bash-2.00$ *tail \-f VcsServer.log.0*

h5. In Term2:

\[dorado1@trex2 missions\]$ *nohup ../exec/amc_o_rt msg.timing.1.cfg &*
\[dorado1@trex2 missions\]$ *cd ../log/*
\[dorado1@trex2 log\]$ *tail \-f latest/TREX.log*
\\

bash-2.00$ *tail \-f VcsServer.log.0*\\
{code}
62940673.813,
######################### Wed Apr 29 21:31:13 2009
62940673.943, VcsServer -- configuration:
        Port = 8004 ms
62940673.943, VcsServer: Socket created on fd 6
62940673.993, VcsServer - running
62940853.801, VcsServer: Connected to client on 134.89.32.39
62940853.801, VcsServer[t=0, delta=0]: Grabbing data
62940853.981, VcsServer:initMission:
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
}
62940854.331, VcsServer::initMission() - starting supervisor
62940855.371, VcsServer::openLC() - created IF with LayeredControl
62940855.671, VcsServer[t=1.86987, delta=1.86987]: Grabbing data
62940891.739, VcsServer: ack - STARTED:0
62940952.044, VcsServer::handleLCMessages() - AMC mission started
62940952.044, VcsServer: ack - FINISHED:0
62941028.259, VcsServer: ack - FINISHED:5167
62941033.779, VcsServer: handling insertBehavior
62941034.039, VcsServer: ack - STARTED:6226
62941037.969, VcsServer[t=184.167, delta=0.43997]: Grabbing data
<snip> 
62941045.198, VcsServer: ack - FINISHED:6226
62941052.248, VcsServer: No ping received for 7 of up to 12 seconds
62941053.058, VcsServer: No ping received for 8 of up to 12 seconds
62941054.137, VcsServer: No ping received for 9 of up to 12 seconds
62941055.217, VcsServer: No ping received for 10 of up to 12 seconds
62941055.697, VcsServer::recvString - received 0 bytes when expected 4 (uint32_t) !!!
62941055.697, Received a NULL message : should no happen.
{code}\\

bash-2.00$ ps \-a
{code}
  PID  PGRP SID PRI STATE   BLK  SIZE COMMAND
 8707  8344   2 14o  RECV     0   60K dynamicControlServer
   17     7   0 24f  RECV     0  632K (//9/bin/Dev32)
 8726  8344   2 14o  RECV     0  176K layeredControl -dyno -plan AmcPlan.cfg -abort abortMplan.cfg
   23     7   0 10r  RECV     0   32K (//9/bin/Pipe)
   24     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   25     7   0 20r  RECV     0  160K (//9/bin/Dev32.ser)
   26     7   0 20r  RECV     0  300K (//9/bin/Dev.ctiser)
   27     7   0 20r  RECV     0  440K (//9/bin/Dev32.ansi)
   31     7   0  9o  RECV     0  148K (//9/bin/Dev32.par)
   32    17   0 20r  RECV     0  316K (//9/bin/Dev32.pty)
   36     4   0 10o  RECV     0 18272K (//9/bin/Fsys.floppy)
   37     7   0 10o  RECV     0   56K (//9/bin/Iso9660fsys)
   40     7   0 20o  RECV     0   20K (//9/bin/nameloc)
   41     7   0 20o REPLY     0   16K (//9/bin/nameloc)
   43     7   0 10o  RECV     0  120K (//9/bin/Dosfsys)
   45     7   0 23r  RECV     0  336K (//9/bin/Net)
   47     7   0 20r  RECV     0  348K (//9/bin/Net.ether82557)
   48     7   0 20r  RECV     0   56K (//9/bin/Net.ether1000)
 8754  8344   2 18o  RECV     0  132K navigation
 8756  8344   2 14o  RECV     0   64K newTailConeServer -dev /dev/ser3
 8758  8344   2 18o  RECV     0   60K m3dmgx1Server -dev /dev/ser12 -useForNav
 8761  8344   2 19o REPLY     0   96K newTailConeDriver -dev /dev/ser3,9600,8,n,1
 8762  8344   2 18o  RECV     0   48K gpsServer -r ashtech -dev /dev/ser7
 8766  8344   2 10o  RECV     0   88K m3dmgx1 -serial /dev/ser12,9600,8,n,1
 8767  8344   2 10o  RECV     0   60K parosciServer -dev /dev/ser5
 8772  8344   2 10o  RECV  8791   60K ashtechDriver -serial /dev/ser7,9600,8,n,1
 8773  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver -dev tcp:sci1-dmo1:10001
 8774  8344   2 19o REPLY    17   84K parosci -serial /dev/ser5,9600,8,n,1
 8778  8344   2 10o  RECV     0   60K seabirdServer -n ctdDriver2 -dev tcp:sci1-dmo1:10002
 8779  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver -serial tcp:sci1-dmo1:10001,9600,8,n,1
 8782  8344   2 10o REPLY    82   92K seabirdDriver -n ctdDriver2 -serial tcp:sci1-dmo1:10002,9600,8,n,1
 8793  8344   2 10o  RECV     0   52K bluefinBattServer -dev /dev/ser10
 8796  8344   2 18o  RECV     0   52K dvlServer -dev /dev/ser6
   94     7   0 10o  WAIT    -1   28K (//9/bin/tinit)
 8799  8344   2 10o REPLY     0   68K bluefinBattDriver -dev /dev/ser10
   98     7   0 10o  RECV     0   20K (//9/bin/tinit)
   99     7   0 14o  RECV     0   68K (//9/bin/Mqueue)
 8804  8344   2 10o REPLY    17   80K dvl -serial /dev/ser6,9600,8,n,1
 8806  8344   2 10o  RECV     0   48K dropWeightServer -dev /dev/ser13
 8814  8344   2 10o  RECV     0   64K statePublisher
 8818  8344   2 10o READY         52K dropWeight -serial /dev/ser13,9600,8,n,1
 8346  8344   2 10o REPLY     0   64K ./vcsServer -v
 8658  8344   2 10o REPLY     0   36K supervisor -plan AmcPlan.cfg -dyno
 8667  8344   2 10o REPLY    23   16K tee -i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
 8675  8344   2 10o  RECV     0   28K eventLogServer
 8677  8344   2 18o  RECV     0   64K workSite
 8679  8344   2 18o  RECV     0   72K vehicleConfigurationServer
 8682  8344   2 10o  RECV     0   32K externalCommsServer
 8686  8344   2 14o  RECV     0  112K navigationServer
 8688  8344   2 10o  RECV  8760   32K externalComms
 8690  8344   2 10o  RECV     0  140K layeredControl erver -dyno -plan AmcPlan.cfg -abort
{code}
bash-2.00$ *slay supervisor*
bash-2.00$ *ps \-a&nbsp;&nbsp;*

h5. In Term2 (trex2):

Verify that amc_o_rt has terminated

\[dorado1@trex2 log\]$ *ps \-elf \| grep amc*
0 R dorado1&nbsp;&nbsp; 2040&nbsp; 1761&nbsp; 0&nbsp; 78&nbsp;&nbsp; 0 \-&nbsp;&nbsp; 975 \-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14:45 pts/0&nbsp;&nbsp;&nbsp; 00:00:00 grep amc

Verify that TREX did not have a problem (relax in the log is BAD)
\\
\[dorado1@trex2 log\]$ *grep relax latest/TREX.log*
\[dorado1@trex2 log\]$\\

Before turning off the power to the&nbsp;vehicle,&nbsp;shutdown the OS on TREX2 and mvc-dmo1 to prep for power off

\[dorado1@trex2 logs\]$ su root
Password:
\[root@trex2 logs\]# /sbin/shutdown now

Broadcast message from root (pts/2) (Wed Apr 29 14:48:07 2009):

The system is going down to maintenance mode NOW\!
\[root@trex2 logs\]#

In Term1:

bash-2.00$ su root
bash-2.00# shutdown \-b]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798101</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10944948</id>
<property name="body"><![CDATA[The log of autonomy deployments\\

|| Survey Date || Op || VCS Ident || TREX Ident || Ticks || Duration || Success || Remarks per run || Overall Remarks || ||
| 4 Nov 2009 | F. Py | 2009.308.04 | 2009.308.07 | 25197s | 6h 59m 57s | TRUE | | | |
| 5&nbsp;Nov 2009 | T. Maughan | 2009.309.00 | 2009.309.01 | 2043s | 0 34m 3s | FALSE | ascend longer than expected | over constrained model of the ascend in TREX.&nbsp; - a patch was applied on other branches but not in the volume survey deployed for this run.&nbsp; | |
| 5&nbsp;Nov 2009 | T. Maughan | 2009.309.01 | 2009.309.06 | 2064s | 0h 34m 24s | FALSE | ascend longer than expected | | |
| 5&nbsp;Nov 2009 | T. Maughan | 2009.309.02 | 2009.309.07 | 1016s | 0h 16m 56s | FALSE | vcsServer socket closed (?) | VcsServer:&nbsp;&nbsp; in analyzing the failure it was determined by Frederic and Hans that the implementation was overly complicated and could be simplified to improve maintainability and reliability. | |
| 5&nbsp;Nov 2009 | T. Maughan | 2009.309.03 | 2009.309.07 | 1012s | 0h 16m 52s | FALSE | vcsServer socket closed (?) | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10912191</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10944949</id>
<property name="body"><![CDATA[The log of autonomy deployments
\\
|| Survey Date || Op || VCS Ident || TREX Ident || Ticks || Duration || Success || Remarks per run || Overall Remarks || ||
| 4 Nov 2009 | F. Py | 2009.308.04 | 2009.308.07 | 25197s | 6h 59m 57s | TRUE | | | |
| 5&nbsp;Nov 2009 | T. Maughan | 2009.309.00 | 2009.309.01 | 2043s | 0 34m 3s | FALSE | Model ascend longer than expected | over constrained model of the ascend in TREX.&nbsp; - a patch was applied on other branches but not in the volume survey deployed for this run.&nbsp; | |
| 5&nbsp;Nov 2009 | T. Maughan | 2009.309.01 | 2009.309.06 | 2064s | 0h 34m 24s | FALSE | Model ascend longer than expected | | |
| 5&nbsp;Nov 2009 | T. Maughan | 2009.309.02 | 2009.309.07 | 1016s | 0h 16m 56s | FALSE | Interface vcsServer socket closed (?) | VcsServer:&nbsp;&nbsp; in analyzing the failure it was determined by Frederic and Hans that the implementation was overly complicated and could be simplified to improve maintainability and reliability. | |
| 5&nbsp;Nov 2009 | T. Maughan | 2009.309.03 | 2009.309.07 | 1012s | 0h 16m 52s | FALSE | Interface vcsServer socket closed (?) | | |
| 9 Nov 2009 | F. Py | 2009.313.02 | 2009.313.04 | 19026s | 5h 17m 6s | FALSE | AUV MVC altitude stop: it was believed that sea conditions caused the dvl to malfunction as the ping temporal spacing caused it to hear echos and deliver a wrong altitude.&nbsp;&nbsp; No way for TREX to recover from navigation instrument failure. | Altitude: Hans changed the frequency of the signal beams to avoid the false altitude.&nbsp;&nbsp; He also patched another issue in the driver. | |
| 10 Nov 2009 | T. Maughan | X | 2009.314.01 | 0s | 0 | FALSE | Failed to execute Navigation (crash) | Navigation crash:&nbsp;&nbsp; All components of mvc needed to be compiled with a specific flag.&nbsp;&nbsp;&nbsp; After two tries, we drove the boat back and applied the rebuilt code. | |
| 10 Nov 2009 | T. Maughan | X | 2009.314.03 | 0s | 0 | FALSE | Failed to execute Navigation (crash) | | |
| 10 Nov 2009 | T. Maughan | X | 2009.314.05 | 7029s | 1h 57m 9s | FALSE | mvc-dmo1 crash | MVC-DMO1 crash:&nbsp;&nbsp; it was determined that a patch should be applied to QNX, Hans patched the QNX on the vehicle and the test machines. | |
| 18 Nov 2009 | T. Maughan | 2009.322.07 | 2009.322.09 | 577s | 0h 9m 37s | FALSE | parosci + ahrs issues | Post deployment analysis showed significant differences between the DMO mvc qnx code and the autonomy branch of the mvc qnx code. | |
| 18 Nov 2009 | T. Maughan | 2009.322.09 | 2009.322.10 | 10398s | 2h 53m 18s | TRUE | AUV issue:&nbsp;Tailcone locked resulting in the abort from TREX.&nbsp;&nbsp; Also, bad weather motivated the attempt at early termination. | Tailcone issue was found to be loose screws on one of the actuators.&nbsp;&nbsp;&nbsp; Also,&nbsp;the error recovery was analyzed on the TREX side and the tailcone failure&nbsp;revealed a dispatchability issue at TREX level which is now corrected by avoiding to dispatch a behavior before it can start (to be refined but OK) | |
| 19 Nov 2009 | F. Py | 2009.323.01 | 2009.323.02 | 4274s | 1h 11m 14s | FALSE | parosci error | This error was related to the code diffs in the autonomy branch of mvc code | |
| 19 Nov 2009 | F. Py | 2009.323.02 | 2009.323.06 | 2094s | 0h 34m 54s | FALSE | parosci error | " | |
| 8 Dec 2009 | F. Py | 2009.342.04 | 2009.342.05 | 9359s | 2h 35m 59s | TRUE | altitude stop: (see Nov. 9).&nbsp;&nbsp; Gulpers:&nbsp; it appears that the gulper commands were potentially too closely spaced for the driver. | This error was related to&nbsp; the fact that our branch was not up to date and specifically did not include latest updates related to AUV&nbsp;HW modifications | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10912192</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1061</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development
[Linux Port]
[Source Code]

h2. Meeting Minutes
[2007-02-20 Autonomy project|Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]


]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1064</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10944944</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [Monte-Carlo Testing guide|https://oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10912187</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179551</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** &nbsp;
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script

**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114069</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179554</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}

*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** &nbsp;
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script

**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114072</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179550</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** &nbsp;
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script

**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114068</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179543</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** chmod 777 /dev/ttyS\*
* Investigate update to newer kernel (2.6.23 recommended)
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script

**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114059</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179545</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** &nbsp;
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** chmod 777 /dev/ttyS\*
* Investigate update to newer kernel (2.6.23 recommended)
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script

**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114061</id>
</property>
</object>
<object class="Label" package="com.atlassian.confluence.labels">
<id name="id">20</id>
<property name="name"><![CDATA[favourite]]></property>
<property name="owner"><![CDATA[dcline]]></property>
<property name="namespace"><![CDATA[my]]></property>
<property name="creationDate">2007-02-14 14:01:03.380</property>
<property name="lastModificationDate">2015-01-06 11:30:35.870</property>
</object>
<object class="Label" package="com.atlassian.confluence.labels">
<id name="id">21</id>
<property name="name"><![CDATA[autonomy]]></property>
<property name="owner"/><property name="namespace"><![CDATA[global]]></property>
<property name="creationDate">2007-02-20 13:11:29.503</property>
<property name="lastModificationDate">2013-04-09 13:21:55.577</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179541</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** *9900VR<0x0d><0x0a> responds with *0001VR=R1.0
*** *0100SN<0x0d><0x0a> responds with *0001SN=87761
*** *0100P3<0x0d><0x0a> responds with *000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** &nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** chmod 777 /dev/ttyS\*
* Investigate update to newer kernel (2.6.23 recommended)
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script

**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114057</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004849</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}


h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "href": "\/rest\/timeline\/dorado_state"
        },
        {
            "name": "dorado_survey",
            "href": "\/rest\/timeline\/dorado_survey"
        },
        {
            "name": "drifterFollow",
            "href": "\/rest\/timeline\/drifterFollow"
        },
        {
            "name": "iridium",
            "href": "\/rest\/timeline\/iridium"
        },
        {
            "name": "mbfd",
            "href": "\/rest\/timeline\/mbfd"
        },
        {
            "name": "trex_data",
            "href": "\/rest\/timeline\/trex_data"
        },
        {
            "name": "wgOA",
            "href": "\/rest\/timeline\/wgOA"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically)
 ** I will probably add in the future extra attributes per timeline indicating information such as ehether this timeline accept goals or not, ... 
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
 ** *attachment:* A json file describing the goal
 {code:javascript}
{
   "pred"        : _string_,
   "on"          : _timeline_,
   "early_start" : _date_time_,
   "late_start"  : _date_time_,
   "early_end"   : _date_time_,
   "late_end"    : _date_time_,
}
{code}
{panel}

 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20972086</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179538</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt&nbsp;is echoing characters which is not compatible with the driver.&nbsp;&nbsp; HT thinks the Xtreme104 can be strapped for 'no echo'.&nbsp;&nbsp; Will come back to driver validation after investigation of serial card settings.&nbsp;&nbsp; Plan B will be to mod the driver to handle the echo.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Next step is to detach parosci from AUV and run on desktop with protocol analyzer - minicom may not be terminating with <CR><LF> pair.
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** &nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** chmod 777 /dev/ttyS\*
* Investigate update to newer kernel (2.6.23 recommended)
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script

**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114055</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004844</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}


h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "href": "\/rest\/timeline\/dorado_state"
        },
        {
            "name": "dorado_survey",
            "href": "\/rest\/timeline\/dorado_survey"
        },
        {
            "name": "drifterFollow",
            "href": "\/rest\/timeline\/drifterFollow"
        },
        {
            "name": "iridium",
            "href": "\/rest\/timeline\/iridium"
        },
        {
            "name": "mbfd",
            "href": "\/rest\/timeline\/mbfd"
        },
        {
            "name": "trex_data",
            "href": "\/rest\/timeline\/trex_data"
        },
        {
            "name": "wgOA",
            "href": "\/rest\/timeline\/wgOA"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically)
 ** I will probably add in the future extra attributes per timeline indicating information such as ehether this timeline accept goals or not, ... 
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
 ** *attachment:* A json file describing the goal
 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20972081</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179581</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
*&nbsp;*
\\

*Approach*
* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.&nbsp;&nbsp;\\

{dynamictasklist:NavigationDrivers}

\\
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** &nbsp;
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114099</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179577</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
*&nbsp;*\\

*Approach*
* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.\\
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\ \\
{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** &nbsp;
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114095</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004819</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/initial
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/initial
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}


h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "bar",
            "href": "/timeline/bar"
        },
        {
            "name": "baz",
            "href": "/timeline/baz"
        },
        {
            "name": "blop",
            "href": "/timeline/blop"
        },
        {
            "name": "foo",
            "href": "/timeline/foo"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/timeline/\{name\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/goal
 ** *attachment:* A json file describing the goal
 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20972056</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004820</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/initial
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/initial
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as \[H*\]HH:MM:SS\[.SUBSECOND\]
{panel}


h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "dorado_state",
            "href": "\/rest\/timeline\/dorado_state"
        },
        {
            "name": "dorado_survey",
            "href": "\/rest\/timeline\/dorado_survey"
        },
        {
            "name": "drifterFollow",
            "href": "\/rest\/timeline\/drifterFollow"
        },
        {
            "name": "iridium",
            "href": "\/rest\/timeline\/iridium"
        },
        {
            "name": "mbfd",
            "href": "\/rest\/timeline\/mbfd"
        },
        {
            "name": "trex_data",
            "href": "\/rest\/timeline\/trex_data"
        },
        {
            "name": "wgOA",
            "href": "\/rest\/timeline\/wgOA"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
 * *notes:*
 ** The set of timelines may be dynamic and can grow as time advance (e.g. A new asset is added dynamically)
 ** I will probably add in the future extra attributes per timeline indicating information such as ehether this timeline accept goals or not, ... 
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/rest/timeline/\{name\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/rest/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/rest/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/rest/goal
 ** *attachment:* A json file describing the goal
 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/rest/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20972057</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179572</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install [AUV Debian4 Linux Install]

* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** &nbsp;
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114090</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004816</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}

h3. Tick and date related services

h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "bar",
            "href": "/timeline/bar"
        },
        {
            "name": "baz",
            "href": "/timeline/baz"
        },
        {
            "name": "blop",
            "href": "/timeline/blop"
        },
        {
            "name": "foo",
            "href": "/timeline/foo"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
{panel}

{panel:title=current tick}
 * *input:* none
 * *output:* 
    The date (UTC) and value (an integer) of the current tick of trex

 This call may have a push based counterpart in the future. Indeed the current tick changes in trex as time advance. in my ODSS version I currently use a tick running at a 1 mn period 
{panel}

{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/timeline/\{name\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/goal
 ** *attachment:* A json file describing the goal
 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20972053</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179568</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install [AUV Debian4 Linux Install]

* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** &nbsp;
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script

**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114086</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004817</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

h3. General services

{panel:title=get short help}
 * *format:* 
 ** GET http://<host>/rest/help
 ** GET http://<host>/rest/help/\{cmd-path\}
 * Gets the list of services -- under \{cmd-path\} if provided -- along with a short help message
 * *output example:* GET http://<host>/rest/help/help
 {code:javascript}
{
    "help":
    [
        {
            "href": "\/rest\/help",
            "info": "List REST commands availables.\nArgument restrict the help to command matching given path."
        }
    ]
}
 {code}
{panel}

h3. Tick and date related services

{panel:title=Current tick}
 * *format:* GET http://<host>/rest/tick
 * Give information about the next tick of trex
 * *output:* GET http:://<host>/rest/tick
 {code:javascript}
{
    "value": "10",
    "date": "2013-May-13 21:25:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Next tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the current tick of trex
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "11",
    "date": "2013-May-13 21:26:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/next
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/next
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Initial tick}
 * *format:* GET http://<host>/rest/tick/initial
 * Give information about the first tick of trex (usually 0)
 * *output:* GET http:://<host>/rest/tick/initial
 {code:javascript}
{
    "value": "0",
    "date": "2013-May-13 21:15:54.702062"
}
 {code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=Final tick}
 * *format:* GET http://<host>/rest/tick/final
 * Give information about the last tick of trex. The last tick of trex is the date where it will quit.
 * *output:* GET http:://<host>/rest/tick/final
 {code:javascript}
{
    "value": "4200563684",
    "date": "9999-Dec-31 23:59:54.702062"
} 
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick info}
 * *format:* GET http://<host>/rest/tick/\{number\}
 * Give information about the tick \{number\}
 * *output example:* GET http:://<host>/rest/tick/200
 {code:javascript}
{
    "value": "200",
    "date": "2013-May-14 00:35:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick at a date}
 * *format:* GET http://<host>/rest/tick/at/\{date\}
 * Give information about the largest tick before or at the provide UTC \{date\} 
 * *output example:* GET http:://<host>/rest/tick/at/2014-Jan-01%2000:00:00
 {code:javascript}
{
    "value": "334244",
    "date": "2013-Dec-31 23:59:54.702062"
}
{code}
 ** _value_ : the tick value as represented by trex
 ** _date_ : the corresponding UTM date 
{panel}

{panel:title=tick rate/duration}
 * *format:* GET http://<host>/rest/tick/rate
 * Give information about the duration of a tick
 * *output:* GET http:://<host>/rest/tick/rate
 {code:javascript}
{
    "nanoseconds": "60000000000",
    "duration": "00:01:00"
}
{code}
 ** _nanoseconds_ : the duration in ns
 ** _duration_ : same duration as [H*]HH:MM:SS[.SUBSECOND]
{panel}


h3. Timelines and goals services

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/rest/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "bar",
            "href": "/timeline/bar"
        },
        {
            "name": "baz",
            "href": "/timeline/baz"
        },
        {
            "name": "blop",
            "href": "/timeline/blop"
        },
        {
            "name": "foo",
            "href": "/timeline/foo"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
{panel}


{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/timeline/\{name\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/goal
 ** *attachment:* A json file describing the goal
 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20972054</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179566</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build
\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script

**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114084</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830723</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window, login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# Check the Iridium Modem
## *% minicom iridium*
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, exit minicom
### at the command line, enter 'reset_a3la' to run the modem power cycling script
#### *% reset_a3la*
## *% minicom iridium*
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In terminal session 1:
### % nal \-dev /dev/ttyS0
## In terminal session 2:
### % &nbsp;cd \~/auv-linux/onboard/devices/iridium/tests
### % storefwdclient \-f test-a3la.sbd
### examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# Start the nal driver for the vsim test
## % nohup nal \-dev /dev/ttyS0 &
## % tail \-f nohup.out&nbsp;&nbsp; (check the nal driver is running - look for sleep)
# Test the modem with a text file
## storefwd client<enter>&nbsp;&nbsp; (enter a test message and then wait)
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# On TREX2, make sure the config&nbsp;file is correct for vsim&nbsp;
## % *cd missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In the telnet to mvc-dmo1, startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# Move back to the T-REX stack to fire up the T-REX client
# *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\
\\

h1. Hardware-in-the-loop Test

Open 4 terminal sessions

h5. Term1:&nbsp;

*telnet mvc-dmo1*

bash-2.00$ *cd /home/dorado1/auv_autonomy*

bash-2.00$ *. configSrc*

bash-2.00$ *qtalk \-m /dev/ser13*
*\!a<enter>*&nbsp; (look for gulperFB=1), then *ctrl-a, x*
\\
\\

h5. Term2:&nbsp;&nbsp;

*ssh trex2*

\[dorado1@trex2 dorado1\]$ *cd amc*&nbsp; (/home/dorado1/amc)
{code}
[dorado1@trex2 amc]$ . config.amc[dorado1@trex2 amc]$ cd missions
[dorado1@trex2 missions]$ cat vcs.cfg
<!-- Configuration file used byt VCS/CORBA adapter and others to --
  -- declare the timelines which interface with the vehicle and other --
  -- parameters.
     Note : the remoteName should preferably be  by default (at least --
  -- on svn) mvc-dmo1 other attributes of the main tag ashould _not_ --
  -- be changed ! (except you know exactly what you are doing)
-->
<Config log="1" localPort="8002" remoteName="mvc-dmo1" remotePort="8004" missionStart="init.cfg">
        <Timeline name="vehicleState"  command="0" />
        <Timeline name="setpoint" class="Setpoint" command="1" />
        <Timeline name="descend"  class="Descend" command="1" />
        <Timeline name="ascend"   class="Ascend" command="1" />
        <Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
        <Timeline name="getgps" class="GPS" command="1" />
        <Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}

\[dorado1@trex2 missions\]$
\\
\[dorado1@trex2 missions\]$ *cat amc.cfg*

{code}
<!-- This file is the basic configuration for:
     - connecting to the auv (QNX or Linux)
     - and send/receive messages through the iridium modem.
     As fo now the connect is set to 1 by default as this file should
     be used on "real" conditions.
-->
<Config>
        <!- Use this component when running onboard ->
        <TeleoReactor name="vcs" component="VCSAdapter"/>         <TeleoReactor name="exec" component="DeliberativeReactor"
                lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>
        <TeleoReactor name="downlink" component="Downlink" lookAhead="1" latency="0" log="1" connect="1" config="downlink.cfg"/>
        <!- Skipper has 10 Hour lookahead. ->
        <TeleoReactor name="skipper" component="DeliberativeReactor"
                lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg"/>
</Config>
{code}

h5.
&nbsp;
Term3:

*slogin trex2*&nbsp;&nbsp;&nbsp; (or ssh trex2)

\[dorado1@trex2 amc\]$ *cd amc*

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 \~\]$ *minicom iridium*
Then type "*AT*" and look for "OK" (no quotes)

If the vehicle has just been powered up, there is no response so you'll need to enable the A3LA modem power

h5. Term1:

Switch back to Term1 (QNX mvc-dmo1) to toggle the modem power

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *reset_a3la*

h5. Term3:&nbsp;

Switch back to Term3 where minicom is running and type "AT", sometimes it says ERROR, just type AT again

Here's a sample of the minicom session:
{code}
Welcome to minicom 2.1
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jul 26 2006, 06:38:09.
Press CTRL-A Z for help on special keys
ERROR
OK
+SBDI: 0, 1602, 0, 0, 0, 0
OK

{code}\\

Type ctrl-a, then x to leave minicom
\\

In Term4:

\[dorado1@trex2 \~\]$ cd amc
\[dorado1@trex2 amc\]$ . config.amc
\[dorado1@trex2 amc\]$ cd $AUV_HOME/onboard/bin
\[dorado1@trex2 auv-linux\]$ pwd
/home/dorado1/auv-linux/onboard/bin

\[dorado1@trex2 bin\]$ nohup ./nal \-dev /dev/ttyS0 &
\[1\] 1968
\[dorado1@trex2 bin\]$ nohup: appending output to `nohup.out'

\[dorado1@trex2 bin\]$ tail \-f nohup.out
terminate called after throwing an instance of 'omni_thread_fatal'
Reading log4cxx configuration file "/home/dorado1/auv-linux/onboard//sampleConfig/log4cxx.cfg"
14:20:15.598 DEBUG \[NALDriver\] read \+GCMI response
14:20:15.623 INFO \[NALDriver\] manufacturer:
OK

14:20:15.623 INFO \[NALDriver\] initialize() complete
IOR:010000001a00000049444c3a6175762f53746f7265416e6446776449463a312e30000000010000000000000064000000010102000d0000003133342e38392e33322e333900002aa60e000000fe8ac4f849000007b0000000000200000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
14:20:15.643 DEBUG \[NALApp\] Leaving NALApp.initialize()
14:20:15.644 INFO \[AuvApplication\] run() - just sleeps by default

Then tail the modem.log

\[dorado1@trex2 bin\]$ cd $AUV_LOG_DIR
\[dorado1@trex2 logs\]$ tail \-f modem.log

cd $AUV\_
\\

In Term3:

&nbsp;\[dorado1@trex2 bin\]$ storefwdclient&nbsp;&nbsp;&nbsp; (type in a descriptive test string like "This is the vehicle on the zephyr hardware in the loop test by Thom")

Check to see that the email arrived, \[auvsbd\] SBD Msg From Unit: 300003000227440, with an \*.sbd as attachment.&nbsp;&nbsp; Open the attachment with a text editor to verify the message
\\

In Term1:

bash-2.00$ cd $AUV_CONFIG_DIR&nbsp;

bash-2.00$ cp devices.test.cfg devices.cfg

In Term2 (trex2 in missions dir)

Verify the settings in init.cfg

\[dorado1@trex2 missions\]$ pwd
/home/dorado1/amc/missions
\[dorado1@trex2 missions\]$ cat init.cfg
behavior missionTimer {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeOut = 26000;
}

behavior depthEnvelope {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minDepth = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxDepth = 175;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortDepth = 185;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortAltitude = 15.0;
}

behavior setpoint {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heading=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; speed=0.0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; verticalMode=pitch;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pitch=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; duration=60;

In Term1 (mvc-dmo1)

bash-2.00$ cd $AUV/bin
bash-2.00$ nohup ./vcsServer \-v &
\[1\] 8344
bash-2.00$ ps \-a

&nbsp;8346&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 82&nbsp;&nbsp; 64K ./vcsServer \-v
\[1\]+&nbsp; Exit 154&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nohup ./vcsServer \-v

bash-2.00$ cd $AUV_LOG_DIR
bash-2.00$ ls
2009.117.00/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009.119.00/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; latest@
2009.118.00/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009.119.01/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nov.13th.vcs.tar
2009.118.05/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CVS/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testLogs/
2009.118.06/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VcsServer.log.0
bash-2.00$ tail \-f VcsServer.log.0

In Term2:

\[dorado1@trex2 missions\]$ nohup ../exec/amc_o_rt msg.timing.1.cfg &
\[dorado1@trex2 missions\]$ cd ../log/
\[dorado1@trex2 log\]$ tail \-f latest/TREX.log
\\

bash-2.00$ tail \-f VcsServer.log.0
62940673.813,
\######################### Wed Apr 29 21:31:13 2009

62940673.943, VcsServer \-\- configuration:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Port = 8004 ms
62940673.943, VcsServer: Socket created on fd 6
62940673.993, VcsServer - running
62940853.801, VcsServer: Connected to client on 134.89.32.39
62940853.801, VcsServer\[t=0, delta=0\]: Grabbing data

62940853.981, VcsServer:initMission:
behavior missionTimer {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeOut = 26000;
}

behavior depthEnvelope {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minDepth = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxDepth = 175;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortDepth = 185;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortAltitude = 15.0;
}

behavior setpoint {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heading=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; speed=0.0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; verticalMode=pitch;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pitch=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; duration=60;
}
62940854.331, VcsServer::initMission() - starting supervisor
62940855.371, VcsServer::openLC() - created IF with LayeredControl
62940855.671, VcsServer\[t=1.86987, delta=1.86987\]: Grabbing data

62940891.739, VcsServer: ack - STARTED:0
62940952.044, VcsServer::handleLCMessages() - AMC mission started
62940952.044, VcsServer: ack - FINISHED:0
62940956.784, VcsServer: handling insertBehavior
62940957.024, VcsServer: ack - STARTED:140
62940960.284, VcsServer: ack - FINISHED:140
62940965.603, VcsServer: handling insertBehavior
62940966.183, VcsServer: ack - STARTED:1888
62940976.943, VcsServer\[t=123.142, delta=0.429971\]: Grabbing data

62940977.213, VcsServer: ack - FINISHED:1888
62940982.762, VcsServer: handling insertBehavior
62940982.992, VcsServer: ack - STARTED:3023
62940992.952, VcsServer\[t=139.15, delta=0.43997\]: Grabbing data

62940994.242, VcsServer: ack - FINISHED:3023
62940999.701, VcsServer: handling insertBehavior
62940999.931, VcsServer: ack - STARTED:4108
62941002.001, VcsServer\[t=148.2, delta=0.479967\]: Grabbing data

62941005.941, VcsServer\[t=152.14, delta=0.429971\]: Grabbing data

62941008.961, VcsServer\[t=155.159, delta=0.43997\]: Grabbing data

62941011.090, VcsServer: ack - FINISHED:4108
62941016.650, VcsServer: handling insertBehavior
62941017.190, VcsServer: ack - STARTED:5167
62941018.940, VcsServer\[t=165.139, delta=0.429971\]: Grabbing data

62941021.960, VcsServer\[t=168.158, delta=0.43997\]: Grabbing data

62941028.259, VcsServer: ack - FINISHED:5167
62941033.779, VcsServer: handling insertBehavior
62941034.039, VcsServer: ack - STARTED:6226
62941037.969, VcsServer\[t=184.167, delta=0.43997\]: Grabbing data

62941045.198, VcsServer: ack - FINISHED:6226
62941052.248, VcsServer: No ping received for 7 of up to 12 seconds
62941053.058, VcsServer: No ping received for 8 of up to 12 seconds
62941054.137, VcsServer: No ping received for 9 of up to 12 seconds
62941055.217, VcsServer: No ping received for 10 of up to 12 seconds
62941055.697, VcsServer::recvString - received 0 bytes when expected 4 (uint32_t) \!\!\!
62941055.697, Received a NULL message : should no happen.

bash-2.00$ ps \-a
&nbsp; PID&nbsp; PGRP SID PRI STATE&nbsp;&nbsp; BLK&nbsp; SIZE COMMAND
&nbsp;8707&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K dynamicControlServer
&nbsp;&nbsp; 17&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 24f&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 632K (//9/bin/Dev32)
&nbsp;8726&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 176K layeredControl \-dyno \-plan AmcPlan.cfg \-abort abortMplan.cfg
&nbsp;&nbsp; 23&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 32K (//9/bin/Pipe)
&nbsp;&nbsp; 24&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 160K (//9/bin/Dev32.ser)
&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 160K (//9/bin/Dev32.ser)
&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 300K (//9/bin/Dev.ctiser)
&nbsp;&nbsp; 27&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 440K (//9/bin/Dev32.ansi)
&nbsp;&nbsp; 31&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0&nbsp; 9o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 148K (//9/bin/Dev32.par)
&nbsp;&nbsp; 32&nbsp;&nbsp;&nbsp; 17&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 316K (//9/bin/Dev32.pty)
&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0 18272K (//9/bin/Fsys.floppy)
&nbsp;&nbsp; 37&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 56K (//9/bin/Iso9660fsys)
&nbsp;&nbsp; 40&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 20K (//9/bin/nameloc)
&nbsp;&nbsp; 41&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 16K (//9/bin/nameloc)
&nbsp;&nbsp; 43&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 120K (//9/bin/Dosfsys)
&nbsp;&nbsp; 45&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 23r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 336K (//9/bin/Net)
&nbsp;&nbsp; 47&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 348K (//9/bin/Net.ether82557)
&nbsp;&nbsp; 48&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 56K (//9/bin/Net.ether1000)
&nbsp;8754&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 132K navigation
&nbsp;8756&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K newTailConeServer \-dev /dev/ser3
&nbsp;8758&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K m3dmgx1Server \-dev /dev/ser12 \-useForNav
&nbsp;8761&nbsp; 8344&nbsp;&nbsp; 2 19o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 96K newTailConeDriver \-dev /dev/ser3,9600,8,n,1
&nbsp;8762&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 48K gpsServer \-r ashtech \-dev /dev/ser7
&nbsp;8766&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 88K m3dmgx1 \-serial /dev/ser12,9600,8,n,1
&nbsp;8767&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K parosciServer \-dev /dev/ser5
&nbsp;8772&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp; 8791&nbsp;&nbsp; 60K ashtechDriver \-serial /dev/ser7,9600,8,n,1
&nbsp;8773&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
&nbsp;8774&nbsp; 8344&nbsp;&nbsp; 2 19o REPLY&nbsp;&nbsp;&nbsp; 17&nbsp;&nbsp; 84K parosci \-serial /dev/ser5,9600,8,n,1
&nbsp;8778&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
&nbsp;8779&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 82&nbsp;&nbsp; 92K seabirdDriver \-n ctdDriver \-serial tcp:sci1-dmo1:10001,9600,8,n,1
&nbsp;8782&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 82&nbsp;&nbsp; 92K seabirdDriver \-n ctdDriver2 \-serial tcp:sci1-dmo1:10002,9600,8,n,1
&nbsp;8793&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 52K bluefinBattServer \-dev /dev/ser10
&nbsp;8796&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 52K dvlServer \-dev /dev/ser6
&nbsp;&nbsp; 94&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; WAIT&nbsp;&nbsp;&nbsp; \-1&nbsp;&nbsp; 28K (//9/bin/tinit)
&nbsp;8799&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 68K bluefinBattDriver \-dev /dev/ser10
&nbsp;&nbsp; 98&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 20K (//9/bin/tinit)
&nbsp;&nbsp; 99&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 68K (//9/bin/Mqueue)
&nbsp;8804&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 17&nbsp;&nbsp; 80K dvl \-serial /dev/ser6,9600,8,n,1
&nbsp;8806&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 48K dropWeightServer \-dev /dev/ser13
&nbsp;8814&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K statePublisher
&nbsp;8818&nbsp; 8344&nbsp;&nbsp; 2 10o READY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 52K dropWeight \-serial /dev/ser13,9600,8,n,1
&nbsp;8346&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K ./vcsServer \-v
&nbsp;8658&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 36K supervisor \-plan AmcPlan.cfg \-dyno
&nbsp;8667&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 23&nbsp;&nbsp; 16K tee \-i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
&nbsp;8675&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 28K eventLogServer
&nbsp;8677&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K workSite
&nbsp;8679&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 72K vehicleConfigurationServer
&nbsp;8682&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 32K externalCommsServer
&nbsp;8686&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 112K navigationServer
&nbsp;8688&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp; 8760&nbsp;&nbsp; 32K externalComms
&nbsp;8690&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 140K layeredControl erver \-dyno \-plan AmcPlan.cfg \-abort
bash-2.00$

bash-2.00$ slay supervisor
bash-2.00$ ps \-a&nbsp;&nbsp;

In Term2 (trex2):

Verify that amc_o_rt has terminated

\[dorado1@trex2 log\]$ ps \-elf \| grep amc
0 R dorado1&nbsp;&nbsp; 2040&nbsp; 1761&nbsp; 0&nbsp; 78&nbsp;&nbsp; 0 \-&nbsp;&nbsp; 975 \-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14:45 pts/0&nbsp;&nbsp;&nbsp; 00:00:00 grep amc

Verify that TREX did not have a problem (relax in the log is BAD)
\\
\[dorado1@trex2 log\]$ grep relax latest/TREX.log
\[dorado1@trex2 log\]$

&nbsp;Now, shutdown the OS on TREX2 to prep for power off

\[dorado1@trex2 logs\]$ su root
Password:
\[root@trex2 logs\]# /sbin/shutdown now

Broadcast message from root (pts/2) (Wed Apr 29 14:48:07 2009):

The system is going down to maintenance mode NOW\!
\[root@trex2 logs\]#

In Term1:

bash-2.00$ su root
bash-2.00# shutdown \-b]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797956</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179564</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

Links

[AUV Linux - Driver Port and Validation]

\\
&nbsp;

h6. *To Do List*

* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

h6. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script

**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114082</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830725</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window, login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# Check the Iridium Modem
## *% minicom iridium*
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, exit minicom
### at the command line, enter 'reset_a3la' to run the modem power cycling script
#### *% reset_a3la*
## *% minicom iridium*
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In terminal session 1:
### % nal \-dev /dev/ttyS0
## In terminal session 2:
### % &nbsp;cd \~/auv-linux/onboard/devices/iridium/tests
### % storefwdclient \-f test-a3la.sbd
### examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# Start the nal driver for the vsim test
## % nohup nal \-dev /dev/ttyS0 &
## % tail \-f nohup.out&nbsp;&nbsp; (check the nal driver is running - look for sleep)
# Test the modem with a text file
## storefwd client<enter>&nbsp;&nbsp; (enter a test message and then wait)
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# On TREX2, make sure the config&nbsp;file is correct for vsim&nbsp;
## % *cd missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In the telnet to mvc-dmo1, startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# Move back to the T-REX stack to fire up the T-REX client
# *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\
\\

h1. Hardware-in-the-loop Test

Open 4 terminal sessions

h5. Term1:&nbsp;

*telnet mvc-dmo1*

bash-2.00$ *cd /home/dorado1/auv_autonomy*

bash-2.00$ *. configSrc*

bash-2.00$ *qtalk \-m /dev/ser13*
*\!a<enter>*&nbsp; (look for gulperFB=1), then *ctrl-a, x*
\\
\\

h5. Term2:&nbsp;&nbsp;

*ssh trex2*

\[dorado1@trex2 dorado1\]$ *cd amc*&nbsp; (/home/dorado1/amc)
{code}
[dorado1@trex2 amc]$ . config.amc[dorado1@trex2 amc]$ cd missions
[dorado1@trex2 missions]$ cat vcs.cfg
<!-- Configuration file used byt VCS/CORBA adapter and others to --
  -- declare the timelines which interface with the vehicle and other --
  -- parameters.
     Note : the remoteName should preferably be  by default (at least --
  -- on svn) mvc-dmo1 other attributes of the main tag ashould _not_ --
  -- be changed ! (except you know exactly what you are doing)
-->
<Config log="1" localPort="8002" remoteName="mvc-dmo1" remotePort="8004" missionStart="init.cfg">
        <Timeline name="vehicleState"  command="0" />
        <Timeline name="setpoint" class="Setpoint" command="1" />
        <Timeline name="descend"  class="Descend" command="1" />
        <Timeline name="ascend"   class="Ascend" command="1" />
        <Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
        <Timeline name="getgps" class="GPS" command="1" />
        <Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
\[dorado1@trex2 missions\]$
\\
\[dorado1@trex2 missions\]$ *cat amc.cfg*
{code}
<!-- This file is the basic configuration for:
     - connecting to the auv (QNX or Linux)
     - and send/receive messages through the iridium modem.
     As fo now the connect is set to 1 by default as this file should
     be used on "real" conditions.
-->
<Config>
        <!- Use this component when running onboard ->
        <TeleoReactor name="vcs" component="VCSAdapter"/>         <TeleoReactor name="exec" component="DeliberativeReactor"
                lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>
        <TeleoReactor name="downlink" component="Downlink" lookAhead="1" latency="0" log="1" connect="1" config="downlink.cfg"/>
        <!- Skipper has 10 Hour lookahead. ->
        <TeleoReactor name="skipper" component="DeliberativeReactor"
                lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg"/>
</Config>
{code}

h5.


Term3:

*slogin trex2*&nbsp;&nbsp;&nbsp; (or ssh trex2)

\[dorado1@trex2 amc\]$ *cd amc*

\[dorado1@trex2 amc\]$ *. config.amc*

\[dorado1@trex2 \~\]$ *minicom iridium*
Then type "*AT*" and look for "OK" (no quotes)

If the vehicle has just been powered up, there is no response so you'll need to enable the A3LA modem power

h5. Term1:

Switch back to Term1 (QNX mvc-dmo1) to toggle the modem power

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *reset_a3la*

h5. Term3:&nbsp;

Switch back to Term3 where minicom is running and type "AT", sometimes it says ERROR, just type AT again

Here's a sample of the minicom session:
{code}
Welcome to minicom 2.1
OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jul 26 2006, 06:38:09.
Press CTRL-A Z for help on special keys
ERROR
OK
+SBDI: 0, 1602, 0, 0, 0, 0
OK
{code}

type ctrl-a, then x to leave minicom
\\

h5. Term4 (trex2):

\[dorado1@trex2 \~\]$ *cd amc*
\[dorado1@trex2 amc\]$ *. config.amc*
\[dorado1@trex2 amc\]$ *cd $AUV_HOME/onboard/bin*
\[dorado1@trex2 auv-linux\]$ *pwd*
/home/dorado1/auv-linux/onboard/bin

\[dorado1@trex2 bin\]$ *nohup ./nal \-dev /dev/ttyS0 &*
{code}
[1] 1968
[dorado1@trex2 bin]$ nohup: appending output to `nohup.out'
{code}
\[dorado1@trex2 bin\]$ *tail \-f nohup.out*\\
{code}
terminate called after throwing an instance of 'omni_thread_fatal'
Reading log4cxx configuration file "/home/dorado1/auv-linux/onboard//sampleConfig/log4cxx.cfg"
14:20:15.598 DEBUG [NALDriver] read +GCMI response
14:20:15.623 INFO [NALDriver] manufacturer:
OK
14:20:15.623 INFO [NALDriver] initialize() complete
IOR:010000001a00000049444c3a6175762f53746f7265416e6446776449463a312e300<snip>000
14:20:15.643 DEBUG [NALApp] Leaving NALApp.initialize()
14:20:15.644 INFO [AuvApplication] run() - just sleeps by default
{code}
Then tail the modem.log

\[dorado1@trex2 bin\]$ *cd $AUV_LOG_DIR*
\[dorado1@trex2 logs\]$ *tail \-f modem.log*

\\
&nbsp;

h5. In Term3:

&nbsp;\[dorado1@trex2 bin\]$ *storefwdclient*&nbsp;&nbsp;&nbsp; (type in a descriptive test string like "This is the vehicle on the zephyr hardware in the loop test by Thom")

Check to see that the email arrived, \[auvsbd\] SBD Msg From Unit: 300003000227440, with an \*.sbd as attachment.&nbsp;&nbsp; Open the attachment with a text editor to verify the message
\\

h5. In Term1:

bash-2.00$ *cd $AUV_CONFIG_DIR*&nbsp;

bash-2.00$ *cp devices.test.cfg devices.cfg*

h5. In Term2 (trex2 in missions dir)

Verify the settings in init.cfg

\[dorado1@trex2 missions\]$ *pwd*
/home/dorado1/amc/missions
\[dorado1@trex2 missions\]$ *cat init.cfg*\\
{code}
behavior missionTimer {
        timeOut = 26000;
}
behavior depthEnvelope {
        minDepth = 0;
        maxDepth = 175;
        abortDepth = 185;
        abortAltitude = 15.0;
}
behavior setpoint {
        id=0;
        heading=0;
        speed=0.0;
        verticalMode=pitch;
        pitch=0;
        duration=60;
{code}

h5. In Term1 (mvc-dmo1):

bash-2.00$ *cd $AUV/bin*
bash-2.00$ *nohup ./vcsServer \-v &*
\[1\] 8344
bash-2.00$ *ps \-a*
{code}
 8346  8344   2 10o REPLY    82   64K ./vcsServer -v
[1]+  Exit 154                nohup ./vcsServer -v
bash-2.00$ cd $AUV_LOG_DIR
bash-2.00$ ls
2009.117.00/              2009.119.00/              latest@
2009.118.00/              2009.119.01/              nov.13th.vcs.tar
2009.118.05/              CVS/                      testLogs/
2009.118.06/              VcsServer.log.0
{code}

bash-2.00$ tail \-f VcsServer.log.0

In Term2:

\[dorado1@trex2 missions\]$ nohup ../exec/amc_o_rt msg.timing.1.cfg &
\[dorado1@trex2 missions\]$ cd ../log/
\[dorado1@trex2 log\]$ tail \-f latest/TREX.log
\\

bash-2.00$ tail \-f VcsServer.log.0
62940673.813,
\######################### Wed Apr 29 21:31:13 2009

62940673.943, VcsServer \-\- configuration:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Port = 8004 ms
62940673.943, VcsServer: Socket created on fd 6
62940673.993, VcsServer - running
62940853.801, VcsServer: Connected to client on 134.89.32.39
62940853.801, VcsServer\[t=0, delta=0\]: Grabbing data

62940853.981, VcsServer:initMission:
behavior missionTimer {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeOut = 26000;
}

behavior depthEnvelope {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minDepth = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxDepth = 175;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortDepth = 185;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortAltitude = 15.0;
}

behavior setpoint {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heading=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; speed=0.0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; verticalMode=pitch;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pitch=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; duration=60;
}
62940854.331, VcsServer::initMission() - starting supervisor
62940855.371, VcsServer::openLC() - created IF with LayeredControl
62940855.671, VcsServer\[t=1.86987, delta=1.86987\]: Grabbing data

62940891.739, VcsServer: ack - STARTED:0
62940952.044, VcsServer::handleLCMessages() - AMC mission started
62940952.044, VcsServer: ack - FINISHED:0
62940956.784, VcsServer: handling insertBehavior
62940957.024, VcsServer: ack - STARTED:140
62940960.284, VcsServer: ack - FINISHED:140
62940965.603, VcsServer: handling insertBehavior
62940966.183, VcsServer: ack - STARTED:1888
62940976.943, VcsServer\[t=123.142, delta=0.429971\]: Grabbing data

62940977.213, VcsServer: ack - FINISHED:1888
62940982.762, VcsServer: handling insertBehavior
62940982.992, VcsServer: ack - STARTED:3023
62940992.952, VcsServer\[t=139.15, delta=0.43997\]: Grabbing data

62940994.242, VcsServer: ack - FINISHED:3023
62940999.701, VcsServer: handling insertBehavior
62940999.931, VcsServer: ack - STARTED:4108
62941002.001, VcsServer\[t=148.2, delta=0.479967\]: Grabbing data

62941005.941, VcsServer\[t=152.14, delta=0.429971\]: Grabbing data

62941008.961, VcsServer\[t=155.159, delta=0.43997\]: Grabbing data

62941011.090, VcsServer: ack - FINISHED:4108
62941016.650, VcsServer: handling insertBehavior
62941017.190, VcsServer: ack - STARTED:5167
62941018.940, VcsServer\[t=165.139, delta=0.429971\]: Grabbing data

62941021.960, VcsServer\[t=168.158, delta=0.43997\]: Grabbing data

62941028.259, VcsServer: ack - FINISHED:5167
62941033.779, VcsServer: handling insertBehavior
62941034.039, VcsServer: ack - STARTED:6226
62941037.969, VcsServer\[t=184.167, delta=0.43997\]: Grabbing data

62941045.198, VcsServer: ack - FINISHED:6226
62941052.248, VcsServer: No ping received for 7 of up to 12 seconds
62941053.058, VcsServer: No ping received for 8 of up to 12 seconds
62941054.137, VcsServer: No ping received for 9 of up to 12 seconds
62941055.217, VcsServer: No ping received for 10 of up to 12 seconds
62941055.697, VcsServer::recvString - received 0 bytes when expected 4 (uint32_t) \!\!\!
62941055.697, Received a NULL message : should no happen.

bash-2.00$ ps \-a
&nbsp; PID&nbsp; PGRP SID PRI STATE&nbsp;&nbsp; BLK&nbsp; SIZE COMMAND
&nbsp;8707&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K dynamicControlServer
&nbsp;&nbsp; 17&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 24f&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 632K (//9/bin/Dev32)
&nbsp;8726&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 176K layeredControl \-dyno \-plan AmcPlan.cfg \-abort abortMplan.cfg
&nbsp;&nbsp; 23&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 32K (//9/bin/Pipe)
&nbsp;&nbsp; 24&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 160K (//9/bin/Dev32.ser)
&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 160K (//9/bin/Dev32.ser)
&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 300K (//9/bin/Dev.ctiser)
&nbsp;&nbsp; 27&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 440K (//9/bin/Dev32.ansi)
&nbsp;&nbsp; 31&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0&nbsp; 9o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 148K (//9/bin/Dev32.par)
&nbsp;&nbsp; 32&nbsp;&nbsp;&nbsp; 17&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 316K (//9/bin/Dev32.pty)
&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0 18272K (//9/bin/Fsys.floppy)
&nbsp;&nbsp; 37&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 56K (//9/bin/Iso9660fsys)
&nbsp;&nbsp; 40&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 20K (//9/bin/nameloc)
&nbsp;&nbsp; 41&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 16K (//9/bin/nameloc)
&nbsp;&nbsp; 43&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 120K (//9/bin/Dosfsys)
&nbsp;&nbsp; 45&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 23r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 336K (//9/bin/Net)
&nbsp;&nbsp; 47&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 348K (//9/bin/Net.ether82557)
&nbsp;&nbsp; 48&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 56K (//9/bin/Net.ether1000)
&nbsp;8754&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 132K navigation
&nbsp;8756&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K newTailConeServer \-dev /dev/ser3
&nbsp;8758&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K m3dmgx1Server \-dev /dev/ser12 \-useForNav
&nbsp;8761&nbsp; 8344&nbsp;&nbsp; 2 19o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 96K newTailConeDriver \-dev /dev/ser3,9600,8,n,1
&nbsp;8762&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 48K gpsServer \-r ashtech \-dev /dev/ser7
&nbsp;8766&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 88K m3dmgx1 \-serial /dev/ser12,9600,8,n,1
&nbsp;8767&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K parosciServer \-dev /dev/ser5
&nbsp;8772&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp; 8791&nbsp;&nbsp; 60K ashtechDriver \-serial /dev/ser7,9600,8,n,1
&nbsp;8773&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
&nbsp;8774&nbsp; 8344&nbsp;&nbsp; 2 19o REPLY&nbsp;&nbsp;&nbsp; 17&nbsp;&nbsp; 84K parosci \-serial /dev/ser5,9600,8,n,1
&nbsp;8778&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
&nbsp;8779&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 82&nbsp;&nbsp; 92K seabirdDriver \-n ctdDriver \-serial tcp:sci1-dmo1:10001,9600,8,n,1
&nbsp;8782&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 82&nbsp;&nbsp; 92K seabirdDriver \-n ctdDriver2 \-serial tcp:sci1-dmo1:10002,9600,8,n,1
&nbsp;8793&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 52K bluefinBattServer \-dev /dev/ser10
&nbsp;8796&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 52K dvlServer \-dev /dev/ser6
&nbsp;&nbsp; 94&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; WAIT&nbsp;&nbsp;&nbsp; \-1&nbsp;&nbsp; 28K (//9/bin/tinit)
&nbsp;8799&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 68K bluefinBattDriver \-dev /dev/ser10
&nbsp;&nbsp; 98&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 20K (//9/bin/tinit)
&nbsp;&nbsp; 99&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 68K (//9/bin/Mqueue)
&nbsp;8804&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 17&nbsp;&nbsp; 80K dvl \-serial /dev/ser6,9600,8,n,1
&nbsp;8806&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 48K dropWeightServer \-dev /dev/ser13
&nbsp;8814&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K statePublisher
&nbsp;8818&nbsp; 8344&nbsp;&nbsp; 2 10o READY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 52K dropWeight \-serial /dev/ser13,9600,8,n,1
&nbsp;8346&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K ./vcsServer \-v
&nbsp;8658&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 36K supervisor \-plan AmcPlan.cfg \-dyno
&nbsp;8667&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 23&nbsp;&nbsp; 16K tee \-i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
&nbsp;8675&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 28K eventLogServer
&nbsp;8677&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K workSite
&nbsp;8679&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 72K vehicleConfigurationServer
&nbsp;8682&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 32K externalCommsServer
&nbsp;8686&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 112K navigationServer
&nbsp;8688&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp; 8760&nbsp;&nbsp; 32K externalComms
&nbsp;8690&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 140K layeredControl erver \-dyno \-plan AmcPlan.cfg \-abort
bash-2.00$

bash-2.00$ slay supervisor
bash-2.00$ ps \-a&nbsp;&nbsp;

In Term2 (trex2):

Verify that amc_o_rt has terminated

\[dorado1@trex2 log\]$ ps \-elf \| grep amc
0 R dorado1&nbsp;&nbsp; 2040&nbsp; 1761&nbsp; 0&nbsp; 78&nbsp;&nbsp; 0 \-&nbsp;&nbsp; 975 \-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14:45 pts/0&nbsp;&nbsp;&nbsp; 00:00:00 grep amc

Verify that TREX did not have a problem (relax in the log is BAD)
\\
\[dorado1@trex2 log\]$ grep relax latest/TREX.log
\[dorado1@trex2 log\]$

&nbsp;Now, shutdown the OS on TREX2 to prep for power off

\[dorado1@trex2 logs\]$ su root
Password:
\[root@trex2 logs\]# /sbin/shutdown now

Broadcast message from root (pts/2) (Wed Apr 29 14:48:07 2009):

The system is going down to maintenance mode NOW\!
\[root@trex2 logs\]#

In Term1:

bash-2.00$ su root
bash-2.00# shutdown \-b]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797958</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004814</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "bar",
            "href": "/timeline/bar"
        },
        {
            "name": "baz",
            "href": "/timeline/baz"
        },
        {
            "name": "blop",
            "href": "/timeline/blop"
        },
        {
            "name": "foo",
            "href": "/timeline/foo"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
{panel}

{panel:title=current tick}
 * *input:* none
 * *output:* 
    The date (UTC) and value (an integer) of the current tick of trex

 This call may have a push based counterpart in the future. Indeed the current tick changes in trex as time advance. in my ODSS version I currently use a tick running at a 1 mn period 
{panel}

{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/timeline/\{name\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/goal
 ** *attachment:* A json file describing the goal
 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{note}
  This operation will not be implemented initially. For any modification, first DELETE then (re)POST the goal.
{note}
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20972051</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179562</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation

*Approach*
* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install [AUV Debian4 Linux Install]

* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.
\\

{dynamictasklist:NavigationDrivers}
*Driver porting and validation*
* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h5. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** &nbsp;
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}

h5. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

\\
Debian Linux Setup (todo):
* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

*Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script

**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj

h5. Drivers:

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114080</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179561</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

Links

[AUV Linux - Debian Setup, Driver Port and Validation]

\\
&nbsp;

h6. *To Do List*

* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

h6. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script

**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114079</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004807</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "bar",
            "href": "/timeline/bar"
        },
        {
            "name": "baz",
            "href": "/timeline/baz"
        },
        {
            "name": "blop",
            "href": "/timeline/blop"
        },
        {
            "name": "foo",
            "href": "/timeline/foo"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
{panel}

{panel:title=current tick}
 * *input:* none
 * *output:* 
    The date (UTC) and value (an integer) of the current tick of trex

 This call may have a push based counterpart in the future. Indeed the current tick changes in trex as time advance. in my ODSS version I currently use a tick running at a 1 mn period 
{panel}

{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/timeline/\{name\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/goal
 ** *attachment:* A json file describing the goal
 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the response to a "Post new goal" command
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20972044</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179560</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h6. *To Do List*

* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

h6. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script

**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114078</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179558</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup
\\

h6. *To Do List*

* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

h6. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script

**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp;
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114076</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">21004803</id>
<property name="body"><![CDATA[This working document is used to specify how T-REX will present a web API in order to easily be connected to ODSS (or any other software). The document will evolve as our work advance and start from a very high level specification at first down to much more precise API definition. 

h2. Initial service calls considered. 

As a first step we propose the following simple calls (To be refined as implementation is done):

{note}
  In this initial version neither the format of the web request or the data structure is defined. 
  We plan to do so using a RESTful kind of approach with json as the basis of representation   
  but nothing is fully settled nor implemented yet.

  *Principle on request arguments:*
  * required parameters are always part of the path (e.g. /timeline/\{name\} indicate that the argument \{name\} need to be specified). Due to this format the position of each of these argument is significant
  * _optional_ parameters will be specified in the query part of the url (e.g /timeline/\{name\}?from=0&to=100) indicate that arguments  _from_ and _to_ are optionals). 
{note}

{panel:title=List of trex existing timelines}
 * *format:*
 ** GET http://<host>/timelines
 * *input:* none
 * *output:* 
 ** a list of all the timelines trex currently have as a json object with a format as given in this example
 {code:javascript}
{
    "timelines":
    [
        {
            "name": "bar",
            "href": "/timeline/bar"
        },
        {
            "name": "baz",
            "href": "/timeline/baz"
        },
        {
            "name": "blop",
            "href": "/timeline/blop"
        },
        {
            "name": "foo",
            "href": "/timeline/foo"
        }
    ]
}
 {code}
 ** "timelines" is thea table containing all the timelines descriptors
 ** A timeline descriptor have the following fields:
 *** "name" the symbolic name of the timeline
 *** "href" the URI pointing to the timeline (see "Content of timeline" below)
{panel}

{panel:title=current tick}
 * *input:* none
 * *output:* 
    The date (UTC) and value (an integer) of the current tick of trex

 This call may have a push based counterpart in the future. Indeed the current tick changes in trex as time advance. in my ODSS version I currently use a tick running at a 1 mn period 
{panel}

{panel:title=Content of a timeline}
 * *formats:*
 ** GET http://<host>/timeline/\{name\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}
 ** GET http://<host>/timeline/\{name\}?from=\{int\}&to=\{int\}
 ** GET http://<host>/timeline/\{name\}?to=\{int\}
 * *input:*
 ** \{name\} the name of the timeline
 ** _from_ lower bound of the time window of interest _(optional)_
 ** _to_ upper bound of the time window of interest _(optional)_
 * *output:*
 ** The list of all the tokens of this timeline that overlaps the given time interval. (format TBD)
 * *error:*
 ** 400: invalid request. The timeline name is either missing or non existent
 * *example:*
 ** GET http://<host>/timeline/dorado?from=0&to=100 
{panel}

{panel:title=Post a new goal}
 * *format:*
 ** POST http://<host>/goal
 ** *attachment:* A json file describing the goal
 * *output:*
 ** a json file giving the goal id along with its related URI. Still TBD but should look as follow:
 {code:javascript}
{
  "id": "0x29ee90df",
  "href": "/goal/0x29ee90df"
}  
 {code}

 * *error:*
 ** 400: invalid request the goal is not well formatted
 * *note:*
 This feedback of this call only indicate whether the goal is properly formatted or not. An OK do not mean that the goal has been included in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline has been notified of this new goal 
{panel}

{panel:title=Modify an existing goal}
 * *format:*
 ** PUT http://<host>/goal/\{goal_id\}
 ** *attachment:* A json file describing the goal
 * *output:*
 ** 200 OK
 * *error:*
 ** 404: Goal not found (invalid goal id)
 ** 400: invalid request the goal is not well formatted
 * *note:*
An OK does not mean that the goal has been updated in the plan yet (which is asynchronous and dynamic) but only that the reactors that manage the associated timeline have been notified of this new goal
{panel}

{panel:title=Cancel a goal}
* *format:*
** DELETE http://<host>/goal/\{id\}
* *input:*
** \{id\} the identifier of the goal as given by the feedback of "Post new goal" command
* *output:* none
* *error:* 
** 400: unknown goal id 
* *effect:*
** remove the goal with the associated id from the plan  
{panel}


This 3 simple calls will be the first basis of interaction. We envision later on to add extra calls as we see fit.

h2. Push services envisioned

{panel:title=new tick}
 This service will notify the client whenever the tick in trex advance
{panel}

{panel:title=new plan}
 This service will notify the client whenever trex produced a new plan
 As trex is composed to multiple planners, each of them dealing with its specific set of timlines. It may be better for the user to specify which set of timelines it want to be notified on similarly the event should give the set of timelines that have been updated
{panel}

 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">20972040</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830717</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window, login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# Check the Iridium Modem
## *% minicom iridium*
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, exit minicom
### at the command line, enter 'reset_a3la' to run the modem power cycling script
#### *% reset_a3la*
## *% minicom iridium*
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In terminal session 1:
### % nal \-dev /dev/ttyS0
## In terminal session 2:
### % &nbsp;cd \~/auv-linux/onboard/devices/iridium/tests
### % storefwdclient \-f test-a3la.sbd
### examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# Start the nal driver for the vsim test
## % nohup nal \-dev /dev/ttyS0 &
## % tail \-f nohup.out&nbsp;&nbsp; (check the nal driver is running - look for sleep)
# Test the modem with a text file
## storefwd client<enter>&nbsp;&nbsp; (enter a test message and then wait)
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# On TREX2, make sure the config&nbsp;file is correct for vsim&nbsp;
## % *cd missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In the telnet to mvc-dmo1, startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# Move back to the T-REX stack to fire up the T-REX client
# *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*\\ \\

h1. Hardware-in-the-loop Test

Open 4 terminal sessions

Term1:&nbsp;

telnet mvc-dmo1

&nbsp;bash-2.00$ cd /home/dorado1/auv_autonomy

bash-2.00$ . configSrc

bash-2.00$ qtalk \-m /dev/ser13
\!a<enter>&nbsp; (look for gulperFB=1), then ctrl-a, x\\ \\

Term2:&nbsp;&nbsp;

ssh trex2

cd amc&nbsp; (/home/dorado1/amc)

\[dorado1@trex2 amc\]$ . config.amc

\[dorado1@trex2 amc\]$ cd missions
\[dorado1@trex2 missions\]$ cat vcs.cfg
<\!-\- Configuration file used byt VCS/CORBA adapter and others to \-\-
&nbsp; \-\- declare the timelines which interface with the vehicle and other \-\-
&nbsp; \-\- parameters.
&nbsp;&nbsp;&nbsp;&nbsp; Note : the remoteName should preferably be&nbsp; by default (at least \-\-
&nbsp; \-\- on svn) mvc-dmo1 other attributes of the main tag ashould \_not\_ \-\-
&nbsp; \-\- be changed \! (except you know exactly what you are doing)
\-->
<Config log="1" localPort="8002" remoteName="mvc-dmo1" remotePort="8004" missionStart="init.cfg">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="vehicleState"&nbsp; command="0" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="setpoint" class="Setpoint" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="descend"&nbsp; class="Descend" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="ascend"&nbsp;&nbsp; class="Ascend" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="getgps" class="GPS" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
\[dorado1@trex2 missions\]$\\


\[dorado1@trex2 missions\]$ cat amc.cfg
<\!-\- This file is the basic configuration for:
&nbsp;&nbsp;&nbsp;&nbsp; - connecting to the auv (QNX or Linux)
&nbsp;&nbsp;&nbsp;&nbsp; - and send/receive messages through the iridium modem.
&nbsp;&nbsp;&nbsp;&nbsp; As fo now the connect is set to 1 by default as this file should
&nbsp;&nbsp;&nbsp;&nbsp; be used on "real" conditions.
\-->

<Config>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\- Use this component when running onboard \-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <TeleoReactor name="vcs" component="VCSAdapter"/>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <TeleoReactor name="exec" component="DeliberativeReactor"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <TeleoReactor name="downlink" component="Downlink" lookAhead="1" latency="0" log="1" connect="1" config="downlink.cfg"/>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\- Skipper has 10 Hour lookahead. \-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <TeleoReactor name="skipper" component="DeliberativeReactor"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg"/>
</Config>
\[dorado1@trex2 missions\]$
&nbsp;

Term3:

slogin trex2&nbsp;&nbsp;&nbsp; (or ssh trex2)


\[dorado1@trex2 amc\]$ cd amc

\[dorado1@trex2 amc\]$ . config.amc


\[dorado1@trex2 \~\]$ minicom iridium
Then type "AT" and look for "OK" (no quotes)

If the vehicle has just been powered up, there is no response so you'll need to enable the A3LA modem power


Switch back to Term1 (QNX mvc-dmo1)

bash-2.00$ cd $AUV/bin
bash-2.00$ reset_a3la


Switch back to Term3 where minicom is running and type "AT", sometimes it says ERROR, just type AT again

Here's a sample of the minicom session:


Welcome to minicom 2.1

OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jul 26 2006, 06:38:09.

Press CTRL-A Z for help on special keys

ERROR

OK

\+SBDI: 0, 1602, 0, 0, 0, 0

OK
&nbsp;

Type ctrl-a, then x to leave minicom\\

In Term4:

\[dorado1@trex2 \~\]$ cd amc
\[dorado1@trex2 amc\]$ . config.amc
\[dorado1@trex2 amc\]$ cd $AUV_HOME/onboard/bin
\[dorado1@trex2 auv-linux\]$ pwd
/home/dorado1/auv-linux/onboard/bin


\[dorado1@trex2 bin\]$ nohup ./nal \-dev /dev/ttyS0 &
\[1\] 1968
\[dorado1@trex2 bin\]$ nohup: appending output to `nohup.out'

\[dorado1@trex2 bin\]$ tail \-f nohup.out
terminate called after throwing an instance of 'omni_thread_fatal'
Reading log4cxx configuration file "/home/dorado1/auv-linux/onboard//sampleConfig/log4cxx.cfg"
14:20:15.598 DEBUG \[NALDriver\] read \+GCMI response
14:20:15.623 INFO \[NALDriver\] manufacturer:
OK

14:20:15.623 INFO \[NALDriver\] initialize() complete
IOR:010000001a00000049444c3a6175762f53746f7265416e6446776449463a312e30000000010000000000000064000000010102000d0000003133342e38392e33322e333900002aa60e000000fe8ac4f849000007b0000000000200000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
14:20:15.643 DEBUG \[NALApp\] Leaving NALApp.initialize()
14:20:15.644 INFO \[AuvApplication\] run() - just sleeps by default


Then tail the modem.log

\[dorado1@trex2 bin\]$ cd $AUV_LOG_DIR
\[dorado1@trex2 logs\]$ tail \-f modem.log


cd $AUV\_\\

In Term3:

&nbsp;\[dorado1@trex2 bin\]$ storefwdclient&nbsp;&nbsp;&nbsp; (type in a descriptive test string like "This is the vehicle on the zephyr hardware in the loop test by Thom")

Check to see that the email arrived, \[auvsbd\] SBD Msg From Unit: 300003000227440, with an \*.sbd as attachment.&nbsp;&nbsp; Open the attachment with a text editor to verify the message\\

In Term1:

bash-2.00$ cd $AUV_CONFIG_DIR&nbsp;

bash-2.00$ cp devices.test.cfg devices.cfg


In Term2 (trex2 in missions dir)

Verify the settings in init.cfg

\[dorado1@trex2 missions\]$ pwd
/home/dorado1/amc/missions
\[dorado1@trex2 missions\]$ cat init.cfg
behavior missionTimer {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeOut = 26000;
}

behavior depthEnvelope {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minDepth = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxDepth = 175;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortDepth = 185;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortAltitude = 15.0;
}

behavior setpoint {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heading=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; speed=0.0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; verticalMode=pitch;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pitch=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; duration=60;


In Term1 (mvc-dmo1)

bash-2.00$ cd $AUV/bin
bash-2.00$ nohup ./vcsServer \-v &
\[1\] 8344
bash-2.00$ ps \-a

&nbsp;8346&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 82&nbsp;&nbsp; 64K ./vcsServer \-v
\[1\]+&nbsp; Exit 154&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nohup ./vcsServer \-v

bash-2.00$ cd $AUV_LOG_DIR
bash-2.00$ ls
2009.117.00/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009.119.00/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; latest@
2009.118.00/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009.119.01/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nov.13th.vcs.tar
2009.118.05/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CVS/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testLogs/
2009.118.06/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VcsServer.log.0
bash-2.00$ tail \-f VcsServer.log.0

In Term2:

\[dorado1@trex2 missions\]$ nohup ../exec/amc_o_rt msg.timing.1.cfg &
\[dorado1@trex2 missions\]$ cd ../log/
\[dorado1@trex2 log\]$ tail \-f latest/TREX.log
\\ \\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797950</id>
</property>
</object>
<object class="Label" package="com.atlassian.confluence.labels">
<id name="id">21135362</id>
<property name="name"><![CDATA[devel]]></property>
<property name="owner"/><property name="namespace"><![CDATA[global]]></property>
<property name="creationDate">2013-04-09 13:22:09.590</property>
<property name="lastModificationDate">2013-04-09 13:22:09.600</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830721</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window, login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# Check the Iridium Modem
## *% minicom iridium*
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, exit minicom
### at the command line, enter 'reset_a3la' to run the modem power cycling script
#### *% reset_a3la*
## *% minicom iridium*
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In terminal session 1:
### % nal \-dev /dev/ttyS0
## In terminal session 2:
### % &nbsp;cd \~/auv-linux/onboard/devices/iridium/tests
### % storefwdclient \-f test-a3la.sbd
### examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# Start the nal driver for the vsim test
## % nohup nal \-dev /dev/ttyS0 &
## % tail \-f nohup.out&nbsp;&nbsp; (check the nal driver is running - look for sleep)
# Test the modem with a text file
## storefwd client<enter>&nbsp;&nbsp; (enter a test message and then wait)
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# On TREX2, make sure the config&nbsp;file is correct for vsim&nbsp;
## % *cd missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In the telnet to mvc-dmo1, startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# Move back to the T-REX stack to fire up the T-REX client
# *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\
\\

h1. Hardware-in-the-loop Test

Open 4 terminal sessions

h5. Term1:&nbsp;

*telnet mvc-dmo1*

bash-2.00$ *cd /home/dorado1/auv_autonomy*

bash-2.00$ *. configSrc*

bash-2.00$ *qtalk \-m /dev/ser13*
*\!a<enter>*&nbsp; (look for gulperFB=1), then *ctrl-a, x*
\\
\\

h5. Term2:&nbsp;&nbsp;

*ssh trex2*

\[dorado1@trex2 dorado1\]$ *cd amc*&nbsp; (/home/dorado1/amc)

\[dorado1@trex2 amc\]$ *. config.amc*\[dorado1@trex2 amc\]$ *cd missions*
\[dorado1@trex2 missions\]$ *cat vcs.cfg*
<\!-\- Configuration file used byt VCS/CORBA adapter and others to \-\-
&nbsp; \-\- declare the timelines which interface with the vehicle and other \-\-
&nbsp; \-\- parameters.
&nbsp;&nbsp;&nbsp;&nbsp; Note : the remoteName should preferably be&nbsp; by default (at least \-\-
&nbsp; \-\- on svn) mvc-dmo1 other attributes of the main tag ashould \_not\_ \-\-
&nbsp; \-\- be changed \! (except you know exactly what you are doing)
\-->
<Config log="1" localPort="8002" remoteName="mvc-dmo1" remotePort="8004" missionStart="init.cfg">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="vehicleState"&nbsp; command="0" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="setpoint" class="Setpoint" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="descend"&nbsp; class="Descend" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="ascend"&nbsp;&nbsp; class="Ascend" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="getgps" class="GPS" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
\[dorado1@trex2 missions\]$
\\ \[dorado1@trex2 missions\]$ *cat amc.cfg*
<\!-\- This file is the basic configuration for:
&nbsp;&nbsp;&nbsp;&nbsp; - connecting to the auv (QNX or Linux)
&nbsp;&nbsp;&nbsp;&nbsp; - and send/receive messages through the iridium modem.
&nbsp;&nbsp;&nbsp;&nbsp; As fo now the connect is set to 1 by default as this file should
&nbsp;&nbsp;&nbsp;&nbsp; be used on "real" conditions.
\-->

<Config>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\- Use this component when running onboard \-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <TeleoReactor name="vcs" component="VCSAdapter"/>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <TeleoReactor name="exec" component="DeliberativeReactor"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <TeleoReactor name="downlink" component="Downlink" lookAhead="1" latency="0" log="1" connect="1" config="downlink.cfg"/>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\- Skipper has 10 Hour lookahead. \-->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <TeleoReactor name="skipper" component="DeliberativeReactor"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg"/>
</Config>
\[dorado1@trex2 missions\]$
&nbsp;
Term3:

slogin trex2&nbsp;&nbsp;&nbsp; (or ssh trex2)

\[dorado1@trex2 amc\]$ cd amc

\[dorado1@trex2 amc\]$ . config.amc

\[dorado1@trex2 \~\]$ minicom iridium
Then type "AT" and look for "OK" (no quotes)

If the vehicle has just been powered up, there is no response so you'll need to enable the A3LA modem power

Switch back to Term1 (QNX mvc-dmo1)

bash-2.00$ cd $AUV/bin
bash-2.00$ reset_a3la

Switch back to Term3 where minicom is running and type "AT", sometimes it says ERROR, just type AT again

Here's a sample of the minicom session:

Welcome to minicom 2.1

OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jul 26 2006, 06:38:09.

Press CTRL-A Z for help on special keys

ERROR

OK

\+SBDI: 0, 1602, 0, 0, 0, 0

OK
&nbsp;

Type ctrl-a, then x to leave minicom
\\

In Term4:

\[dorado1@trex2 \~\]$ cd amc
\[dorado1@trex2 amc\]$ . config.amc
\[dorado1@trex2 amc\]$ cd $AUV_HOME/onboard/bin
\[dorado1@trex2 auv-linux\]$ pwd
/home/dorado1/auv-linux/onboard/bin

\[dorado1@trex2 bin\]$ nohup ./nal \-dev /dev/ttyS0 &
\[1\] 1968
\[dorado1@trex2 bin\]$ nohup: appending output to `nohup.out'

\[dorado1@trex2 bin\]$ tail \-f nohup.out
terminate called after throwing an instance of 'omni_thread_fatal'
Reading log4cxx configuration file "/home/dorado1/auv-linux/onboard//sampleConfig/log4cxx.cfg"
14:20:15.598 DEBUG \[NALDriver\] read \+GCMI response
14:20:15.623 INFO \[NALDriver\] manufacturer:
OK

14:20:15.623 INFO \[NALDriver\] initialize() complete
IOR:010000001a00000049444c3a6175762f53746f7265416e6446776449463a312e30000000010000000000000064000000010102000d0000003133342e38392e33322e333900002aa60e000000fe8ac4f849000007b0000000000200000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
14:20:15.643 DEBUG \[NALApp\] Leaving NALApp.initialize()
14:20:15.644 INFO \[AuvApplication\] run() - just sleeps by default

Then tail the modem.log

\[dorado1@trex2 bin\]$ cd $AUV_LOG_DIR
\[dorado1@trex2 logs\]$ tail \-f modem.log

cd $AUV\_
\\

In Term3:

&nbsp;\[dorado1@trex2 bin\]$ storefwdclient&nbsp;&nbsp;&nbsp; (type in a descriptive test string like "This is the vehicle on the zephyr hardware in the loop test by Thom")

Check to see that the email arrived, \[auvsbd\] SBD Msg From Unit: 300003000227440, with an \*.sbd as attachment.&nbsp;&nbsp; Open the attachment with a text editor to verify the message
\\

In Term1:

bash-2.00$ cd $AUV_CONFIG_DIR&nbsp;

bash-2.00$ cp devices.test.cfg devices.cfg

In Term2 (trex2 in missions dir)

Verify the settings in init.cfg

\[dorado1@trex2 missions\]$ pwd
/home/dorado1/amc/missions
\[dorado1@trex2 missions\]$ cat init.cfg
behavior missionTimer {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeOut = 26000;
}

behavior depthEnvelope {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minDepth = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxDepth = 175;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortDepth = 185;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortAltitude = 15.0;
}

behavior setpoint {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heading=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; speed=0.0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; verticalMode=pitch;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pitch=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; duration=60;

In Term1 (mvc-dmo1)

bash-2.00$ cd $AUV/bin
bash-2.00$ nohup ./vcsServer \-v &
\[1\] 8344
bash-2.00$ ps \-a

&nbsp;8346&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 82&nbsp;&nbsp; 64K ./vcsServer \-v
\[1\]+&nbsp; Exit 154&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nohup ./vcsServer \-v

bash-2.00$ cd $AUV_LOG_DIR
bash-2.00$ ls
2009.117.00/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009.119.00/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; latest@
2009.118.00/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009.119.01/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nov.13th.vcs.tar
2009.118.05/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CVS/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testLogs/
2009.118.06/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VcsServer.log.0
bash-2.00$ tail \-f VcsServer.log.0

In Term2:

\[dorado1@trex2 missions\]$ nohup ../exec/amc_o_rt msg.timing.1.cfg &
\[dorado1@trex2 missions\]$ cd ../log/
\[dorado1@trex2 log\]$ tail \-f latest/TREX.log
\\

bash-2.00$ tail \-f VcsServer.log.0
62940673.813,
\######################### Wed Apr 29 21:31:13 2009

62940673.943, VcsServer \-\- configuration:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Port = 8004 ms
62940673.943, VcsServer: Socket created on fd 6
62940673.993, VcsServer - running
62940853.801, VcsServer: Connected to client on 134.89.32.39
62940853.801, VcsServer\[t=0, delta=0\]: Grabbing data

62940853.981, VcsServer:initMission:
behavior missionTimer {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeOut = 26000;
}

behavior depthEnvelope {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minDepth = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxDepth = 175;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortDepth = 185;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortAltitude = 15.0;
}

behavior setpoint {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heading=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; speed=0.0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; verticalMode=pitch;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pitch=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; duration=60;
}
62940854.331, VcsServer::initMission() - starting supervisor
62940855.371, VcsServer::openLC() - created IF with LayeredControl
62940855.671, VcsServer\[t=1.86987, delta=1.86987\]: Grabbing data

62940891.739, VcsServer: ack - STARTED:0
62940952.044, VcsServer::handleLCMessages() - AMC mission started
62940952.044, VcsServer: ack - FINISHED:0
62940956.784, VcsServer: handling insertBehavior
62940957.024, VcsServer: ack - STARTED:140
62940960.284, VcsServer: ack - FINISHED:140
62940965.603, VcsServer: handling insertBehavior
62940966.183, VcsServer: ack - STARTED:1888
62940976.943, VcsServer\[t=123.142, delta=0.429971\]: Grabbing data

62940977.213, VcsServer: ack - FINISHED:1888
62940982.762, VcsServer: handling insertBehavior
62940982.992, VcsServer: ack - STARTED:3023
62940992.952, VcsServer\[t=139.15, delta=0.43997\]: Grabbing data

62940994.242, VcsServer: ack - FINISHED:3023
62940999.701, VcsServer: handling insertBehavior
62940999.931, VcsServer: ack - STARTED:4108
62941002.001, VcsServer\[t=148.2, delta=0.479967\]: Grabbing data

62941005.941, VcsServer\[t=152.14, delta=0.429971\]: Grabbing data

62941008.961, VcsServer\[t=155.159, delta=0.43997\]: Grabbing data

62941011.090, VcsServer: ack - FINISHED:4108
62941016.650, VcsServer: handling insertBehavior
62941017.190, VcsServer: ack - STARTED:5167
62941018.940, VcsServer\[t=165.139, delta=0.429971\]: Grabbing data

62941021.960, VcsServer\[t=168.158, delta=0.43997\]: Grabbing data

62941028.259, VcsServer: ack - FINISHED:5167
62941033.779, VcsServer: handling insertBehavior
62941034.039, VcsServer: ack - STARTED:6226
62941037.969, VcsServer\[t=184.167, delta=0.43997\]: Grabbing data

62941045.198, VcsServer: ack - FINISHED:6226
62941052.248, VcsServer: No ping received for 7 of up to 12 seconds
62941053.058, VcsServer: No ping received for 8 of up to 12 seconds
62941054.137, VcsServer: No ping received for 9 of up to 12 seconds
62941055.217, VcsServer: No ping received for 10 of up to 12 seconds
62941055.697, VcsServer::recvString - received 0 bytes when expected 4 (uint32_t) \!\!\!
62941055.697, Received a NULL message : should no happen.

bash-2.00$ ps \-a
&nbsp; PID&nbsp; PGRP SID PRI STATE&nbsp;&nbsp; BLK&nbsp; SIZE COMMAND
&nbsp;8707&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K dynamicControlServer
&nbsp;&nbsp; 17&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 24f&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 632K (//9/bin/Dev32)
&nbsp;8726&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 176K layeredControl \-dyno \-plan AmcPlan.cfg \-abort abortMplan.cfg
&nbsp;&nbsp; 23&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 32K (//9/bin/Pipe)
&nbsp;&nbsp; 24&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 160K (//9/bin/Dev32.ser)
&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 160K (//9/bin/Dev32.ser)
&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 300K (//9/bin/Dev.ctiser)
&nbsp;&nbsp; 27&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 440K (//9/bin/Dev32.ansi)
&nbsp;&nbsp; 31&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0&nbsp; 9o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 148K (//9/bin/Dev32.par)
&nbsp;&nbsp; 32&nbsp;&nbsp;&nbsp; 17&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 316K (//9/bin/Dev32.pty)
&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0 18272K (//9/bin/Fsys.floppy)
&nbsp;&nbsp; 37&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 56K (//9/bin/Iso9660fsys)
&nbsp;&nbsp; 40&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 20K (//9/bin/nameloc)
&nbsp;&nbsp; 41&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 16K (//9/bin/nameloc)
&nbsp;&nbsp; 43&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 120K (//9/bin/Dosfsys)
&nbsp;&nbsp; 45&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 23r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 336K (//9/bin/Net)
&nbsp;&nbsp; 47&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 348K (//9/bin/Net.ether82557)
&nbsp;&nbsp; 48&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 56K (//9/bin/Net.ether1000)
&nbsp;8754&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 132K navigation
&nbsp;8756&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K newTailConeServer \-dev /dev/ser3
&nbsp;8758&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K m3dmgx1Server \-dev /dev/ser12 \-useForNav
&nbsp;8761&nbsp; 8344&nbsp;&nbsp; 2 19o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 96K newTailConeDriver \-dev /dev/ser3,9600,8,n,1
&nbsp;8762&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 48K gpsServer \-r ashtech \-dev /dev/ser7
&nbsp;8766&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 88K m3dmgx1 \-serial /dev/ser12,9600,8,n,1
&nbsp;8767&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K parosciServer \-dev /dev/ser5
&nbsp;8772&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp; 8791&nbsp;&nbsp; 60K ashtechDriver \-serial /dev/ser7,9600,8,n,1
&nbsp;8773&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
&nbsp;8774&nbsp; 8344&nbsp;&nbsp; 2 19o REPLY&nbsp;&nbsp;&nbsp; 17&nbsp;&nbsp; 84K parosci \-serial /dev/ser5,9600,8,n,1
&nbsp;8778&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
&nbsp;8779&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 82&nbsp;&nbsp; 92K seabirdDriver \-n ctdDriver \-serial tcp:sci1-dmo1:10001,9600,8,n,1
&nbsp;8782&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 82&nbsp;&nbsp; 92K seabirdDriver \-n ctdDriver2 \-serial tcp:sci1-dmo1:10002,9600,8,n,1
&nbsp;8793&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 52K bluefinBattServer \-dev /dev/ser10
&nbsp;8796&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 52K dvlServer \-dev /dev/ser6
&nbsp;&nbsp; 94&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; WAIT&nbsp;&nbsp;&nbsp; \-1&nbsp;&nbsp; 28K (//9/bin/tinit)
&nbsp;8799&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 68K bluefinBattDriver \-dev /dev/ser10
&nbsp;&nbsp; 98&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 20K (//9/bin/tinit)
&nbsp;&nbsp; 99&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 68K (//9/bin/Mqueue)
&nbsp;8804&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 17&nbsp;&nbsp; 80K dvl \-serial /dev/ser6,9600,8,n,1
&nbsp;8806&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 48K dropWeightServer \-dev /dev/ser13
&nbsp;8814&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K statePublisher
&nbsp;8818&nbsp; 8344&nbsp;&nbsp; 2 10o READY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 52K dropWeight \-serial /dev/ser13,9600,8,n,1
&nbsp;8346&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K ./vcsServer \-v
&nbsp;8658&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 36K supervisor \-plan AmcPlan.cfg \-dyno
&nbsp;8667&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 23&nbsp;&nbsp; 16K tee \-i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
&nbsp;8675&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 28K eventLogServer
&nbsp;8677&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K workSite
&nbsp;8679&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 72K vehicleConfigurationServer
&nbsp;8682&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 32K externalCommsServer
&nbsp;8686&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 112K navigationServer
&nbsp;8688&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp; 8760&nbsp;&nbsp; 32K externalComms
&nbsp;8690&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 140K layeredControl erver \-dyno \-plan AmcPlan.cfg \-abort
bash-2.00$

bash-2.00$ slay supervisor
bash-2.00$ ps \-a&nbsp;&nbsp;

In Term2 (trex2):

Verify that amc_o_rt has terminated

\[dorado1@trex2 log\]$ ps \-elf \| grep amc
0 R dorado1&nbsp;&nbsp; 2040&nbsp; 1761&nbsp; 0&nbsp; 78&nbsp;&nbsp; 0 \-&nbsp;&nbsp; 975 \-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14:45 pts/0&nbsp;&nbsp;&nbsp; 00:00:00 grep amc

Verify that TREX did not have a problem (relax in the log is BAD)
\\
\[dorado1@trex2 log\]$ grep relax latest/TREX.log
\[dorado1@trex2 log\]$

&nbsp;Now, shutdown the OS on TREX2 to prep for power off

\[dorado1@trex2 logs\]$ su root
Password:
\[root@trex2 logs\]# /sbin/shutdown now

Broadcast message from root (pts/2) (Wed Apr 29 14:48:07 2009):

The system is going down to maintenance mode NOW\!
\[root@trex2 logs\]#

In Term1:

bash-2.00$ su root
bash-2.00# shutdown \-b]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797954</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830719</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window, login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# Check the Iridium Modem
## *% minicom iridium*
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, exit minicom
### at the command line, enter 'reset_a3la' to run the modem power cycling script
#### *% reset_a3la*
## *% minicom iridium*
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In terminal session 1:
### % nal \-dev /dev/ttyS0
## In terminal session 2:
### % &nbsp;cd \~/auv-linux/onboard/devices/iridium/tests
### % storefwdclient \-f test-a3la.sbd
### examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# Start the nal driver for the vsim test
## % nohup nal \-dev /dev/ttyS0 &
## % tail \-f nohup.out&nbsp;&nbsp; (check the nal driver is running - look for sleep)
# Test the modem with a text file
## storefwd client<enter>&nbsp;&nbsp; (enter a test message and then wait)
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# On TREX2, make sure the config&nbsp;file is correct for vsim&nbsp;
## % *cd missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In the telnet to mvc-dmo1, startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# Move back to the T-REX stack to fire up the T-REX client
# *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\
\\

h1. Hardware-in-the-loop Test

Open 4 terminal sessions

Term1:&nbsp;

telnet mvc-dmo1

&nbsp;bash-2.00$ cd /home/dorado1/auv_autonomy

bash-2.00$ . configSrc

bash-2.00$ qtalk \-m /dev/ser13
\!a<enter>&nbsp; (look for gulperFB=1), then ctrl-a, x
\\
\\

Term2:&nbsp;&nbsp;

ssh trex2

cd amc&nbsp; (/home/dorado1/amc)

\[dorado1@trex2 amc\]$ . config.amc

\[dorado1@trex2 amc\]$ cd missions
\[dorado1@trex2 missions\]$ cat vcs.cfg
<\!-\- Configuration file used byt VCS/CORBA adapter and others to \-\-
&nbsp; \-\- declare the timelines which interface with the vehicle and other \-\-
&nbsp; \-\- parameters.
&nbsp;&nbsp;&nbsp;&nbsp; Note : the remoteName should preferably be&nbsp; by default (at least \-\-
&nbsp; \-\- on svn) mvc-dmo1 other attributes of the main tag ashould \_not\_ \-\-
&nbsp; \-\- be changed \! (except you know exactly what you are doing)
\-->
<Config log="1" localPort="8002" remoteName="mvc-dmo1" remotePort="8004" missionStart="init.cfg">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="vehicleState"&nbsp; command="0" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="setpoint" class="Setpoint" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="descend"&nbsp; class="Descend" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="ascend"&nbsp;&nbsp; class="Ascend" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="getgps" class="GPS" command="1" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
\[dorado1@trex2 missions\]$
\\

\[dorado1@trex2 missions\]$ cat amc.cfg
<\!-\- This file is the basic configuration for:
&nbsp;&nbsp;&nbsp;&nbsp; - connecting to the auv (QNX or Linux)
&nbsp;&nbsp;&nbsp;&nbsp; - and send/receive messages through the iridium modem.
&nbsp;&nbsp;&nbsp;&nbsp; As fo now the connect is set to 1 by default as this file should
&nbsp;&nbsp;&nbsp;&nbsp; be used on "real" conditions.
\-->

<Config>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\- Use this component when running onboard -->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <TeleoReactor name="vcs" component="VCSAdapter"/>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <TeleoReactor name="exec" component="DeliberativeReactor"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lookAhead="5" latency="1" solverConfig="exec.solver.cfg"/>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <TeleoReactor name="downlink" component="Downlink" lookAhead="1" latency="0" log="1" connect="1" config="downlink.cfg"/>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\!-\- Skipper has 10 Hour lookahead. -->
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <TeleoReactor name="skipper" component="DeliberativeReactor"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lookAhead="36000" latency="60" solverConfig="skipper.solver.cfg"/>
</Config>
\[dorado1@trex2 missions\]$
&nbsp;

Term3:

slogin trex2&nbsp;&nbsp;&nbsp; (or ssh trex2)

\[dorado1@trex2 amc\]$ cd amc

\[dorado1@trex2 amc\]$ . config.amc

\[dorado1@trex2 \~\]$ minicom iridium
Then type "AT" and look for "OK" (no quotes)

If the vehicle has just been powered up, there is no response so you'll need to enable the A3LA modem power

Switch back to Term1 (QNX mvc-dmo1)

bash-2.00$ cd $AUV/bin
bash-2.00$ reset_a3la

Switch back to Term3 where minicom is running and type "AT", sometimes it says ERROR, just type AT again

Here's a sample of the minicom session:

Welcome to minicom 2.1

OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n
Compiled on Jul 26 2006, 06:38:09.

Press CTRL-A Z for help on special keys

ERROR

OK

\+SBDI: 0, 1602, 0, 0, 0, 0

OK
&nbsp;

Type ctrl-a, then x to leave minicom
\\

In Term4:

\[dorado1@trex2 \~\]$ cd amc
\[dorado1@trex2 amc\]$ . config.amc
\[dorado1@trex2 amc\]$ cd $AUV_HOME/onboard/bin
\[dorado1@trex2 auv-linux\]$ pwd
/home/dorado1/auv-linux/onboard/bin

\[dorado1@trex2 bin\]$ nohup ./nal \-dev /dev/ttyS0 &
\[1\] 1968
\[dorado1@trex2 bin\]$ nohup: appending output to `nohup.out'

\[dorado1@trex2 bin\]$ tail \-f nohup.out
terminate called after throwing an instance of 'omni_thread_fatal'
Reading log4cxx configuration file "/home/dorado1/auv-linux/onboard//sampleConfig/log4cxx.cfg"
14:20:15.598 DEBUG \[NALDriver\] read \+GCMI response
14:20:15.623 INFO \[NALDriver\] manufacturer:
OK

14:20:15.623 INFO \[NALDriver\] initialize() complete
IOR:010000001a00000049444c3a6175762f53746f7265416e6446776449463a312e30000000010000000000000064000000010102000d0000003133342e38392e33322e333900002aa60e000000fe8ac4f849000007b0000000000200000200000000000000080000000100000000545441010000001c00000001000000010001000100000001000105090101000100000009010100
14:20:15.643 DEBUG \[NALApp\] Leaving NALApp.initialize()
14:20:15.644 INFO \[AuvApplication\] run() - just sleeps by default

Then tail the modem.log

\[dorado1@trex2 bin\]$ cd $AUV_LOG_DIR
\[dorado1@trex2 logs\]$ tail \-f modem.log

cd $AUV\_
\\

In Term3:

&nbsp;\[dorado1@trex2 bin\]$ storefwdclient&nbsp;&nbsp;&nbsp; (type in a descriptive test string like "This is the vehicle on the zephyr hardware in the loop test by Thom")

Check to see that the email arrived, \[auvsbd\] SBD Msg From Unit: 300003000227440, with an \*.sbd as attachment.&nbsp;&nbsp; Open the attachment with a text editor to verify the message
\\

In Term1:

bash-2.00$ cd $AUV_CONFIG_DIR&nbsp;

bash-2.00$ cp devices.test.cfg devices.cfg

In Term2 (trex2 in missions dir)

Verify the settings in init.cfg

\[dorado1@trex2 missions\]$ pwd
/home/dorado1/amc/missions
\[dorado1@trex2 missions\]$ cat init.cfg
behavior missionTimer {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeOut = 26000;
}

behavior depthEnvelope {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minDepth = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxDepth = 175;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortDepth = 185;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortAltitude = 15.0;
}

behavior setpoint {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heading=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; speed=0.0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; verticalMode=pitch;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pitch=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; duration=60;

In Term1 (mvc-dmo1)

bash-2.00$ cd $AUV/bin
bash-2.00$ nohup ./vcsServer \-v &
\[1\] 8344
bash-2.00$ ps \-a

&nbsp;8346&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 82&nbsp;&nbsp; 64K ./vcsServer \-v
\[1\]+&nbsp; Exit 154&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nohup ./vcsServer \-v

bash-2.00$ cd $AUV_LOG_DIR
bash-2.00$ ls
2009.117.00/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009.119.00/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; latest@
2009.118.00/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009.119.01/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nov.13th.vcs.tar
2009.118.05/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CVS/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testLogs/
2009.118.06/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VcsServer.log.0
bash-2.00$ tail \-f VcsServer.log.0

In Term2:

\[dorado1@trex2 missions\]$ nohup ../exec/amc_o_rt msg.timing.1.cfg &
\[dorado1@trex2 missions\]$ cd ../log/
\[dorado1@trex2 log\]$ tail \-f latest/TREX.log
\\


bash-2.00$ tail \-f VcsServer.log.0
62940673.813,
\######################### Wed Apr 29 21:31:13 2009


62940673.943, VcsServer \-\- configuration:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Port = 8004 ms
62940673.943, VcsServer: Socket created on fd 6
62940673.993, VcsServer - running
62940853.801, VcsServer: Connected to client on 134.89.32.39
62940853.801, VcsServer\[t=0, delta=0\]: Grabbing data

62940853.981, VcsServer:initMission:
behavior missionTimer {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeOut = 26000;
}

behavior depthEnvelope {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minDepth = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxDepth = 175;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortDepth = 185;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; abortAltitude = 15.0;
}

behavior setpoint {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; heading=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; speed=0.0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; verticalMode=pitch;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pitch=0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; duration=60;
}
62940854.331, VcsServer::initMission() - starting supervisor
62940855.371, VcsServer::openLC() - created IF with LayeredControl
62940855.671, VcsServer\[t=1.86987, delta=1.86987\]: Grabbing data

62940891.739, VcsServer: ack - STARTED:0
62940952.044, VcsServer::handleLCMessages() - AMC mission started
62940952.044, VcsServer: ack - FINISHED:0
62940956.784, VcsServer: handling insertBehavior
62940957.024, VcsServer: ack - STARTED:140
62940960.284, VcsServer: ack - FINISHED:140
62940965.603, VcsServer: handling insertBehavior
62940966.183, VcsServer: ack - STARTED:1888
62940976.943, VcsServer\[t=123.142, delta=0.429971\]: Grabbing data

62940977.213, VcsServer: ack - FINISHED:1888
62940982.762, VcsServer: handling insertBehavior
62940982.992, VcsServer: ack - STARTED:3023
62940992.952, VcsServer\[t=139.15, delta=0.43997\]: Grabbing data

62940994.242, VcsServer: ack - FINISHED:3023
62940999.701, VcsServer: handling insertBehavior
62940999.931, VcsServer: ack - STARTED:4108
62941002.001, VcsServer\[t=148.2, delta=0.479967\]: Grabbing data

62941005.941, VcsServer\[t=152.14, delta=0.429971\]: Grabbing data

62941008.961, VcsServer\[t=155.159, delta=0.43997\]: Grabbing data

62941011.090, VcsServer: ack - FINISHED:4108
62941016.650, VcsServer: handling insertBehavior
62941017.190, VcsServer: ack - STARTED:5167
62941018.940, VcsServer\[t=165.139, delta=0.429971\]: Grabbing data

62941021.960, VcsServer\[t=168.158, delta=0.43997\]: Grabbing data

62941028.259, VcsServer: ack - FINISHED:5167
62941033.779, VcsServer: handling insertBehavior
62941034.039, VcsServer: ack - STARTED:6226
62941037.969, VcsServer\[t=184.167, delta=0.43997\]: Grabbing data

62941045.198, VcsServer: ack - FINISHED:6226
62941052.248, VcsServer: No ping received for 7 of up to 12 seconds
62941053.058, VcsServer: No ping received for 8 of up to 12 seconds
62941054.137, VcsServer: No ping received for 9 of up to 12 seconds
62941055.217, VcsServer: No ping received for 10 of up to 12 seconds
62941055.697, VcsServer::recvString - received 0 bytes when expected 4 (uint32_t) \!\!\!
62941055.697, Received a NULL message : should no happen.

bash-2.00$ ps \-a
&nbsp; PID&nbsp; PGRP SID PRI STATE&nbsp;&nbsp; BLK&nbsp; SIZE COMMAND
&nbsp;8707&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K dynamicControlServer
&nbsp;&nbsp; 17&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 24f&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 632K (//9/bin/Dev32)
&nbsp;8726&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 176K layeredControl \-dyno \-plan AmcPlan.cfg \-abort abortMplan.cfg
&nbsp;&nbsp; 23&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 32K (//9/bin/Pipe)
&nbsp;&nbsp; 24&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 160K (//9/bin/Dev32.ser)
&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 160K (//9/bin/Dev32.ser)
&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 300K (//9/bin/Dev.ctiser)
&nbsp;&nbsp; 27&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 440K (//9/bin/Dev32.ansi)
&nbsp;&nbsp; 31&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0&nbsp; 9o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 148K (//9/bin/Dev32.par)
&nbsp;&nbsp; 32&nbsp;&nbsp;&nbsp; 17&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 316K (//9/bin/Dev32.pty)
&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0 18272K (//9/bin/Fsys.floppy)
&nbsp;&nbsp; 37&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 56K (//9/bin/Iso9660fsys)
&nbsp;&nbsp; 40&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 20K (//9/bin/nameloc)
&nbsp;&nbsp; 41&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 16K (//9/bin/nameloc)
&nbsp;&nbsp; 43&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 120K (//9/bin/Dosfsys)
&nbsp;&nbsp; 45&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 23r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 336K (//9/bin/Net)
&nbsp;&nbsp; 47&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 348K (//9/bin/Net.ether82557)
&nbsp;&nbsp; 48&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 20r&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 56K (//9/bin/Net.ether1000)
&nbsp;8754&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 132K navigation
&nbsp;8756&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K newTailConeServer \-dev /dev/ser3
&nbsp;8758&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K m3dmgx1Server \-dev /dev/ser12 \-useForNav
&nbsp;8761&nbsp; 8344&nbsp;&nbsp; 2 19o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 96K newTailConeDriver \-dev /dev/ser3,9600,8,n,1
&nbsp;8762&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 48K gpsServer \-r ashtech \-dev /dev/ser7
&nbsp;8766&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 88K m3dmgx1 \-serial /dev/ser12,9600,8,n,1
&nbsp;8767&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K parosciServer \-dev /dev/ser5
&nbsp;8772&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp; 8791&nbsp;&nbsp; 60K ashtechDriver \-serial /dev/ser7,9600,8,n,1
&nbsp;8773&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
&nbsp;8774&nbsp; 8344&nbsp;&nbsp; 2 19o REPLY&nbsp;&nbsp;&nbsp; 17&nbsp;&nbsp; 84K parosci \-serial /dev/ser5,9600,8,n,1
&nbsp;8778&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 60K seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
&nbsp;8779&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 82&nbsp;&nbsp; 92K seabirdDriver \-n ctdDriver \-serial tcp:sci1-dmo1:10001,9600,8,n,1
&nbsp;8782&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 82&nbsp;&nbsp; 92K seabirdDriver \-n ctdDriver2 \-serial tcp:sci1-dmo1:10002,9600,8,n,1
&nbsp;8793&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 52K bluefinBattServer \-dev /dev/ser10
&nbsp;8796&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 52K dvlServer \-dev /dev/ser6
&nbsp;&nbsp; 94&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; WAIT&nbsp;&nbsp;&nbsp; \-1&nbsp;&nbsp; 28K (//9/bin/tinit)
&nbsp;8799&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 68K bluefinBattDriver \-dev /dev/ser10
&nbsp;&nbsp; 98&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 20K (//9/bin/tinit)
&nbsp;&nbsp; 99&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp; 0 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 68K (//9/bin/Mqueue)
&nbsp;8804&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 17&nbsp;&nbsp; 80K dvl \-serial /dev/ser6,9600,8,n,1
&nbsp;8806&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 48K dropWeightServer \-dev /dev/ser13
&nbsp;8814&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K statePublisher
&nbsp;8818&nbsp; 8344&nbsp;&nbsp; 2 10o READY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 52K dropWeight \-serial /dev/ser13,9600,8,n,1
&nbsp;8346&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K ./vcsServer \-v
&nbsp;8658&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 36K supervisor \-plan AmcPlan.cfg \-dyno
&nbsp;8667&nbsp; 8344&nbsp;&nbsp; 2 10o REPLY&nbsp;&nbsp;&nbsp; 23&nbsp;&nbsp; 16K tee \-i /home/dorado1/auv_autonomy/auv/altex/onboard/logs/latest/syslog
&nbsp;8675&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 28K eventLogServer
&nbsp;8677&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 64K workSite
&nbsp;8679&nbsp; 8344&nbsp;&nbsp; 2 18o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 72K vehicleConfigurationServer
&nbsp;8682&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 32K externalCommsServer
&nbsp;8686&nbsp; 8344&nbsp;&nbsp; 2 14o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 112K navigationServer
&nbsp;8688&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp; 8760&nbsp;&nbsp; 32K externalComms
&nbsp;8690&nbsp; 8344&nbsp;&nbsp; 2 10o&nbsp; RECV&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 140K layeredControl erver \-dyno \-plan AmcPlan.cfg \-abort
bash-2.00$

bash-2.00$ slay supervisor
bash-2.00$ ps \-a&nbsp;&nbsp;



In Term2 (trex2):

Verify that amc_o_rt has terminated


\[dorado1@trex2 log\]$ ps \-elf \| grep amc
0 R dorado1&nbsp;&nbsp; 2040&nbsp; 1761&nbsp; 0&nbsp; 78&nbsp;&nbsp; 0 \-&nbsp;&nbsp; 975 \-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14:45 pts/0&nbsp;&nbsp;&nbsp; 00:00:00 grep amc


Verify that TREX did not have a problem (relax in the log is BAD)
\\
\[dorado1@trex2 log\]$ grep relax latest/TREX.log
\[dorado1@trex2 log\]$


&nbsp;Now, shutdown the OS on TREX2 to prep for power off


\[dorado1@trex2 logs\]$ su root
Password:
\[root@trex2 logs\]# /sbin/shutdown now

Broadcast message from root (pts/2) (Wed Apr 29 14:48:07 2009):

The system is going down to maintenance mode NOW\!
\[root@trex2 logs\]#


In Term1:

bash-2.00$ su root
bash-2.00# shutdown \-b]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797952</id>
</property>
</object>
<object class="Label" package="com.atlassian.confluence.labels">
<id name="id">21135361</id>
<property name="name"><![CDATA[trex]]></property>
<property name="owner"/><property name="namespace"><![CDATA[global]]></property>
<property name="creationDate">2013-04-09 13:22:04.210</property>
<property name="lastModificationDate">2013-04-09 13:22:04.217</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830701</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*
\\

----
h1. VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# On mvc-dmo1, verify the devices.cfg is set correctly
## in the telnet to mvc-dmo1,
### % *cd $AUV_CONFIG_DIR*
### *% cp devices.vsim.cfg devices.cfg*
### % cat statePublisher.cfg&nbsp;&nbsp; (Make sure that the state publisher is visible to the client.
###* the IP address of the correct client (trex2)&nbsp;is uncommented with *AMC_IP*
### Double check to see that a stray VcsServer from a perious run isn't still running using 'ps' .&nbsp; Also make sure Mqueue is running.
###* $ *ps \-a*
# In another terminal window, login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# Check the Iridium Modem
## *% minicom iridium*
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, exit minicom
### at the command line, enter 'reset_a3la' to run the modem power cycling script
#### *% reset_a3la*
## *% minicom iridium*
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## In terminal session 1:
### % nal \-dev /dev/ttyS0
## In terminal session 2:
### % &nbsp;cd \~/auv-linux/onboard/devices/iridium/tests
### % storefwdclient \-f test-a3la.sbd
### examine modem.log
### test the 'uplink' by running the Matlab script (TODO: add procedure for this)
### check email by subscribing to auvsbd@mbari.org&nbsp;at mbari listserver (or checking the archive on the list server)
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# Start the nal driver for the vsim test
## % nohup nal \-dev /dev/ttyS0 &
## % tail \-f nohup.out&nbsp;&nbsp; (check the nal driver is running - look for sleep)
# Test the modem with a text file
## storefwd client<enter>&nbsp;&nbsp; (enter a test message and then wait)
# In the telnet session to mvc-dmo1, start the vcsServer
## *% cd $AUV/bin*
## *% nohup ./vcsServer \-v &*
# On TREX2, make sure the config&nbsp;file is correct for vsim&nbsp;
## % *cd missions*
## % *cp amc.vcs.dl.cfg amc.cfg*
## *Verify amc.cfg and vcs.cfg have the correct settings (remote name, IP address)*
# In the telnet to mvc-dmo1, startup the vcsServer
## *$ nohup ./vcsServer \-v&nbsp;&* (to fire up the vcs server)
# Move back to the T-REX stack to fire up the T-REX client
# *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797934</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179590</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development
[Linux Port]
[Source Code]

h2. Meeting Minutes
[2007-03-26 Autonomy project|Minutes from 2007-03-26--Status meeting on AUV Deliberative Autonomy project]
[2007-03-19 Autonomy project|Minutes from 2007-03-19--Status meeting on AUV Deliberative Autonomy project]
[2007-03-05 Autonomy project|Minutes from 2007-03-05--Status meeting on AUV Deliberative Autonomy project]
[2007-02-20 Autonomy project|Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]

h2. Miscellaneous
[MATLAB Tools]

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114108</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830642</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments//TREX-Checklist.pdf|T-REX Checklist for at-sea deployments]: At sea deployment proceedure on the CTD vehicle.span.jajahWrapper { font-size:1em; color:#B11196; text-decoration:underline; } a.jajahLink { color:#000000; text-decoration:none; } span.jajahInLink:hover { background-color:#B11196; }]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797874</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830641</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist-V9.pdf|T-REX Checklist]: At sea deployment proceedure on the CTD vehicle.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797873</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830632</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*\\

----\\

VSIM Procedure

This procedure is run on the vehicle with simulation on the navigation drivers and as many real instrument drivers as possible.&nbsp;&nbsp; Also, the magnet should be removed to enable the batteries.
# Power-up the vehicle
# Login on mvc-dmo1 (QNX) and power up the trex2 CPU
## *% ping mvc-dmo1*
## *% telnet mvc-dmo1* (dorado1)
## *% . configSrc*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Setup env vars)
## *% qtalk \-m /dev/ser13*&nbsp;&nbsp;&nbsp;&nbsp; \!a<enter>, ctrl-a to exit&nbsp;&nbsp;&nbsp; (to turn on trex2 cpu)
## Wait about 90 seconds for trex2 boot (ping trex2)
# In another terminal window, login to trex2:&nbsp;&nbsp;&nbsp; *% ssh* dorado1@trex2*&nbsp;*&nbsp;
# Check the Iridium Modem
## *% minicom iridium*
### type "*AT*" when minicom starts, should return "*OK*"
## if the A3LA iridium modem does not respond, exit minicom
### at the command line, enter 'reset_a3la' to run the modem power cycling script
#### *% reset_a3la*
## *% minicom iridium*
### AT&nbsp; should retrun OK
### AT+SBDI should return \+SBDI&nbsp;&nbsp; 0,1285,0,0,0 (or something similar)
### exit minicom
# Build and&nbsp;deploy from threadfish&nbsp;
# Now move to&nbsp;trex2&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# Test the&nbsp;iridium (nal) driver - open two terminal sessions on trex2
## session 1:
### % nal \-dev /dev/ttyS0
## session 2:
### % &nbsp;cd \~/auv-linux/onboard/devices/iridium/tests
### % storefwdclient \-f test-a3la.sbd
### examine modem.log
### when finished terminate nal with ctrl-c and delete modem.log % rm modem.log
# Start the nal driver for the vsim test
## % nohup nal \-dev /dev/ttyS0 &
## % tail \-f nohup.out&nbsp;&nbsp; (check the nal driver is running - look for sleep)
# Test the modem with a text file
## storefwd client<enter>&nbsp;&nbsp; (enter a test message and then wait)
# &nbsp;
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
# $ *su root*
# $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
# *$ su root*
# *$ df* (to get all the partitions)
# *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797864</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179930</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** \_serialNo is a 4 byte integer, valid serial numbers are 50,000 to 150,000 (according to Paroscientific tech support)
*** Fixed timeout bug by replacing confirm in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114458</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830656</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.pdf|Checklist for at-sea deployments]: Checklist for at-sea deployment procedures on CTD AUV]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797888</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830657</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments//TREX-Checklist.pdf|Checklist for at-sea deployments]: Checklist for at-sea deployment procedures on CTD AUV
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transectspan.jajahWrapper { font-size:1em; color:#B11196; text-decoration:underline; } a.jajahLink { color:#000000; text-decoration:none; } span.jajahInLink:hover { background-color:#B11196; }]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797889</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179928</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** \_serialNo is a 4 byte integer, valid serial numbers are 50,000 to 150,000 (according to Paroscientific tech support)
*** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114456</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179926</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up\\
2) streamnig pressure data from previous run | waiting for a command |
| *0100EW*0100MD=0<0x0d><0x0a> | *0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** \_serialNo is a 4 byte integer, valid serial numbers are 50,000 to 150,000 (according to Paroscientific tech support)
*** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114454</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830652</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* TREX Checklist: Checklist for at-sea deployment procedures on CTD AUVspan.jajahWrapper { font-size:1em; color:#B11196; text-decoration:underline; } a.jajahLink { color:#000000; text-decoration:none; } span.jajahInLink:hover { background-color:#B11196; }]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797884</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830654</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.pdf|Checklist for at-sea deployments]: Checklist for at-sea deployment procedures on CTD AUVspan.jajahWrapper
{ font-size:1em; color:#B11196; text-decoration:underline; }
a.jajahLink
{ color:#; text-decoration:none; }
span.jajahInLink:hover
{ background-color:#B11196; }span.jajahWrapper { font-size:1em; color:#B11196; text-decoration:underline; } a.jajahLink { color:#000000; text-decoration:none; } span.jajahInLink:hover { background-color:#B11196; }]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797886</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179938</id>
<property name="body"><![CDATA[\\

When VTIME is greater than 0 it enables the timer, but
there are two different types of timers, depending on
whether VMIN is 0 or not.

h5. If VTIME and VMIN are both greater than 0:

\\
* The timer is an \*inter-byte\* \*timer\* \_activated\_ \_when\_ \_the\__first\_ \_byte\_ \_is\_ \_received_.
* It is then reset whenever a new&nbsp;byte is received, and will timeout if there is the specified time without another byte being received.
* A call to read() will block until at least 1 byte is received, unless a signal interrupts.
* If data is buffered when read() is called, and the number of bytes is equal or greater than VMIN, the read() call will return immediately with existing data.

h5. When VTIME is greater than 0 and VMIN is 0:

\\
* The timer is a \*read\* *_timer_\* \_activated\__as{_}{_}soon{_}{_}as{_}{_}the{_}{_}read_() \_function\_ \_is\_ \_called_.
* If no byte is received in the specified time, there will be a timeout and the read() call will return 0, with no data.
* Since VMIN is 0, the receipt of a single byte will satisfy the read() call, and cause a return. If there is data in the buffer when read() is called, read() will immediately return with existing data.

h5. If VTIME is 0, the timer is disabled. If VMIN is also 0:

\\
* A&nbsp;call to read() will \_return\_ \_immediately_.
* The minimum of either the number of bytes requested or the number of bytes currently available will be returned.
* If no characters are available, read() returns 0, with no data.

h5. If VTIME is 0 and VMIN is greater than 0:

\\
* The timer is disabled, but a call to read() will \_block__indefinitely\_ until either data is received or a signal interrupts.
* When VMIN bytes have been received, the read() function will return.
* If there is data in the buffer when read() is called, and the number of bytes is equal to or greater than VMIN, the read() call will return immediately with existing data.

\\
Okay, now given that you want to read one or more
characters and have a timeout, the question is do you
actually want an inter-byte timer, or a read timer? If
you set both VTIME and VMIN to 1, for example, you'll
have an inter-byte timer... and calls to read() can
\*block\* \*forever\* if no data at all is received.

If you want a read timer, set VMIN to 0 and VTIME to 1,
and then the call to read() will always return, with or
without data. If there is no data available, read()
will return 0, if data is available it will return the
number of data bytes retrieved.

All of the above assumes that the O_NONBLOCK attribute
is not set. And for any of the above if the call to
read() is interrupted by a signal, read() will return
\-1, and the error code will be EINTR. (More discussion
about this below.)

&nbsp;---------------------------------------------------\-

When the *ICANON* bit is turned off, a "raw mode" is selected which changes the interpretation of these values. These are used to guide the line-driver code in its decision on allowing the *read()* system call to return. We'll try to explain them in some detail. Function-key processingOn a regular keyboard, most keys send just one byte each, but almost all keyboards have special keys that send asequence of charactersat a time. Examples (from an ANSI keyboard)ESC [ A      up arrowESC [ 5 ~    page upESC [ 18 ~   F7and so on.From a strictly "string recognition" point of view, it's easy enough to translate "ESC [ A" into "up arrow" inside a program, but how does it tell the difference between "user typed up-arrow" and "user typed the ESCAPE key"? The difference istiming. If the ESCAPE isimmediatelyfollowed by the rest of the expected sequence, then it's a function key: otherwise it's just a plain ESCAPE.Efficient highspeed inputWhen a communications program (such as fax software) is reading from a modem, the data stream is arriving at a relatively high rate. Doing single-character-at-a-time input would be extremely inefficient, given that eachread()involves a system call and an operating system context switch. We'd instead like to read in larger chunk if it's available for us, but still know how to recognize timeouts (which usually indicate error conditions).Capturing occasional, low-volume dataWhen writing software that monitored a temperature sensor via a serial line, we expected to receive a short (10-20 bytes) message every second. This message arrived as a single burst, and once the first character of the message was received, weknewthat the others were right behind it and would be completely received in about 100 milliseconds.The message format did not have strong delimiters, so if we used a naïve read of so many bytes, we'd run the risk of reading an entire message but blocking until a few more bytesof the next messagewere read to fill our request. This could lead to getting "out of sync" with the sensor.By settingVMIN/VTIMEproperly, we were able to insure that that we could efficiently capture all the data sent in one burst without risk of inter-message overlap.We'll note that some of these timeout issues can be partly addressed by the use of signals and alarms, but this is really a substandard solution: signals and I/O are hard to get right (especially in a portable manner), and we very strongly prefer using the features of the line-discipline code as they were intended. Signals suck. \\

h5. When does +read()+ return?

The *termios* settings are actually handled in the kernel, and the ones we're interested in are in the _line discipline_ code. This sits above the "device driver", and this is consistent with our applying termios to both serial and network I/O (which obviously use different underlying hardware).

All of the *VMIN* and *VTIME* areas involve one question: _When does the line driver allow_ *{_}read()_* _to return?_
With a "regular file", the operating system returns from the *read()* system call when either the user buffer is full, or when the end of file has been reached - this decision is easy and automatic.

But when the driver is reading from a terminal line, the "Are we done?" question can be asked over and over for each character that arrives. This question is resolved by setting *VMIN*/*VTIME*.

Using our temperature-sensor example, we'll list the requirements that inform our design:
* We normally read up to 20 bytes as a "message"
* Individual messages have their bytes all sent together
* No background processing required; while waiting for input, we're happy to block indefinitely waiting for something to happen

The last requirement means that we have no _overall_ timeout, but we do have an _intercharacter_ timeout. This is the key functionality provided by the line driver. Let's be specific.

When waiting for input, the driver returns when: VTIMEtenths of a second elapsesbetweenbytesAn internal timer is started when a character arrives, and it counts up in tenths of a second units. It's reset whenever new data arrives, so rapidly-arriving data never gives the intercharacter timer a chance to count very high.It's only after thelastcharacter of a burst — when the line is quiet — that the timer really gets counting. When it reachesVTIMEtenths, the user's request has been satisfied and theread()returns.This provides exactly the behavior we want when dealing with bursty data: collect data while it's arriving rapidly, but when it calms down, give us what you got.VMINcharacters have been received, with no more data availableAt first this appears duplicative to thenbytesparameter to theread()system call, but it's not quite the same thing.The serial driver maintains an input queue of data received but not transferred to the user — clearly data can arrive even when we're not asking for it — and this is always first copied to the user's buffer on aread()without having to wait for anything.But if we do end up blocking for I/O (because the kernel's input queue is empty), thenVMINkicks in: When that many bytes have been received, theread()request returns that data. In this respect we can think of thenbytesparameter as being the amount of data wehopeto get, but we'll settle forVMIN.The user's requested number of bytes has been satisfiedThis rule trumps all the others: there is no circumstance where the system will providemoredata than was actually asked for by the user. If the user asks for (say) ten bytes in theread()system call, and that much data is already waiting in the kernel's input queue, then it's returned to the caller immediately and without havingVMINandVTIMEparticipate in any way.These are certainly confusing to one who is new to *termios*, but it's not really poorly defined Instead, they solve problems that are not obvious to the newcomer. It's only when one is actually dealing with terminal I/O and running into issues of either performance or timing that one really must dig in.

h5. &nbsp;&nbsp;


h5. VMIN and VTIME defined

*VMIN* is a character count ranging from 0 to 255 characters, and *VTIME* is time measured in 0.1 second intervals, (0 to 25.5 seconds). The value of "zero" is special to both of these parameters, and this suggests four combinations that we'll discuss below. In every case, the question is when a *read()* system call is satisfied, and this is our prototype call: int n = read(fd, buffer, nbytes);
Keep in mind that the tty driver maintains an input queue of bytes already read from the serial line and not passed to the user, so not every *read()* call waits for actual I/O - the read may very well be satisfied directly from the input queue. VMIN = 0 and VTIME = 0This is a completely non-blocking read - the call is satisfied immediately directly from the driver's input queue. If data are available, it's transferred to the caller's buffer up to nbytes and returned. Otherwise zero is immediately returned to indicate "no data". We'll note that this is "polling" of the serial port, and it's almost always a bad idea. If done repeatedly, it can consume enormous amounts of processor time and is highly inefficient. Don't use this mode unless you really, really know what you're doing.VMIN = 0 and VTIME > 0This is a pure timed read. If data are available in the input queue, it's transferred to the caller's buffer up to a maximum of nbytes, and returned immediately to the caller. Otherwise the driver blocks until data arrives, or when VTIME tenths expire from the start of the call. If the timer expires without data, zero is returned. A single byte is sufficient to satisfy this read call, but if more is available in the input queue, it's returned to the caller. Note that this is anoveralltimer, not anintercharacterone.VMIN > 0 and VTIME > 0Aread()is satisfied when either VMIN characters have been transferred to the caller's buffer, or when VTIME tenths expire between characters. Since this timer is not started until the first character arrives, this call can block indefinitely if the serial line is idle. This is the most common mode of operation, and we consider VTIME to be anintercharactertimeout, not anoverallone. This call should never return zero bytes read.VMIN > 0 and VTIME = 0This is a counted read that is satisfied only when at least VMIN characters have been transferred to the caller's buffer - there is no timing component involved. This read can be satisfied from the driver's input queue (where the call could return immediately), or by waiting for new data to arrive: in this respect the call could block indefinitely. We believe that it's undefined behavior if nbytes is less then VMIN.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114466</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830648</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797880</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179937</id>
<property name="body"><![CDATA[\\

When VTIME is greater than 0 it enables the timer, but
there are two different types of timers, depending on
whether VMIN is 0 or not.

h5. If VTIME and VMIN are both greater than 0:

\\
* The timer is an \*inter-byte\* \*timer\* \_activated\_ \_when\_ \_the\__first\_ \_byte\_ \_is\_ \_received_.
* It is then reset whenever a new&nbsp;byte is received, and will timeout if there is the specified time without another byte being received.
* A call to read() will block until at least 1 byte is received, unless a signal interrupts.
* If data is buffered when read() is called, and the number of bytes is equal or greater than VMIN, the read() call will return immediately with existing data.

h5. When VTIME is greater than 0 and VMIN is 0:

\\
* The timer is a \*read\* *_timer_\* \_activated\__as{_}{_}soon{_}{_}as{_}{_}the{_}{_}read_() \_function\_ \_is\_ \_called_.
* If no byte is received in the specified time, there will be a timeout and the read() call will return 0, with no data.
* Since VMIN is 0, the receipt of a single byte will satisfy the read() call, and cause a return. If there is data in the buffer when read() is called, read() will immediately return with existing data.

h5. If VTIME is 0, the timer is disabled. If VMIN is also 0:

\\
* A&nbsp;call to read() will \_return\_ \_immediately_.
* The minimum of either the number of bytes requested or the number of bytes currently available will be returned.
* If no characters are available, read() returns 0, with no data.

h5. If VTIME is 0 and VMIN is greater than 0:

\\
* The timer is disabled, but a call to read() will \_block__indefinitely\_ until either data is received or a signal interrupts.
* When VMIN bytes have been received, the read() function will return.
* If there is data in the buffer when read() is called, and the number of bytes is equal to or greater than VMIN, the read() call will return immediately with existing data.

\\
Okay, now given that you want to read one or more
characters and have a timeout, the question is do you
actually want an inter-byte timer, or a read timer? If
you set both VTIME and VMIN to 1, for example, you'll
have an inter-byte timer... and calls to read() can
\*block\* \*forever\* if no data at all is received.

If you want a read timer, set VMIN to 0 and VTIME to 1,
and then the call to read() will always return, with or
without data. If there is no data available, read()
will return 0, if data is available it will return the
number of data bytes retrieved.

All of the above assumes that the O_NONBLOCK attribute
is not set. And for any of the above if the call to
read() is interrupted by a signal, read() will return
\-1, and the error code will be EINTR. (More discussion
about this below.) ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114465</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830643</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments//TREX-Checklist.pdf|T-REX Checklist for at-sea deployments]: At sea deployment proceedure on the CTD vehicle]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797875</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179934</id>
<property name="body"><![CDATA[\\

When VTIME is greater than 0 it enables the timer, but
there are two different types of timers, depending on
whether VMIN is 0 or not.

h5.

If VTIME and VMIN are both greater than 0:

* The timer is an \*inter-byte\* \*timer\* \_activated\_ \_when\_ \_the__first\_ \_byte\_ \_is\_ \_received_.
* It is then reset whenever a new&nbsp;byte is received, and will timeout if there is the specified time without another byte being received.
* A call to read() will block until at least 1 byte is received, unless a signal interrupts.
* If data is buffered when read() is called, and the number of bytes is equal or greater than VMIN, the read() call will return immediately with existing data.

h5. When VTIME is greater than 0 and VMIN is 0:

* The timer is a \*read\* \*_timer_\* \_activated__as__soon__as__the__read_() \_function\_ \_is\_ \_called_.
* If no byte is received in the specified time, there will be a timeout and the read() call will return 0, with no data.
* Since VMIN is 0, the receipt of a single byte will satisfy the read() call, and cause a return. If there is data in the buffer when read() is called, read() will immediately return with existing data.

h5.
If VTIME is 0, the timer is disabled. If VMIN is also 0:

* A&nbsp;call to read() will \_return\_ \_immediately_.
* The minimum of either the number of bytes requested or the number of bytes currently available will be returned.
* If no characters are available, read() returns 0, with no data.

h5.
If VTIME is 0 and VMIN is greater than 0:

* The timer is disabled, but a call to read() will \_block__indefinitely\_ until either data is received or a signal interrupts.
* When VMIN bytes have been received, the read() function will return.
* If there is data in the buffer when read() is called, and the number of bytes is equal to or greater than VMIN, the read() call will return immediately with existing data.


Okay, now given that you want to read one or more
characters and have a timeout, the question is do you
actually want an inter-byte timer, or a read timer? If
you set both VTIME and VMIN to 1, for example, you'll
have an inter-byte timer... and calls to read() can
\*block\* \*forever\* if no data at all is received.

If you want a read timer, set VMIN to 0 and VTIME to 1,
and then the call to read() will always return, with or
without data. If there is no data available, read()
will return 0, if data is available it will return the
number of data bytes retrieved.

All of the above assumes that the O_NONBLOCK attribute
is not set. And for any of the above if the call to
read() is interrupted by a signal, read() will return
\-1, and the error code will be EINTR. (More discussion
about this below.) ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114462</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830644</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [|https://oceana.mbari.org/confluence/download/attachments//TREX-Checklist.pdf|T-REX Checklist for at-sea deployments][TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.pdf|T-REX Checklist for at-sea deployments]: At sea deployment proceedure on the CTD vehiclespan.jajahWrapper { font-size:1em; color:#B11196; text-decoration:underline; } a.jajahLink { color:#000000; text-decoration:none; } span.jajahInLink:hover { background-color:#B11196; }]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797876</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830645</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [|https://oceana.mbari.org/confluence/download/attachments//TREX-Checklist.pdf|T-REX Checklist for at-sea deployments][TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.pdf|T-REX Checklist for at-sea deployments]: At sea deployment proceedure on the CTD vehicle]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797877</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830646</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments//TREX-Checklist.pdf|T-REX Checklist for at-sea deployments]: At sea deployment proceedure on the CTD vehiclespan.jajahWrapper { font-size:1em; color:#B11196; text-decoration:underline; } a.jajahLink { color:#000000; text-decoration:none; } span.jajahInLink:hover { background-color:#B11196; }]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797878</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179945</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** \_serialNo is a 4 byte integer, valid serial numbers are 50,000 to 150,000 (according to Paroscientific tech support)
*** Fixed timeout bug by replacing confirm in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114473</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179953</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114481</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830599</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right versions checked out from CVS and SVN on Threadfish, do:
\\
# &nbsp;For the NAL Iridium driver, Move to the auv-linux directory and checkout the tagged baseline and build
## *cd \~/coding/auv-linux*
## *cvs up \-r* *"april27-2009"&nbsp;&nbsp;&nbsp;&nbsp;* (or whaterver the correct tag is supposed to be)
## *cd onboard*
## *make*&nbsp;
# % *cd* <to the TREX directory>
# % *svn update* (to update the TREX&nbsp;tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*&nbsp;&nbsp; (Note: jam clean will clean the Europa tree (a bug), if this jam make fails, then build Europa before running).
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797831</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179967</id>
<property name="body"><![CDATA[\\

When VTIME is greater than 0 it enables the timer, but
there are two different types of timers, depending on
whether VMIN is 0 or not.

h5. If VTIME and VMIN are both greater than 0:

\\
* The timer is an 'inter-byte timer' activated when the _first byte is received_.
* It is then reset whenever a new&nbsp;byte is received, and will timeout (count in tenths of seconds with a max of 25.5 sec) if there is the specified time without another byte being received.
* A call to read() will block until at least 1 byte is received, unless a signal interrupts.
* If data is buffered when read() is called, and the number of bytes is equal or greater than VMIN, the read() call will return immediately with existing data.

h5. When VTIME is greater than 0 and VMIN is 0:

\\
* The timer is a \*read\* *_timer_\* \_activated\__as{_}{_}soon{_}{_}as{_}{_}the{_}{_}read_() \_function\_ \_is\_ \_called_.
* If no byte is received in the specified time, there will be a timeout and the read() call will return 0, with no data.
* Since VMIN is 0, the receipt of a single byte will satisfy the read() call, and cause a return. If there is data in the buffer when read() is called, read() will immediately return with existing data.

h5. If VTIME is 0, the timer is disabled. If VMIN is also 0:

\\
* A&nbsp;call to read() will \_return\_ \_immediately_.
* The minimum of either the number of bytes requested or the number of bytes currently available will be returned.
* If no characters are available, read() returns 0, with no data.

h5. If VTIME is 0 and VMIN is greater than 0:

\\
* The timer is disabled, but a call to read() will \_block__indefinitely\_ until either data is received or a signal interrupts.
* When VMIN bytes have been received, the read() function will return.
* If there is data in the buffer when read() is called, and the number of bytes is equal to or greater than VMIN, the read() call will return immediately with existing data.

\\
Okay, now given that you want to read one or more
characters and have a timeout, the question is do you
actually want an inter-byte timer, or a read timer? If
you set both VTIME and VMIN to 1, for example, you'll
have an inter-byte timer... and calls to read() can
\*block\* \*forever\* if no data at all is received.

If you want a read timer, set VMIN to 0 and VTIME to 1,
and then the call to read() will always return, with or
without data. If there is no data available, read()
will return 0, if data is available it will return the
number of data bytes retrieved.

All of the above assumes that the O_NONBLOCK attribute
is not set. And for any of the above if the call to
read() is interrupted by a signal, read() will return
\-1, and the error code will be EINTR. (More discussion
about this below.)

&nbsp;---------------------------------------------------\-

When the *ICANON* bit is turned off, a "raw mode" is selected which changes the interpretation of these values. These are used to guide the line-driver code in its decision on allowing the *read()* system call to return. We'll try to explain them in some detail. Function-key processingOn a regular keyboard, most keys send just one byte each, but almost all keyboards have special keys that send asequence of charactersat a time. Examples (from an ANSI keyboard)ESC \[ A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; up arrowESC \[ 5 \~&nbsp;&nbsp;&nbsp; page upESC \[ 18 \~&nbsp;&nbsp; F7and so on.From a strictly "string recognition" point of view, it's easy enough to translate "ESC \[ A" into "up arrow" inside a program, but how does it tell the difference between "user typed up-arrow" and "user typed the ESCAPE key"? The difference istiming. If the ESCAPE isimmediatelyfollowed by the rest of the expected sequence, then it's a function key: otherwise it's just a plain ESCAPE.Efficient highspeed inputWhen a communications program (such as fax software) is reading from a modem, the data stream is arriving at a relatively high rate. Doing single-character-at-a-time input would be extremely inefficient, given that eachread()involves a system call and an operating system context switch. We'd instead like to read in larger chunk if it's available for us, but still know how to recognize timeouts (which usually indicate error conditions).Capturing occasional, low-volume dataWhen writing software that monitored a temperature sensor via a serial line, we expected to receive a short (10-20 bytes) message every second. This message arrived as a single burst, and once the first character of the message was received, weknewthat the others were right behind it and would be completely received in about 100 milliseconds.The message format did not have strong delimiters, so if we used a naïve read of so many bytes, we'd run the risk of reading an entire message but blocking until a few more bytesof the next messagewere read to fill our request. This could lead to getting "out of sync" with the sensor.By settingVMIN/VTIMEproperly, we were able to insure that that we could efficiently capture all the data sent in one burst without risk of inter-message overlap.We'll note that some of these timeout issues can be partly addressed by the use of signals and alarms, but this is really a substandard solution: signals and I/O are hard to get right (especially in a portable manner), and we very strongly prefer using the features of the line-discipline code as they were intended. Signals suck.
\\

h5. When does +read()+ return?

The *termios* settings are actually handled in the kernel, and the ones we're interested in are in the _line discipline_ code. This sits above the "device driver", and this is consistent with our applying termios to both serial and network I/O (which obviously use different underlying hardware).

All of the *VMIN* and *VTIME* areas involve one question: _When does the line driver allow_ *{_}read()_* _to return?_
With a "regular file", the operating system returns from the *read()* system call when either the user buffer is full, or when the end of file has been reached - this decision is easy and automatic.

But when the driver is reading from a terminal line, the "Are we done?" question can be asked over and over for each character that arrives. This question is resolved by setting *VMIN*/*VTIME*.

Using our temperature-sensor example, we'll list the requirements that inform our design:
* We normally read up to 20 bytes as a "message"
* Individual messages have their bytes all sent together
* No background processing required; while waiting for input, we're happy to block indefinitely waiting for something to happen

The last requirement means that we have no _overall_ timeout, but we do have an _intercharacter_ timeout. This is the key functionality provided by the line driver. Let's be specific.

When waiting for input, the driver returns when: VTIMEtenths of a second elapsesbetweenbytesAn internal timer is started when a character arrives, and it counts up in tenths of a second units. It's reset whenever new data arrives, so rapidly-arriving data never gives the intercharacter timer a chance to count very high.It's only after thelastcharacter of a burst --- when the line is quiet --- that the timer really gets counting. When it reachesVTIMEtenths, the user's request has been satisfied and theread()returns.This provides exactly the behavior we want when dealing with bursty data: collect data while it's arriving rapidly, but when it calms down, give us what you got.VMINcharacters have been received, with no more data availableAt first this appears duplicative to thenbytesparameter to theread()system call, but it's not quite the same thing.The serial driver maintains an input queue of data received but not transferred to the user --- clearly data can arrive even when we're not asking for it --- and this is always first copied to the user's buffer on aread()without having to wait for anything.But if we do end up blocking for I/O (because the kernel's input queue is empty), thenVMINkicks in: When that many bytes have been received, theread()request returns that data. In this respect we can think of thenbytesparameter as being the amount of data wehopeto get, but we'll settle forVMIN.The user's requested number of bytes has been satisfiedThis rule trumps all the others: there is no circumstance where the system will providemoredata than was actually asked for by the user. If the user asks for (say) ten bytes in theread()system call, and that much data is already waiting in the kernel's input queue, then it's returned to the caller immediately and without havingVMINandVTIMEparticipate in any way.These are certainly confusing to one who is new to *termios*, but it's not really poorly defined Instead, they solve problems that are not obvious to the newcomer. It's only when one is actually dealing with terminal I/O and running into issues of either performance or timing that one really must dig in.

h5. &nbsp;&nbsp;


h5. VMIN and VTIME defined

*VMIN* is a character count ranging from 0 to 255 characters, and *VTIME* is time measured in 0.1 second intervals, (0 to 25.5 seconds). The value of "zero" is special to both of these parameters, and this suggests four combinations that we'll discuss below. In every case, the question is when a *read()* system call is satisfied, and this is our prototype call: int n = read(fd, buffer, nbytes);
Keep in mind that the tty driver maintains an input queue of bytes already read from the serial line and not passed to the user, so not every *read()* call waits for actual I/O - the read may very well be satisfied directly from the input queue. VMIN = 0 and VTIME = 0This is a completely non-blocking read - the call is satisfied immediately directly from the driver's input queue. If data are available, it's transferred to the caller's buffer up to nbytes and returned. Otherwise zero is immediately returned to indicate "no data". We'll note that this is "polling" of the serial port, and it's almost always a bad idea. If done repeatedly, it can consume enormous amounts of processor time and is highly inefficient. Don't use this mode unless you really, really know what you're doing.VMIN = 0 and VTIME > 0This is a pure timed read. If data are available in the input queue, it's transferred to the caller's buffer up to a maximum of nbytes, and returned immediately to the caller. Otherwise the driver blocks until data arrives, or when VTIME tenths expire from the start of the call. If the timer expires without data, zero is returned. A single byte is sufficient to satisfy this read call, but if more is available in the input queue, it's returned to the caller. Note that this is anoveralltimer, not anintercharacterone.VMIN > 0 and VTIME > 0Aread()is satisfied when either VMIN characters have been transferred to the caller's buffer, or when VTIME tenths expire between characters. Since this timer is not started until the first character arrives, this call can block indefinitely if the serial line is idle. This is the most common mode of operation, and we consider VTIME to be anintercharactertimeout, not anoverallone. This call should never return zero bytes read.VMIN > 0 and VTIME = 0This is a counted read that is satisfied only when at least VMIN characters have been transferred to the caller's buffer - there is no timing component involved. This read can be satisfied from the driver's input queue (where the call could return immediately), or by waiting for new data to arrive: in this respect the call could block indefinitely. We believe that it's undefined behavior if nbytes is less then VMIN.\\ \\ \\ \\

\--------------------------------------\-

&nbsp;http://www.gnu.org/software/libc/manual/html_mono/libc.html\\

h4. 17.4.4 Input Modes

This section describes the terminal attribute flags that control fairly low-level aspects of input processing: handling of parity errors, break signals, flow control, and <RET> and <LFD> characters.

All of these flags are bits in the c_iflag member of the struct termios structure. The member is an integer, and you change flags using the operators &, | and ^. Don't try to specify the entire value for c_iflag---instead, change only specific flags and leave the rest untouched (see Setting Modes). --- Macro: tcflag_t *INPCK*
If this bit is set, input parity checking is enabled. If it is not set, no checking at all is done for parity errors on input; the characters are simply passed through to the application.

Parity checking on input processing is independent of whether parity detection and generation on the underlying terminal hardware is enabled; see Control Modes. For example, you could clear the INPCK input mode flag and set the PARENB control mode flag to ignore parity errors on input, but still generate parity on output.

If this bit is set, what happens when a parity error is detected depends on whether the IGNPAR or PARMRK bits are set. If neither of these bits are set, a byte with a parity error is passed to the application as a '\0' character. --- Macro: tcflag_t *IGNPAR*
If this bit is set, any byte with a framing or parity error is ignored. This is only useful if INPCK is also set.
--- Macro: tcflag_t *PARMRK*
If this bit is set, input bytes with parity or framing errors are marked when passed to the program. This bit is meaningful only when INPCK is set and IGNPAR is not set.

The way erroneous bytes are marked is with two preceding bytes, 377 and 0. Thus, the program actually reads three bytes for one erroneous byte received from the terminal.

If a valid byte has the value 0377, and ISTRIP (see below) is not set, the program might confuse it with the prefix that marks a parity error. So a valid byte 0377 is passed to the program as two bytes, 0377 0377, in this case.
--- Macro: tcflag_t *ISTRIP*
If this bit is set, valid input bytes are stripped to seven bits; otherwise, all eight bits are available for programs to read.
--- Macro: tcflag_t *IGNBRK*
If this bit is set, break conditions are ignored.

A break condition is defined in the context of asynchronous serial data transmission as a series of zero-value bits longer than a single byte.
--- Macro: tcflag_t *BRKINT*
If this bit is set and IGNBRK is not set, a break condition clears the terminal input and output queues and raises a SIGINT signal for the foreground process group associated with the terminal.

If neither BRKINT nor IGNBRK are set, a break condition is passed to the application as a single '\0' character if PARMRK is not set, or otherwise as a three-character sequence '\377', '\0', '\0'.
--- Macro: tcflag_t *IGNCR*
If this bit is set, carriage return characters ('\r') are discarded on input. Discarding carriage return may be useful on terminals that send both carriage return and linefeed when you type the <RET> key.
--- Macro: tcflag_t *ICRNL*
If this bit is set and IGNCR is not set, carriage return characters ('\r') received as input are passed to the application as newline characters ('\n').
--- Macro: tcflag_t *INLCR*
If this bit is set, newline characters ('\n') received as input are passed to the application as carriage return characters ('\r').
--- Macro: tcflag_t *IXOFF*
If this bit is set, start/stop control on input is enabled. In other words, the computer sends STOP and START characters as necessary to prevent input from coming in faster than programs are reading it. The idea is that the actual terminal hardware that is generating the input data responds to a STOP character by suspending transmission, and to a START character by resuming transmission. See Start/Stop Characters.
--- Macro: tcflag_t *IXON*
If this bit is set, start/stop control on output is enabled. In other words, if the computer receives a STOP character, it suspends output until a START character is received. In this case, the STOP and START characters are never passed to the application program. If this bit is not set, then START and STOP can be read as ordinary characters. See Start/Stop Characters.
--- Macro: tcflag_t *IXANY*
If this bit is set, any input character restarts output when output has been suspended with the STOP character. Otherwise, only the START character restarts output.

This is a BSD extension; it exists only on BSD systems and the GNU system.
--- Macro: tcflag_t *IMAXBEL*
If this bit is set, then filling up the terminal input buffer sends a BEL character (code 007) to the terminal to ring the bell.

This is a BSD extension. \\

h4. 17.4.5 Output Modes

This section describes the terminal flags and fields that control how output characters are translated and padded for display. All of these are contained in the c_oflag member of the struct termios structure.

The c_oflag member itself is an integer, and you change the flags and fields using the operators &, |, and ^. Don't try to specify the entire value for c_oflag---instead, change only specific flags and leave the rest untouched (see Setting Modes). --- Macro: tcflag_t *OPOST*
If this bit is set, output data is processed in some unspecified way so that it is displayed appropriately on the terminal device. This typically includes mapping newline characters ('\n') onto carriage return and linefeed pairs.

If this bit isn't set, the characters are transmitted as-is.
The following three bits are BSD features, and they exist only BSD systems and the GNU system. They are effective only if OPOST is set. --- Macro: tcflag_t *ONLCR*
If this bit is set, convert the newline character on output into a pair of characters, carriage return followed by linefeed. --- Macro: tcflag_t *OXTABS*
If this bit is set, convert tab characters on output into the appropriate number of spaces to emulate a tab stop every eight columns.
--- Macro: tcflag_t *ONOEOT*
If this bit is set, discard C-d characters (code 004) on output. These characters cause many dial-up terminals to disconnect.\\
h4. 17.4.6 Control Modes

This section describes the terminal flags and fields that control parameters usually associated with asynchronous serial data transmission. These flags may not make sense for other kinds of terminal ports (such as a network connection pseudo-terminal). All of these are contained in the c_cflag member of the struct termios structure.

The c_cflag member itself is an integer, and you change the flags and fields using the operators &, |, and ^. Don't try to specify the entire value for c_cflag---instead, change only specific flags and leave the rest untouched (see Setting Modes). --- Macro: tcflag_t *CLOCAL*
If this bit is set, it indicates that the terminal is connected "locally" and that the modem status lines (such as carrier detect) should be ignored. On many systems if this bit is not set and you call open without the O_NONBLOCK flag set, open blocks until a modem connection is established.

If this bit is not set and a modem disconnect is detected, a SIGHUP signal is sent to the controlling process group for the terminal (if it has one). Normally, this causes the process to exit; see Signal Handling. Reading from the terminal after a disconnect causes an end-of-file condition, and writing causes an EIO error to be returned. The terminal device must be closed and reopened to clear the condition. --- Macro: tcflag_t *HUPCL*
If this bit is set, a modem disconnect is generated when all processes that have the terminal device open have either closed the file or exited.
--- Macro: tcflag_t *CREAD*
If this bit is set, input can be read from the terminal. Otherwise, input is discarded when it arrives.
--- Macro: tcflag_t *CSTOPB*
If this bit is set, two stop bits are used. Otherwise, only one stop bit is used.
--- Macro: tcflag_t *PARENB*
If this bit is set, generation and detection of a parity bit are enabled. See Input Modes, for information on how input parity errors are handled.

If this bit is not set, no parity bit is added to output characters, and input characters are not checked for correct parity.
--- Macro: tcflag_t *PARODD*
This bit is only useful if PARENB is set. If PARODD is set, odd parity is used, otherwise even parity is used.
The control mode flags also includes a field for the number of bits per character. You can use the CSIZE macro as a mask to extract the value, like this: settings.c_cflag & CSIZE. --- Macro: tcflag_t *CSIZE*
This is a mask for the number of bits per character. --- Macro: tcflag_t *CS5*
This specifies five bits per byte.
--- Macro: tcflag_t *CS6*
This specifies six bits per byte.
--- Macro: tcflag_t *CS7*
This specifies seven bits per byte.
--- Macro: tcflag_t *CS8*
This specifies eight bits per byte.
The following four bits are BSD extensions; this exist only on BSD systems and the GNU system. --- Macro: tcflag_t *CCTS_OFLOW*
If this bit is set, enable flow control of output based on the CTS wire (RS232 protocol). --- Macro: tcflag_t *CRTS_IFLOW*
If this bit is set, enable flow control of input based on the RTS wire (RS232 protocol).
--- Macro: tcflag_t *MDMBUF*
If this bit is set, enable carrier-based flow control of output.
--- Macro: tcflag_t *CIGNORE*
If this bit is set, it says to ignore the control modes and line speed values entirely. This is only meaningful in a call to tcsetattr.

The c_cflag member and the line speed values returned by cfgetispeed and cfgetospeed will be unaffected by the call. CIGNORE is useful if you want to set all the software modes in the other members, but leave the hardware details in c_cflag unchanged. (This is how the TCSASOFT flag to tcsettattr works.)

This bit is never set in the structure filled in by tcgetattr. \\ \\

h4. 17.4.7 Local Modes

This section describes the flags for the c_lflag member of the struct termios structure. These flags generally control higher-level aspects of input processing than the input modes flags described in Input Modes, such as echoing, signals, and the choice of canonical or noncanonical input.

The c_lflag member itself is an integer, and you change the flags and fields using the operators &, |, and ^. Don't try to specify the entire value for c_lflag---instead, change only specific flags and leave the rest untouched (see Setting Modes). --- Macro: tcflag_t *ICANON*
This bit, if set, enables canonical input processing mode. Otherwise, input is processed in noncanonical mode. See Canonical or Not. --- Macro: tcflag_t *ECHO*
If this bit is set, echoing of input characters back to the terminal is enabled.
--- Macro: tcflag_t *ECHOE*
If this bit is set, echoing indicates erasure of input with the ERASE character by erasing the last character in the current line from the screen. Otherwise, the character erased is re-echoed to show what has happened (suitable for a printing terminal).

This bit only controls the display behavior; the ICANON bit by itself controls actual recognition of the ERASE character and erasure of input, without which ECHOE is simply irrelevant.
--- Macro: tcflag_t *ECHOPRT*
This bit is like ECHOE, enables display of the ERASE character in a way that is geared to a hardcopy terminal. When you type the ERASE character, a `\' character is printed followed by the first character erased. Typing the ERASE character again just prints the next character erased. Then, the next time you type a normal character, a `/' character is printed before the character echoes.

This is a BSD extension, and exists only in BSD systems and the GNU system.
--- Macro: tcflag_t *ECHOK*
This bit enables special display of the KILL character by moving to a new line after echoing the KILL character normally. The behavior of ECHOKE (below) is nicer to look at.

If this bit is not set, the KILL character echoes just as it would if it were not the KILL character. Then it is up to the user to remember that the KILL character has erased the preceding input; there is no indication of this on the screen.

This bit only controls the display behavior; the ICANON bit by itself controls actual recognition of the KILL character and erasure of input, without which ECHOK is simply irrelevant.
--- Macro: tcflag_t *ECHOKE*
This bit is similar to ECHOK. It enables special display of the KILL character by erasing on the screen the entire line that has been killed. This is a BSD extension, and exists only in BSD systems and the GNU system.
--- Macro: tcflag_t *ECHONL*
If this bit is set and the ICANON bit is also set, then the newline ('\n') character is echoed even if the ECHO bit is not set.
--- Macro: tcflag_t *ECHOCTL*
If this bit is set and the ECHO bit is also set, echo control characters with `^' followed by the corresponding text character. Thus, control-A echoes as `^A'. This is usually the preferred mode for interactive input, because echoing a control character back to the terminal could have some undesired effect on the terminal.

This is a BSD extension, and exists only in BSD systems and the GNU system.
--- Macro: tcflag_t *ISIG*
This bit controls whether the INTR, QUIT, and SUSP characters are recognized. The functions associated with these characters are performed if and only if this bit is set. Being in canonical or noncanonical input mode has no affect on the interpretation of these characters.

You should use caution when disabling recognition of these characters. Programs that cannot be interrupted interactively are very user-unfriendly. If you clear this bit, your program should provide some alternate interface that allows the user to interactively send the signals associated with these characters, or to escape from the program. See Signal Characters.
--- Macro: tcflag_t *IEXTEN*
POSIX.1 gives IEXTEN implementation-defined meaning, so you cannot rely on this interpretation on all systems.

On BSD systems and the GNU system, it enables the LNEXT and DISCARD characters. See Other Special.
--- Macro: tcflag_t *NOFLSH*
Normally, the INTR, QUIT, and SUSP characters cause input and output queues for the terminal to be cleared. If this bit is set, the queues are not cleared.
--- Macro: tcflag_t *TOSTOP*
If this bit is set and the system supports job control, then SIGTTOU signals are generated by background processes that attempt to write to the terminal. See Access to the Terminal.
The following bits are BSD extensions; they exist only in BSD systems and the GNU system. --- Macro: tcflag_t *ALTWERASE*
This bit determines how far the WERASE character should erase. The WERASE character erases back to the beginning of a word; the question is, where do words begin?

If this bit is clear, then the beginning of a word is a nonwhitespace character following a whitespace character. If the bit is set, then the beginning of a word is an alphanumeric character or underscore following a character which is none of those.

See Editing Characters, for more information about the WERASE character. --- Macro: tcflag_t *FLUSHO*
This is the bit that toggles when the user types the DISCARD character. While this bit is set, all output is discarded. See Other Special.
--- Macro: tcflag_t *NOKERNINFO*
Setting this bit disables handling of the STATUS character. See Other Special.
--- Macro: tcflag_t *PENDIN*
If this bit is set, it indicates that there is a line of input that needs to be reprinted. Typing the REPRINT character sets this bit; the bit remains set until reprinting is finished. See Editing Characters. \\ \\

h4. 17.4.10 Noncanonical Input

In noncanonical input mode, the special editing characters such as ERASE and KILL are ignored. The system facilities for the user to edit input are disabled in noncanonical mode, so that all input characters (unless they are special for signal or flow-control purposes) are passed to the application program exactly as typed. It is up to the application program to give the user ways to edit the input, if appropriate.

Noncanonical mode offers special parameters called MIN and TIME for controlling whether and how long to wait for input to be available. You can even use them to avoid ever waiting---to return immediately with whatever input is available, or with no input.

The MIN and TIME are stored in elements of the c_cc array, which is a member of the struct termios structure. Each element of this array has a particular role, and each element has a symbolic constant that stands for the index of that element. VMIN and VMAX are the names for the indices in the array of the MIN and TIME slots. --- Macro: int *VMIN*
This is the subscript for the MIN slot in the c_cc array. Thus, termios.c_cc[VMIN] is the value itself.

The MIN slot is only meaningful in noncanonical input mode; it specifies the minimum number of bytes that must be available in the input queue in order for read to return. --- Macro: int *VTIME*
This is the subscript for the TIME slot in the c_cc array. Thus, termios.c_cc[VTIME] is the value itself.

The TIME slot is only meaningful in noncanonical input mode; it specifies how long to wait for input before returning, in units of 0.1 seconds.
The MIN and TIME values interact to determine the criterion for when read should return; their precise meanings depend on which of them are nonzero. There are four possible cases:
* Both TIME and MIN are nonzero.

In this case, TIME specifies how long to wait after each input character to see if more input arrives. After the first character received, read keeps waiting until either MIN bytes have arrived in all, or TIME elapses with no further input.

read always blocks until the first character arrives, even if TIME elapses first. read can return more than MIN characters if more than MIN happen to be in the queue. Both MIN and TIME are zero. In this case, read always returns immediately with as many characters as are available in the queue, up to the number requested. If no input is immediately available, read returns a value of zero.
 MIN is zero but TIME has a nonzero value. In this case, read waits for time TIME for input to become available; the availability of a single byte is enough to satisfy the read request and cause read to return. When it returns, it returns as many characters as are available, up to the number requested. If no input is available before the timer expires, read returns a value of zero.
 TIME is zero but MIN has a nonzero value. In this case, read waits until at least MIN bytes are available in the queue. At that time, read returns as many characters as are available, up to the number requested. read can return more than MIN characters if more than MIN happen to be in the queue. What happens if MIN is 50 and you ask to read just 10 bytes? Normally, read waits until there are 50 bytes in the buffer (or, more generally, the wait condition described above is satisfied), and then reads 10 of them, leaving the other 40 buffered in the operating system for a subsequent call to read.

*Portability note:* On some systems, the MIN and TIME slots are actually the same as the EOF and EOL slots. This causes no serious problem because the MIN and TIME slots are used only in noncanonical input and the EOF and EOL slots are used only in canonical input, but it isn't very clean. The GNU library allocates separate slots for these uses. --- Function: void *cfmakeraw* (struct termios *termios-p)
This function provides an easy way to set up *termios-p for what has traditionally been called "raw mode" in BSD. This uses noncanonical input, and turns off most processing to give an unmodified channel to the terminal.

It does exactly this:            termios-p->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
                                          |INLCR|IGNCR|ICRNL|IXON);
            termios-p->c_oflag &= ~OPOST;
            termios-p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
            termios-p->c_cflag &= ~(CSIZE|PARENB);
            termios-p->c_cflag |= CS8;
      
 
 ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114497</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179969</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
* *[Termios Dev Info]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** Minicom can be used - need to terminate the \*0100SN request with <ctrl-j>
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.&nbsp;&nbsp;&nbsp; Tom the eng tech made a breakout cable with the correct 2x5 2mm connectors.&nbsp;&nbsp; Verified commands in the protocol analyzer
** With the fix in place in readNChars (timeouts and bytecnt are chars not ints), have verified parosci is getting a response to serial number request.
*** &nbsp;&nbsp;Fixed a bug in sscanf which was incorrectly parsing
*** Added retry to fix issue when parosci is left streaming pressure data, the serial number is not read correctly.
*** Fixed math overflow on timeout calculations in SerialDevice.cc (framework).&nbsp;&nbsp; Long / Int changed to Long Long.&nbsp;&nbsp;&nbsp; This fixed some of the timeout problems, however confirm still bails out.
*** A problem in framework 'confirm' API persisted even with fix for timeout overflow.&nbsp;&nbsp;&nbsp; Since time is getting short - capped off investigation of root cause, and wrote readResponse and readAChar routines in framework which fixes the timeout problem (layers of timeout in readUntil, readBytes, etc.)
*** Parosci ran for an hour - data integrity is questionable as pressure data is ranging from negative to positive.
*** &nbsp;Protocol Notes:
**** | tx | rx | pre-conditions | post-conditions |
| \*SN0100<0x0d><0x0a> | \*SN0001=87761<0x0d><0x0a>&nbsp; | 1) powered up \\
2) streamnig pressure data from previous run | waiting for a command |
| \*0100EW*0100MD=0<0x0d><0x0a> | \*0001MD=0<0x0d><0x0a> | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

** Status (+)
*** Passes basic functional test with exceptions (data processing and serail timeout).&nbsp;&nbsp; See attachment for test results.&nbsp;
*** Fixed bug in baud set
*** Fixed bug in read serial number (sscanf and retries)
*** Fixed timeout bug by replacing 'confirm' in init with readResponse.&nbsp;&nbsp; Later fixed bug in confirm by creating readAChar which uses termios instead of ioctl.&nbsp;&nbsp; Did not back&nbsp;out readResponse changes (they work).
*** Soak test runs overnight.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
**** There are some ERRORs due&nbsp;timeout or bad data (dropped bytes?)&nbsp;in the test results, and the driver recovers.&nbsp;
**** Note: Data does not look&nbsp;right (log4cxx = INFO), however the data read from the instrument looks good - suspect something in the signal processing is not properly setup.&nbsp;
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
**** 15:52:07.487 INFO \[TeledyneDvl\] PDO format,&nbsp; numDataTypes = 7
**** 15:52:07.488 DEBUG \[TeledyneDvl\]&nbsp; dvlPingTime = 82325.450000
**** 15:52:07.489 DEBUG \[TeledyneDvl\]&nbsp; dvlTemp = 23.760000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlPitch = 653.150000
**** 15:52:07.490 DEBUG \[TeledyneDvl\]&nbsp; dvlRoll = 1.640000
**** 15:52:07.491 DEBUG \[TeledyneDvl\]&nbsp; dvlHeading = 309.660000
**** 15:52:09.390 DEBUG \[TeledyneDvl\]&nbsp; Dvl::readRecord() - checksum = 29778
**** 15:52:09.392 WARN \[TeledyneDvl\] Doppler System WARNING : ensemble checksum incorrect Computed checksum = 29778 DVL checksum&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 32628
**** 15:52:09.397 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
15:52:10.496 INFO \[TeledyneDvl\] header is 7FDB0200
**** 15:52:10.498 INFO \[TeledyneDvl\]&nbsp; Dvl record header not found.&nbsp; Resynchronize.
**** 15:52:11.643 ERROR \[AuvService\] Buffer Full
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
\\
\\
\\
\\
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114499</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179965</id>
<property name="body"><![CDATA[\\

When VTIME is greater than 0 it enables the timer, but
there are two different types of timers, depending on
whether VMIN is 0 or not.

h5. If VTIME and VMIN are both greater than 0:

\\
* The timer is an 'inter-byte timer' activated when the _first byte is received_.
* It is then reset whenever a new&nbsp;byte is received, and will timeout (count in tenths of seconds with a max of 25.5 sec) if there is the specified time without another byte being received.
* A call to read() will block until at least 1 byte is received, unless a signal interrupts.
* If data is buffered when read() is called, and the number of bytes is equal or greater than VMIN, the read() call will return immediately with existing data.

h5. When VTIME is greater than 0 and VMIN is 0:

\\
* The timer is a \*read\* *_timer_\* \_activated\__as{_}{_}soon{_}{_}as{_}{_}the{_}{_}read_() \_function\_ \_is\_ \_called_.
* If no byte is received in the specified time, there will be a timeout and the read() call will return 0, with no data.
* Since VMIN is 0, the receipt of a single byte will satisfy the read() call, and cause a return. If there is data in the buffer when read() is called, read() will immediately return with existing data.

h5. If VTIME is 0, the timer is disabled. If VMIN is also 0:

\\
* A&nbsp;call to read() will \_return\_ \_immediately_.
* The minimum of either the number of bytes requested or the number of bytes currently available will be returned.
* If no characters are available, read() returns 0, with no data.

h5. If VTIME is 0 and VMIN is greater than 0:

\\
* The timer is disabled, but a call to read() will \_block__indefinitely\_ until either data is received or a signal interrupts.
* When VMIN bytes have been received, the read() function will return.
* If there is data in the buffer when read() is called, and the number of bytes is equal to or greater than VMIN, the read() call will return immediately with existing data.

\\
Okay, now given that you want to read one or more
characters and have a timeout, the question is do you
actually want an inter-byte timer, or a read timer? If
you set both VTIME and VMIN to 1, for example, you'll
have an inter-byte timer... and calls to read() can
\*block\* \*forever\* if no data at all is received.

If you want a read timer, set VMIN to 0 and VTIME to 1,
and then the call to read() will always return, with or
without data. If there is no data available, read()
will return 0, if data is available it will return the
number of data bytes retrieved.

All of the above assumes that the O_NONBLOCK attribute
is not set. And for any of the above if the call to
read() is interrupted by a signal, read() will return
\-1, and the error code will be EINTR. (More discussion
about this below.)

&nbsp;---------------------------------------------------\-

When the *ICANON* bit is turned off, a "raw mode" is selected which changes the interpretation of these values. These are used to guide the line-driver code in its decision on allowing the *read()* system call to return. We'll try to explain them in some detail. Function-key processingOn a regular keyboard, most keys send just one byte each, but almost all keyboards have special keys that send asequence of charactersat a time. Examples (from an ANSI keyboard)ESC \[ A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; up arrowESC \[ 5 \~&nbsp;&nbsp;&nbsp; page upESC \[ 18 \~&nbsp;&nbsp; F7and so on.From a strictly "string recognition" point of view, it's easy enough to translate "ESC \[ A" into "up arrow" inside a program, but how does it tell the difference between "user typed up-arrow" and "user typed the ESCAPE key"? The difference istiming. If the ESCAPE isimmediatelyfollowed by the rest of the expected sequence, then it's a function key: otherwise it's just a plain ESCAPE.Efficient highspeed inputWhen a communications program (such as fax software) is reading from a modem, the data stream is arriving at a relatively high rate. Doing single-character-at-a-time input would be extremely inefficient, given that eachread()involves a system call and an operating system context switch. We'd instead like to read in larger chunk if it's available for us, but still know how to recognize timeouts (which usually indicate error conditions).Capturing occasional, low-volume dataWhen writing software that monitored a temperature sensor via a serial line, we expected to receive a short (10-20 bytes) message every second. This message arrived as a single burst, and once the first character of the message was received, weknewthat the others were right behind it and would be completely received in about 100 milliseconds.The message format did not have strong delimiters, so if we used a naïve read of so many bytes, we'd run the risk of reading an entire message but blocking until a few more bytesof the next messagewere read to fill our request. This could lead to getting "out of sync" with the sensor.By settingVMIN/VTIMEproperly, we were able to insure that that we could efficiently capture all the data sent in one burst without risk of inter-message overlap.We'll note that some of these timeout issues can be partly addressed by the use of signals and alarms, but this is really a substandard solution: signals and I/O are hard to get right (especially in a portable manner), and we very strongly prefer using the features of the line-discipline code as they were intended. Signals suck.
\\

h5. When does +read()+ return?

The *termios* settings are actually handled in the kernel, and the ones we're interested in are in the _line discipline_ code. This sits above the "device driver", and this is consistent with our applying termios to both serial and network I/O (which obviously use different underlying hardware).

All of the *VMIN* and *VTIME* areas involve one question: _When does the line driver allow_ *{_}read()_* _to return?_
With a "regular file", the operating system returns from the *read()* system call when either the user buffer is full, or when the end of file has been reached - this decision is easy and automatic.

But when the driver is reading from a terminal line, the "Are we done?" question can be asked over and over for each character that arrives. This question is resolved by setting *VMIN*/*VTIME*.

Using our temperature-sensor example, we'll list the requirements that inform our design:
* We normally read up to 20 bytes as a "message"
* Individual messages have their bytes all sent together
* No background processing required; while waiting for input, we're happy to block indefinitely waiting for something to happen

The last requirement means that we have no _overall_ timeout, but we do have an _intercharacter_ timeout. This is the key functionality provided by the line driver. Let's be specific.

When waiting for input, the driver returns when: VTIMEtenths of a second elapsesbetweenbytesAn internal timer is started when a character arrives, and it counts up in tenths of a second units. It's reset whenever new data arrives, so rapidly-arriving data never gives the intercharacter timer a chance to count very high.It's only after thelastcharacter of a burst --- when the line is quiet --- that the timer really gets counting. When it reachesVTIMEtenths, the user's request has been satisfied and theread()returns.This provides exactly the behavior we want when dealing with bursty data: collect data while it's arriving rapidly, but when it calms down, give us what you got.VMINcharacters have been received, with no more data availableAt first this appears duplicative to thenbytesparameter to theread()system call, but it's not quite the same thing.The serial driver maintains an input queue of data received but not transferred to the user --- clearly data can arrive even when we're not asking for it --- and this is always first copied to the user's buffer on aread()without having to wait for anything.But if we do end up blocking for I/O (because the kernel's input queue is empty), thenVMINkicks in: When that many bytes have been received, theread()request returns that data. In this respect we can think of thenbytesparameter as being the amount of data wehopeto get, but we'll settle forVMIN.The user's requested number of bytes has been satisfiedThis rule trumps all the others: there is no circumstance where the system will providemoredata than was actually asked for by the user. If the user asks for (say) ten bytes in theread()system call, and that much data is already waiting in the kernel's input queue, then it's returned to the caller immediately and without havingVMINandVTIMEparticipate in any way.These are certainly confusing to one who is new to *termios*, but it's not really poorly defined Instead, they solve problems that are not obvious to the newcomer. It's only when one is actually dealing with terminal I/O and running into issues of either performance or timing that one really must dig in.

h5. &nbsp;&nbsp;


h5. VMIN and VTIME defined

*VMIN* is a character count ranging from 0 to 255 characters, and *VTIME* is time measured in 0.1 second intervals, (0 to 25.5 seconds). The value of "zero" is special to both of these parameters, and this suggests four combinations that we'll discuss below. In every case, the question is when a *read()* system call is satisfied, and this is our prototype call: int n = read(fd, buffer, nbytes);
Keep in mind that the tty driver maintains an input queue of bytes already read from the serial line and not passed to the user, so not every *read()* call waits for actual I/O - the read may very well be satisfied directly from the input queue. VMIN = 0 and VTIME = 0This is a completely non-blocking read - the call is satisfied immediately directly from the driver's input queue. If data are available, it's transferred to the caller's buffer up to nbytes and returned. Otherwise zero is immediately returned to indicate "no data". We'll note that this is "polling" of the serial port, and it's almost always a bad idea. If done repeatedly, it can consume enormous amounts of processor time and is highly inefficient. Don't use this mode unless you really, really know what you're doing.VMIN = 0 and VTIME > 0This is a pure timed read. If data are available in the input queue, it's transferred to the caller's buffer up to a maximum of nbytes, and returned immediately to the caller. Otherwise the driver blocks until data arrives, or when VTIME tenths expire from the start of the call. If the timer expires without data, zero is returned. A single byte is sufficient to satisfy this read call, but if more is available in the input queue, it's returned to the caller. Note that this is anoveralltimer, not anintercharacterone.VMIN > 0 and VTIME > 0Aread()is satisfied when either VMIN characters have been transferred to the caller's buffer, or when VTIME tenths expire between characters. Since this timer is not started until the first character arrives, this call can block indefinitely if the serial line is idle. This is the most common mode of operation, and we consider VTIME to be anintercharactertimeout, not anoverallone. This call should never return zero bytes read.VMIN > 0 and VTIME = 0This is a counted read that is satisfied only when at least VMIN characters have been transferred to the caller's buffer - there is no timing component involved. This read can be satisfied from the driver's input queue (where the call could return immediately), or by waiting for new data to arrive: in this respect the call could block indefinitely. We believe that it's undefined behavior if nbytes is less then VMIN.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114495</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830572</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX At Sea Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist-V9.pdf]: Step by step tasks to do when on board the support ship prior to deploymentspan.jajahWrapper { font-size:1em; color:#B11196; text-decoration:underline; } a.jajahLink { color:#000000; text-decoration:none; } span.jajahInLink:hover { background-color:#B11196; }]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797804</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830571</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf] A practical and not so complete tutorial on how to use TREX]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797803</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830574</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREXspan.jajahWrapper { font-size:1em; color:#B11196; text-decoration:underline; } a.jajahLink { color:#000000; text-decoration:none; } span.jajahInLink:hover { background-color:#B11196; }]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797806</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830573</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX At Sea Checklist|https://oceana.mbari.org/confluence/download/attachments//TREX-Checklist-V9.pdf]: Step by step tasks to do when on board the support ship prior to deployments span.jajahWrapper { font-size:1em; color:#B11196; text-decoration:underline; } a.jajahLink { color:#000000; text-decoration:none; } span.jajahInLink:hover { background-color:#B11196; }]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797805</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830577</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX



span.jajahWrapper { font-size:1em; color:#B11196; text-decoration:underline; } a.jajahLink { color:#000000; text-decoration:none; } span.jajahInLink:hover { background-color:#B11196; }]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797809</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830566</id>
<property name="body"><![CDATA[The auv-linux 'nal' utility provides 3 ways to test vehicle-shore Iridium communications:
# nal \-sim: simulated mode, runs CORBA store-and-fwd service but does not actually connect to  a modem
# nal \-9601 \-dev device: connects to a NAL 9601 modem, as the one we have access to on shore
# nal \-dev device: connects to a A3LA modem with large SBDs as the one onboard the vehicle

Note that 'nal' output can be directed to a log file, e.g. to $AUV_LOG_DIR/latest/modem.log - see $AUV_HOME/sampleConfig/log4cxx.cfg

h1. Use the on shore modem (9601)

After Corba has been correctly set you can run the command
{code}
> nal -9601 -dev tcp:iridium:2101 &
{code}
Note port number 2101, which is the "raw" TCP socket port. You can also telnet to it for verifying that you can connect to it and send basics commands like AT; for telnet, specify port 2001.

{code}
> telnet iridium 2001
{code}
The serial number of this modem is 300034012903310

h1. Use the A3LA modem on the vehicle

after having started trex2 you will need to restart the modem from mvc-dmo1
{code}
> $AUV/bin/reset_a3la
{code}
On trex2 you can then start
{code}
> nal -dev /dev/ttyS1 &
{code}
or check if everything is OK through minicom
{code}
> minicom iridum
{code}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797797</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830565</id>
<property name="body"><![CDATA[The auv-linux 'nal' utility provides 3 ways to test vehicle-shore Iridium communications:
# nal \-sim: simulated mode, runs CORBA store-and-fwd service but does not actually connect to  a modem
# nal \-9601 \-dev device: connects to a NAL 9601 modem, as the one we have access to on shore
# nal \-dev device: connects to a A3LA modem with large SBDs as the one onboard the vehicle

Note that 'nal' output can be directed to a log file, e.g. to $AUV_LOG_DIR/latest/modem.log - see $AUV_HOME/sampleConfig/log4cxx.cfg

h1. Use the on shore modem (9601)

After Corba has been correctly set you can run the command
{code}
> nal -9601 -dev tcp:iridium:2001 &
{code}
you can also telnet to it for verifying that you can connect to it and send basics commands like AT
{code}
> telnet iridium 2001
{code}
The serial number of this modem is 300034012903310

h1. Use the A3LA modem on the vehicle

after having started trex2 you will need to restart the modem from mvc-dmo1
{code}
> $AUV/bin/reset_a3la
{code}
On trex2 you can then start
{code}
> nal -dev /dev/ttyS1 &
{code}
or check if everything is OK through minicom
{code}
> minicom iridum
{code}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797796</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830567</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\  !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right version do:
\\
# % *cd* <to the TREX directory>
# % *svn update* (to update the tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797798</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830587</id>
<property name="body"><![CDATA[The auv-linux 'nal' utility provides 3 ways to test vehicle-shore Iridium communications:
# nal \-sim: simulated mode, runs CORBA store-and-fwd service but does not actually connect to  a modem
# nal \-9601 \-dev device: connects to a NAL 9601 modem, as the one we have access to on shore
# nal \-dev device: connects to a A3LA modem with large SBDs as the one onboard the vehicle

Note that 'nal' output can be directed to a log file, e.g. to $AUV_LOG_DIR/latest/modem.log - see $AUV_HOME/sampleConfig/log4cxx.cfg

h1. Use the on-shore modem (9601)

After Corba has been correctly set you can run the command
{code}
> nal -9601 -dev tcp:iridium:2101 &
{code}
Note port number 2101, which is the "raw" TCP socket port. You can also telnet to it for verifying that you can connect to it and send basics commands like AT; for telnet, specify port 2001.
{code}
> telnet iridium 2001
{code}
The serial number of this modem is 300034012903310

h1. Use the A3LA modem on the vehicle

after having started trex2 you will need to restart the modem from mvc-dmo1
{code}
> $AUV/bin/reset_a3la
{code}
On trex2 you can then start
{code}
> nal -dev /dev/ttyS1 &
{code}
or check if everything is OK through minicom
{code}
> minicom iridum
{code}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797819</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830588</id>
<property name="body"><![CDATA[The auv-linux 'nal' utility provides 3 ways to test vehicle-shore Iridium communications:
# nal \-sim: simulated mode, runs CORBA store-and-fwd service but does not actually connect to  a modem
# nal \-9601 \-dev device: connects to a NAL 9601 modem, as the one we have access to on shore
# nal \-dev device: connects to a A3LA modem with large SBDs as the one onboard the vehicle

Note that 'nal' output can be directed to a log file, e.g. to $AUV_LOG_DIR/latest/modem.log - see $AUV_HOME/sampleConfig/log4cxx.cfg

h1. Use the on-shore modem (9601)

After Corba has been correctly set you can run the command
{code}
> nal -9601 -dev tcp:iridium:2101 &
{code}
Note port number 2101, which is the "raw" TCP socket port. You can also telnet to it for verifying that you can connect to it and send basics commands like AT; for telnet, specify port 2001.
{code}
> telnet iridium 2001
{code}
The serial number of this modem is

h1. Use the A3LA modem on the vehicle

after having started trex2 you will need to restart the modem from mvc-dmo1
{code}
mvc-dmo1> $AUV/bin/reset_a3la
{code}
On trex2 you can then start
{code}
> nal -dev /dev/ttyS1 &
{code}
or check if everything is OK through minicom
{code}
> minicom iridum
{code}span.jajahWrapper { font-size:1em; color:#B11196; text-decoration:underline; } a.jajahLink { color:#000000; text-decoration:none; } span.jajahInLink:hover { background-color:#B11196; }]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797820</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830594</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right version do:
\\
# % *cd* <to the TREX directory>
# % *svn update* (to update the tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install.amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# Make sure that the state publisher is visible to the client. In the *$AUV_CONFIG_DIR* make sure in _statePublisher.cfg_
#* the IP address of the correct client is uncommented with *AMC_IP*
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# &nbsp;
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797826</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830579</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797811</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">16023601</id>
<property name="body"><![CDATA[This page will refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09
* [TREX Volume Survey Operations] procedure for operations group to start the TREX volume survey
* [Autonomy Deployment Log]

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [Monte-Carlo Testing guide|https://oceana.mbari.org/confluence/download/attachments/8912901/Zeyn-MBARI-Report.pdf]: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect
* [Autonomy Plans for 2010 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans10.pdf]
* [Autonomy Plans for 2011 for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/Autonomy-plans11.pdf]
* [Decision Support for CANON|https://oceana.mbari.org/confluence/download/attachments/8912901/CANON.pdf]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">15990834</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830580</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* TREX Checklist: At sea deployment proceedure on the CTD vehiclespan.jajahWrapper { font-size:1em; color:#B11196; text-decoration:underline; } a.jajahLink { color:#000000; text-decoration:none; } span.jajahInLink:hover { background-color:#B11196; }]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797812</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830581</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist-V9.pdf|T-REX Checklist]: At sea deployment proceedure on the CTD vehiclespan.jajahWrapper
{ font-size:1em; color:#B11196; text-decoration:underline; }
a.jajahLink
{ color:#; text-decoration:none; }
span.jajahInLink:hover
{ background-color:#B11196; }span.jajahWrapper { font-size:1em; color:#B11196; text-decoration:underline; } a.jajahLink { color:#000000; text-decoration:none; } span.jajahInLink:hover { background-color:#B11196; }]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797813</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830557</id>
<property name="body"><![CDATA[The 3 ways to test the modem are the following
# fake modem : simstorefwd This program provides CORBA service but do not actually connect to  a modem 
# using a 9601 modem : nal9601 This allows to connect to a modem 9601 as the one we have access to on shore
# using a A3LA modem : nal This allows to connect to a A3LA modem with large SBDs as the one onboard the vehicle

h1. Use the on shore modem (9601)

After Corba has been correctly set you can run the command
{code}
> nal9601 -dev tcp:iridium:2001 &
{code}
you can also telnet to it for verifying that you can connect to it and send basics commands like AT
{code}
> telnet iridium 2001
{code}
The serial number of this modem is 300034012903310

h1. Use the modem on the vehicle

after having started trex2 you will need to restart the modem from mvc-dmo1
{code}
> $AUV/bin/reset_a3la
{code}

On trex2 you can then start 
{code}
> nal -dev /dev/ttyS1 &
{code}

or check if everything is OK through minicom
{code}
> minicom iridum
{code}

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797788</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830559</id>
<property name="body"><![CDATA[The auv-linux 'nal' utility provides 3 ways to test vehicle-shore Iridium communications:

# nal \-sim: simulated mode, runs CORBA store-and-fwd service but does not actually connect to  a modem
# nal \-9601 \-dev device: connects to a NAL 9601 modem, as the one we have access to on shore
# nal \-dev device: connects to a A3LA modem with large SBDs as the one onboard the vehicle

h1. Use the on shore modem (9601)

After Corba has been correctly set you can run the command
{code}
> nal -9601 -dev tcp:iridium:2001 &
{code}
you can also telnet to it for verifying that you can connect to it and send basics commands like AT
{code}
> telnet iridium 2001
{code}
The serial number of this modem is 300034012903310

h1. Use the A3LA modem on the vehicle

after having started trex2 you will need to restart the modem from mvc-dmo1
{code}
> $AUV/bin/reset_a3la
{code}
On trex2 you can then start
{code}
> nal -dev /dev/ttyS1 &
{code}
or check if everything is OK through minicom
{code}
> minicom iridum
{code}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797790</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">622639</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development
[Linux Port]
[Source Code]

h2. Meeting Minutes
[2007-03-19 Autonomy project|Minutes from 2007-03-19--Status meeting on AUV Deliberative Autonomy project]
[2007-03-05 Autonomy project|Minutes from 2007-03-05--Status meeting on AUV Deliberative Autonomy project]
[2007-02-20 Autonomy project|Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]


]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">589872</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830511</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right version do:
\\
# % *cd* <to the TREX directory>
# % *svn update* (to update the tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword in vcs.cfg, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797742</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830507</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\  !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right version do:
\\
# % *cd* <to the TREX directory>
# % *svn update* (to update the tree)&nbsp;&nbsp;
# % *. devconfig* (to source all the env. variables needed)
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *jam*
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797738</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830509</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\ !Autonomy-Machines.jpg|width=397,height=464!\\
&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right version do:
\\
# % *cd* <to the TREX directory>
# % *svn update* (to update the tree)&nbsp;&nbsp;
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *. devConfig* (to source all the env. variables needed)
# % *jam*
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack (ex.&nbsp;trex3)&nbsp;and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797740</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179795</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
*&nbsp;*
\\

h4. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.&nbsp;&nbsp;
\\

{dynamictasklist:NavigationDrivers}

h4. \\
*Driver porting and validation*

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. Navigation drivers (first priority)

* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** &nbsp;
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

{dynamictasklist:ScienceDrivers}

h4. Science drivers

* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114320</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830474</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\  !Autonomy-Machines.jpg|align=left,width=32,height=32!\\

&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797705</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">622608</id>
<property name="body"><![CDATA[Present: *Rich, Rob, Frederic, Conor and Kanna*

Rich and Conor have managed to work out substantial detail in the boot up handshake (see image below) on startup of AMC and VCS. Hardware for AMC stack operations and tests is quite delayed.&nbsp;
* Behavior addition/deletion working fine; this follows some design revisions based on transitions between behaviors. The AMC now sends across a number of behaviors based on its lookahead window.
** Consequently an "arbitrary" length of behavior instantiated on the stack in VCS defined by this lookahead
* The implication to startup are that the AMC now has an initialization sequence
** AMC will initialize the VCS once its all its reactors are fired up, especially the critical adaptor which communicates with the VCS.
** Then the AMC will wait till it gets an init msg. from AMC Agent on the VCS side (see image) with a STARTED:0 (id ==0) coming from the VCS
** An init.cfg startup file on the AMC side is equivalent to what the LC uses currently and will have* MissionTimer* DepthEnvelope* SetPoint:ID=0* Each behavior invocation comes with a unique and specific ID which is common to both AMC and VCS. This allows the ID to be used as a "handle" to manipulate the behavior running (or dormant) on the stack on the VCS side. In addition, it provides a unique identifier to the AMC when the state of the behavior changes on the VCS side. So when the Layered Control starts a behavior, it sends back a STARTED:ID message back to the AMC with this unique ID.
* One issue to resolve is read/write timing dealing with how quickly the VCS and AMC adaptors are able to send/receive messages. Conor and Rob are looking at timing issues on both ends.
* Conor will be building up the infrastructure for regression tests of the AMC allowing predefined mission scripts to be run with the simulator* We are now quite delayed with respect to getting an AMC stack up and running; the initial target date of end of Feb has slipped substantially and concerns were expressed about the implication of this slip to getting the actual board on the AUV itself. Kanna will be coordinating with Hans to work out what is doable realistically for the latter.
\- ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">589840</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">622609</id>
<property name="body"><![CDATA[h1. AUV Wiki

h2. Development
[Linux Port]
[Source Code]

h2. Meeting Minutes
[2007-03-05 Autonomy project|Minutes from 2007-03-05--Status meeting on AUV Deliberative Autonomy project]
[2007-02-20 Autonomy project|Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]


]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">589841</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830472</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\  !Autonomy-Machines.jpg|align=left,width=32,height=32!\\

&nbsp;Fig. 1


&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the oriiginal QNX code. ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797703</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830470</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.
\\  !Autonomy-Machines.jpg|align=left,width=32,height=32!]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797701</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830482</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\  !Autonomy-Machines.jpg|align=left,width=32,height=32!\\

&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test. Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission.
\\

Assuming you have the right version do:
\\
# % *cd* <to the TREX directory>
# % *svn update* (to update the tree)&nbsp;&nbsp;
# % *. devconfig* (to source all the env. variables needed)
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *jam*
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# &nbsp;\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797713</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830480</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\  !Autonomy-Machines.jpg|align=left,width=32,height=32!\\

&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test. Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission.
\\

Assuming you have the right version do:
\\
# % *cd* <to the TREX directory>
# % *svn update* (to update the tree)&nbsp;&nbsp;
# % *. devconfig* (to source all the env. variables needed)
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *jam*
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# &nbsp;

&nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797711</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830478</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\  !Autonomy-Machines.jpg|align=left,width=32,height=32!\\

&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test. Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission.
\\

Assuming you have the right version do:\\
# % cd <to the TREX directory>
# % svn update (to update the tree)&nbsp;&nbsp;
# % . devconfig (to source all the env. variables needed)
# % export ROOT_DIR=`pwd` (if the directory is not the default such as for the Front following hierarchy)
# % jam
# % cd ctd2007
# % jam samp sim batcher amc
# &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797709</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830476</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\  !Autonomy-Machines.jpg|align=left,width=32,height=32!\\

&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test. Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. \\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797707</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830490</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
*  [TREX - installation] a quick guide on how to install and use TREX 
*  [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.

Attachments :
*  [^TREX tuto.pdf] A practical and not so complete tutorial on how to use TREX]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797721</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830488</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\  !Autonomy-Machines.jpg|align=left,width=32,height=32!\\

&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test. Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission.
\\

Assuming you have the right version do:
\\
# % *cd* <to the TREX directory>
# % *svn update* (to update the tree)&nbsp;&nbsp;
# % *. devconfig* (to source all the env. variables needed)
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *jam*
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log* ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797719</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10944642</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* Monte-Carlo Testing guide: A short write up by Zeyn Saigol (Summer '08) on how MC works
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10911878</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830486</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\  !Autonomy-Machines.jpg|align=left,width=32,height=32!\\

&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test. Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission.
\\

Assuming you have the right version do:
\\
# % *cd* <to the TREX directory>
# % *svn update* (to update the tree)&nbsp;&nbsp;
# % *. devconfig* (to source all the env. variables needed)
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *jam*
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ ]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797717</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10944641</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [TREX state|https://oceana.mbari.org/confluence/download/attachments/8912901/T-REX-state.pdf]: State of T-REX tasks as of October 2009
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10911877</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830484</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\  !Autonomy-Machines.jpg|align=left,width=32,height=32!\\

&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test. Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission.
\\

Assuming you have the right version do:
\\
# % *cd* <to the TREX directory>
# % *svn update* (to update the tree)&nbsp;&nbsp;
# % *. devconfig* (to source all the env. variables needed)
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *jam*
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# % *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# % *. configSrc* (to set up the environment)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797715</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10944639</id>
<property name="body"><![CDATA[This page will  refer to all the documentation and other stuff related to the Autonomy discussion and more especially the TREX environment.

Current pages available :
* [TREX - installation] a quick guide on how to install and use TREX
* [TREX|https://oceana.mbari.org/confluence/display/AUV/T-REX+Autonomy+testing+process] testing the set of steps to take to test T-REX
* [Example of A TREX reactor] A small and rough illustration on what is needed to implemetn a new TREX reactor type.
* [TREX Task List|https://oceana.mbari.org/confluence/display/AUV/Task+List+July+2009] Task list July 09 

Attachments :
* [^TREX tuto.pdf]: A practical and not so complete tutorial on how to use TREX
* [TREX Checklist|https://oceana.mbari.org/confluence/download/attachments/8912901/TREX-Checklist.doc]: Checklist for at-sea deployment procedures on CTD AUV
* [Front following|https://oceana.mbari.org/confluence/download/attachments/8912901/Front-Following-transect-3-09.doc] mission transect]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10911875</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830495</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\  !Autonomy-Machines.jpg!\\ &nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:

Assuming you have the right version do:
\\
# % *cd* <to the TREX directory>
# % *svn update* (to update the tree)&nbsp;&nbsp;
# % *. devconfig* (to source all the env. variables needed)
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *jam*
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797726</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830493</id>
<property name="body"><![CDATA[How to test T-REX
\\

First see our configuration of hosts that we use for testing shore-side and at sea below.

\\  !Autonomy-Machines.jpg|align=left,width=32,height=32!\\

&nbsp;Fig. 1

&nbsp;There are a 4 levels of testing that we use.
# *{+}P-Sim{+}*: The Pseudo-Sim uses a crude dynamics model of the vehicle within T-REX and provides a first cut on testing T-REX domain models. This allows us to prune egregious&nbsp; modeling errors right away, is fast and works on Mac OS as well as RHEL.
# *{+}F-Sim{+}*: is the newly developed fastSim facility which runs only on Linux with the new AUV-Linux code base at approx. 160X&nbsp; real-time. The objective with this sim is to get a first cut on how accurate the T-REX models are w.r.t actual vehicle dynamics encoded in the simulator ported over from the original QNX code. To date, the best way to run this is by using the 'dorado1' account on threadfish.
# *{+}Q-Sim{+}*: is the real-time QNX version of the simulator which provides an accurate version of T-REX behavior when at sea. Like the F-Sim (derived from the auv sim code), there are also a few parameters one can tweak to mimic environmental changes that T-REX can respond to (e.g sub-surface currents and location drop offs during deployment). The modus-operandi is to use an EPIC stack (trex1/trex3) and mimic the client/server approach used by T-REX at sea with a QNX desktop (saumon/foobar).
# *{+}V-Sim{+}*: is a new appraoch suggested by Hans to get as close to the vehicle, run the drivers without actually using the physical science instruments. This involves setting up the $AUV_CONFIG_DIR/devices.cfg file with simulated instrument drivers but done +on the CTD vehicle+ with the magnet taken out to simulate actual conditions.

In addition, we use two other approaches to shore side testing which have tested T-REX models sufficiently effectively to point to bugs. They are
* *{+}Monte-Carlo{+}* methods: which takes a number of variables and makes repeated runs of T-REX using a uniform sampling distribution for the values of these targeted parameters and run either on Mac OS or RHEL. MC often helps to shake out how robust T-REX is w.r.t environmental variability; however passing all MC tests does not imply that T-REX is fully covered when it comes to surprises in the real-world.
* *{+}Stepped Sim{+}*: which allows debugging by stepping thru T-REX similar to what gdb does functionally. This is used especially when there are issues with the T-REX or EUROPA (planner) core.

To build and test T-REX it is best to use an existing version of the source tree from SVN. The reason is that there are a number of branches which one has to be aware of to ensure that the right one is indeed being used to test.

&nbsp;Currently, dorado1@threadfish:~/coding/ has two versions; the HEAD and code for the Front following mission. To test Q-Sim one should follow the steps below:


Assuming you have the right version do:
\\
# % *cd* <to the TREX directory>
# % *svn update* (to update the tree)&nbsp;&nbsp;
# % *. devconfig* (to source all the env. variables needed)
# % *export ROOT_DIR=`pwd`* (if the directory is not the default such as for the Front following hierarchy)
# % *jam*
# % *cd ctd2007* (which contains all the model and configuration files for T-REX)
# % *jam samp sim batcher amc* (to ensure you generate the necessary binaries; to run on Q-Sim you will need to generate only the amc binary)
# % *cd ../deploy/*
# Ensure that the T-REX binaries are targeted to run on the right shore-side stack you want (trex1 or trex3). The default is trex1; to change do
## *export AMC_TARGET=dorado1@trex3*
# % *./deploy.exec* (this and the following command will ask for a passwd to copy over a gzipped tarball)
# % *./deploy.missions*
# Now move to the target stack and log in as 'dorado1'
# % *cd amc*
# % *. config.amc* (to set up the environment)
# % *./install amc all* (you can also selectively install one of the above two tar balls)
# % *cd missions*
# This step requires some apriori knowledge of which mission is being run because of the way configuration files alter the way T-REX can be put together for the mission. There are two files that are at issue: _amc.cfg_ which indicates how T-REX is put together and _vcs.cfg_ which indicates which server host is being connected to where _VcsServer_ is being run.
# In this case, since we're dealing with testing, either _foobar_ or _saumon_ are the likely targets. Therefore in the 'remoteName' keyword, change the name of the server to one of the latter.
# To alter the amc.cfg file, simply copy over the 'right' cfg file on top. For the Front following mission, since we need a downlink reactor within T-REX you will need _amc.vcs.dl.cfg_. so
#* % *cp amc.vcs.dl.cfg amc.cfg*
# You're set with configuring the T-REX client. So move over to the QNX desktop to fire up the VcsServer. Assuming here foobar
#* *telnet foobar* (use the 'ansi' terminal setting)
# $ *cd auv_autonomy* (since our version of the QNX layered control requires VcsServer and Statepublisher, this copy is different from the nominal version that Hans maintains. This version *{_}should be checked with what is being run by Hans on the vehicle ever so often{_}* to ensure we're in sync.)
# $ *. configSrc* (to set up the environment)
# Double check to see that a stray VcsServer from a perious run isn't still running using 'ps'
#* $ *ps \-a*
# Ensure that Mqueue is indeed running. And if not then do
## $ *su root*
## $ *Mqueue&*
# $ *cd $AUV_CONFIG_DIR* (if you want to tweak the virtual environment in simulator.cfg)
## if so, then you can tweak _depth1/depth2/depth3_ and _northCurrent_ and _eastCurrent_ variables
# QNX behaves strangely with large files. Often from a previous run, the VcsServer.log files in $AUV_LOG_DIR, are corrupted. The consequence is that when you try to run VcsServer, it will abort without an explanation. To recover do
## *$ su root*
## *$ df* (to get all the partitions)
## *$ chkfsys* <file partition name> will often fix it.
# $ *cd $AUV/bin*
# $ *./vcsServer \-v \-sim&* (to fire up the vcs server)
#* In most cases you'd want to run the setup for a long time when connection with the QNX terminal is not critical. If so then run the above with a '_nohup_' pre-pended.
# Move back to the T-REX stack to fire up the T-REX client
## *% ../exec/amc_o_rt <Mission Config file> &* (where Mission Config file is mission dependant; e.g for Front following it is front.cfg). Also as above, the _nohup_ can be prepended.&nbsp;
# The above should nominally get T-REX to initiate the socket connection with the server and start doing its thing. To observe, you can
## % *tail \-f ../log/latest/TREX.log*]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797724</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179853</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.&nbsp;&nbsp;
\\

h4. \\


h3. *Driver porting and validation*
\\

h4. Status

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. Navigation drivers (first priority)

*Status at a glance:*
{dynamictasklist:NavigationDrivers}
 
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** &nbsp;
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (-) &nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp; Need to create a 3dmgx1 driver - HT to grab code from QNX, TM to look at it after finishing the other drivers (which ever comes first).
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
**** &nbsp;
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp; Tom O is investigating 4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (-)
*** In progress...&nbsp;&nbsp;
*** The driver is choking trying to read the first record (readNchars is returning 3 bytes - not timing out, but it is not clear why the readNchars is ignoring the rest of the bytes blasting from the dvl.&nbsp;&nbsp;

 

h4. Science drivers

*Status at a glance:*&nbsp;

{dynamictasklist:ScienceDrivers}\\

*Status details:*
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114380</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830438</id>
<property name="body"><![CDATA[h1. AUV Wiki


h2. Development

[Linux Port]
[Source Code]
[AUV Linux - Driver Port and Validation]
[AUV Build and Test Server Setup]\\
[Autonomy]

h2. Meeting Minutes

[2007-03-26 Autonomy project|Minutes from 2007-03-26--Status meeting on AUV Deliberative Autonomy project]
[2007-03-19 Autonomy project|Minutes from 2007-03-19--Status meeting on AUV Deliberative Autonomy project]
[2007-03-05 Autonomy project|Minutes from 2007-03-05--Status meeting on AUV Deliberative Autonomy project]
[2007-02-20 Autonomy project|Minutes from 2007-02-20--Status meeting on AUV Deliberative Autonomy project]
[2007-02-12 Autonomy project|Minutes from 2007-02-12--Status meeting on AUV Deliberative Autonomy project]
[2007-02-02 Autonomy project|2007-02-02 Minutes]

h2. Miscellaneous

[MATLAB Tools]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797669</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179851</id>
<property name="body"><![CDATA[h1. AUV Debian 4.0&nbsp;Linux Install and Setup, auv packages install and build

\\

h4. Links

* [AUV Linux - Driver Port and Validation]

\\
&nbsp;

h4. *To Do List*

* eth1 (wifi)
* config out the audio support
* two serial ports not setup (ttyS12 adn ttyS13)
* startup
** startup omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* Investigate update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp; This is to fix the timing issue found in tailcone test (off by 4msec).
\\

h4. *Issues*

Native development: auv-linux software is not compatible with&nbsp;version 3.1&nbsp;of debian due to gcc/glibc issues.
* Resolution:&nbsp; install latest stable debian release (4.0 etch) as this is closer in compatibility to Fedora Core 6 currently in use by the development team
** Recommendation:&nbsp; install the same linux on workstations as on embedded PC104 (test what you fly, fly what you test).&nbsp;&nbsp; The problem with installing Fedora Core 6 is that it is no longer available for download (7 and 8 are available) and is not currently supported by Red Hat.&nbsp; Fedora is the experimental branch that feeds the product Red Hat Enteprise releases and may not have the level of sustained support to be used long term in the AUV.
* Experiemented with Fedora Core 8&nbsp;installation.&nbsp;&nbsp;&nbsp; auv-linux build failed with a seg fault in doxygen - this likely could be patched, but didn't want to spend the time.
** Which Distro?
*** Debian Pro's
**** Widely used in embedded systems (as well as servers and back-end equipment with strong uptime requirements)
**** Robust, supported, production release avaible
**** Retargettable to other embedded instruction set architectures (ARM, PowerPC, etc.)
**** Debian and it's derivatives are made by and used by hardcore linux developers / experts
*** Debian Con's
**** RedHat and Fedora&nbsp;have a broader user familiarity at MBARI than Debian - 'Debian is different'
**** Debian is not installed on development workstations - time impact to install.&nbsp;&nbsp;&nbsp; (A mitigation option could be to make a VMWare or Xen image of Debian).
*** Fedora Core 6 Pro's
**** Used by&nbsp;auv-linux developers on their workstations&nbsp;
**** Used by T-Rex team on workstations and embedded PC104 processor
**** Familiar to MBARI development engineers
*** Fedora Core 6 Con's
**** Fedora is Red Hat's experimental code stream not intended for production use.&nbsp;&nbsp; Lacks long term support.&nbsp;&nbsp;
**** Fedora Core 6 is NO LONGER AVAILABLE for download
**** Fedora Core 6 is ad hoc updated by developers.&nbsp;&nbsp; An informal poll shows one machine&nbsp;at 2.6.22,&nbsp;and another at&nbsp;2.6.20.&nbsp;&nbsp;&nbsp; Stock FC6 is 2.6.18 (same as Debian 4.0).
*** &nbsp;Recommend selecting an up to date production distro that can have a service life of 2 to 3 years.

h4. Native Development Environment:&nbsp;Debian 4.0 Install and auv-linux software install

* Install Debian 4.0 (etch):
** Warning: 5GB harddisk will run out of space if config'd during debian install&nbsp;for separate /home partition when building linux&nbsp;kernel to config the serial port.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
** Burn DVD with&nbsp;net install and&nbsp;boot&nbsp;PC from DVD
** Hostname:&nbsp;&nbsp;&nbsp;mvc-debian4
** Domain: shore.mbari.org
** Partitioning: Guided - use entire disk.&nbsp;&nbsp;&nbsp;&nbsp;Either "all files in one partion' (or 'separate /home partition).&nbsp;&nbsp; This creates ext3 file system in the partitions.
** root password:&nbsp; dorado1
** users:&nbsp; auv (for development)&nbsp;and dorado1 (for runtime)
** Use network mirror for complete package list (if internet connected)
** Software install: Standard (only)
** Install Grub to the master boot record
** Remove DVD and allow boot from harddisk
** Time: (~45 min depending on harddisk format time)
** After boot, login as root and re-insert Debian 4 r3 net install DVD.
** Run aptitude (as root), browse to 'Not Installed Packages'&nbsp;and select:&nbsp; (15 min)
*** ant - XML build system
*** ant-optional
*** autoconf
*** autogen
*** automake&nbsp;(should already be selected)
*** binutils - GNU assembler, linker and binary utils
*** bison&nbsp; - (fixes error in auv-shared build where lex not found)
*** cccc - c and c+\+ code counter, software metrics tool (optional)
*** curves - cvs console app (optional)
*** cvs
*** doxygen
*** electric-fence - malloc debugger
*** flex - lexical analyzer generator for auv builds (fixes error in auv-shared build where lex not found)
*** g+\+ (4.1 pulls in gcc 4.1)
*** libtool&nbsp;&nbsp;&nbsp; (fixes error in log4cxx build 'libtoolize not found')
*** linux-source-2.6.18
*** make
*** (omniidl and omniorb are tempting - talk to Tom)
*** oprofile - performance profiling tool
*** subversion&nbsp;&nbsp;&nbsp;&nbsp; (for pulling log4cxx from apache)&nbsp;
*** editors (elvis-console for vi with multiple files, qemacs, vim)
*** linux-source (under virtual packages, needed for rebuilding kernel to config the serial drivers)
\\
** Install the following with apt-get&nbsp;(could also&nbsp;install these packages with&nbsp;aptitude):&nbsp; (10 min)
*** \*apt-get install subversion&nbsp;&nbsp;
*** \*apt-get install libtool
*** apt-get install gdb
*** apt-get install openssl
*** apt-get install ssh (secure shell server)
*** apt-get install minicom
*** apt-get install python-all
*** apt-get install python-all-dev&nbsp; (needed for omniORB build)
*** apt-get install lirc setserial
*** \*apt-get install linux-source-2.6.18
*** apt-get install kernel-package libncurses5-dev fakeroot wget build-essential (kernel build and debian package create)
*** apt-get install xutils-dev&nbsp; (auv-shared needs&nbsp;gccmakedep utility)
*** (not needed) apt-get install khexedit (for debug of parosci serial port problems)
\\
** Setup the auv-linux development environment&nbsp;(build and install auv-pkgs (1.5hrs), auv-shared and auv-linux)&nbsp;
*** as 'auv', mkdir /home/auv/prj.&nbsp;&nbsp; cd /home/auv/prj
*** export CVSROOT=':pserver:tm@moonjelly.shore.mbari.org:/home/cvs'
*** cvs login
*** cvs checkout auv-pkgs
*** cvs checkout auv-shared
*** cvs checkout auv-linux
*** cd /home/auv/prj/auv-pkgs
*** source set-auv-env (or ". set-auv-env")
*** edit&nbsp;/home/auv/.bash_profile, add source /home/auv/prj/auv-pkgs/set-auv-env for&nbsp;persistance
*** setup, build and install auv-pkgs
**** su root
**** cd $AUV_PKGS
**** . 1_omniORB.bat
**** . 2_omniNotify.bat
**** . 3_gctpc.bat
**** . 4_apr.bat
**** . 5_apr-util.bat
**** . 6_log4cxx.bat
**** . 7_netcdb.bat
**** . 8_newmat.bat
**** . 9_cppunit.bat
**** . final.bat&nbsp;&nbsp; (changes owner ship of prj directory to 'auv'
*** add auv startup script:&nbsp;&nbsp; /etc/rcS/S80auv-startup.sh
**** \#\!/bin/sh
\# auv startup script
**** &nbsp;
**** \# initialize Posix mqueue infrastructure
mkdir /dev/mqueue
mount \-t mqueue none /dev/mqueue
**** chmod 777 /dev/mqueue
*** Then (as root) update the startup sequence:&nbsp;update-rc.d \-f S80auv-startup.sh start 99 2 3 4 5 .
***** Note to remove: update-rc.d S80auv-startup.sh remove
**** to disable the script - rename S80auv-startup.sh to K80auv-startup.sh.&nbsp;&nbsp;&nbsp;&nbsp; read the README in /etc/rcS.d/README
*** exit back to user 'auv'
*** build auv-shared
**** in auv-shared/utility/Makefile - change&nbsp; LIBPATH to: LIBPATH&nbsp;&nbsp;&nbsp;&nbsp; = $AUV_PKGS/omniORB/build/lib/
**** apt-get install xutils-dev to get gccmakedep
*** build auv-linux
**** edit taskIF Makefile - comment out idlj and javac lines
*** Run supervisor (this creates logs/latest link)
**** from auv-linux/onboard, run
***** supervisor \-proc sampleConfig/simprocess.cfg \-plan sampleConfig/simWaypoint.cfg
***** &nbsp;
** Rebuilding the linux kernel to enable the serial drivers on the Xtreme PC104 serial card (start 3:45
*** Note: Procedure for Xtreme 104 12 port serial card is at [http://www.connecttech.com/ftp/installguides/s_install_EC-LN26.htm&nbsp];
*** logged in as root
*** cp&nbsp;serial.conf /etc&nbsp;
*** cd /usr/src
*** tar jxf linux-source-2.6.18.tar.bz2
*** cd linux-source-2.6.18
*** make clean && make mrproper
*** uname \-r to get /boot/config-'uname \-r' name
*** cp /boot/config-2.6.18-6-686 ./.config&nbsp;&nbsp;&nbsp; (copy the previous kernel config)
*** make menuconfig
**** Go to _Load an Alternate Configuration File_ (page down) and choose _.config_ (which contains the configuration of your current working kernel)
**** Device Drivers&nbsp; \--> Character devices
**** deselect (no \*)&nbsp;the 'Non-standard serial port support (config: CONFIG_SERIAL
menuconfig: (Character Devices \-> Standard/generic (dumb) serial support)
**** config: SERIAL_8250
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> 8250/16550 and compatible serial support)
**** config: CONFIG_SERIAL_8250_EXTENDED
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Extended 8250/16550 serial driver options)
**** config: CONFIG_SERIAL_8250_MANY_PORTS
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support more than 4 legacy serial ports)
**** config: CONFIG_SERIAL_8250_SHARE_IRQ
menuconfig: (Device Drivers \-> Character Devices \-> Serial drivers \-> Support for sharing serial interrupts)
**** I also enabled Number of 8250/16550 serial ports to register at runtime to be 12 (was 4), this was not in manufacturers instructions.
*** make-kpkg clean
*** fakeroot make-kpkg \--initrd \--append-to-version=-custom kernel_image kernel_headers&nbsp;&nbsp;&nbsp; (note the space after custom (your string) and kernel_image)
**** After the append to version, you can write any string (replace custom with your string).&nbsp; Restrictions are all lower case&nbsp;and must not contain whitespace or special chars (dash ok).
*** dpkg \-i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
dpkg \-i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
*** _Optional: Remove (comment out)&nbsp;the unwanted kernel from /boot/grub/menu.lst_.&nbsp;&nbsp;&nbsp;&nbsp; The board will boot the newly built kernel so no action required.
*** serial.conf was editted to change IRQ from 10 to 9 as there was a PC104 reconfig at some point.
*** To finish workstation setup (if you want to run debian as a workstation with DHCP and seen on MBARI network do the following:
**** &nbsp;First, see if your host name is set correclty using the following commands:
&nbsp; uname \-n
&nbsp; hostname \-a
&nbsp; hostname \-s
&nbsp; hostname \-d
&nbsp; hostname \-f
&nbsp; hostname
**** &nbsp;
**** edit /etc/network/interfaces.&nbsp;&nbsp;&nbsp; Add the line 'hostname mvc-debian4.shore.mbari.org' under iface eth0 inet dhcp
***** iface eth0 inet dhcp
&nbsp;&nbsp;&nbsp; hostname mybox.mydomain.com
***** In /etc/dhcp3/dhclient.conf, uncomment and edit&nbsp; #send host-name "andare.fugue.com";
*** TODO:
**** Get rid of boot up issues (kahlua audio, etc.) that are relics from installing on workstation
\\
\\
** Moving the harddrive from a workstation to the AUV&nbsp;(Lippert Coorunner (II?) AMD Geode PC104)
*** Before shutdown on workstation (just prior to move), delete the ethernet address bound in the file /etc/udev/rules.d/z25_persistent-net.rules).&nbsp;&nbsp;&nbsp;
**** If this file is not deleted, the eth0 interface will not come up and a message at boot "SIOCSIFADDR: no such device eth0" with no eth0 will result
**** ifup eth0 will also show the error
\\
*** Network Settings (/etc/network/interfaces)
**** change from workstation setup to auv setup (dhcp to static and mvc-debian4 to mvc-debian for AUV)
***** edit /etc/hosts&nbsp;and change mvc-debian4 to mvc-debian
***** 127.0.0.1 localhost.localdomain localhost
***** 134.89.32.16 mvc-debian.shore.mbari.org mvc-debian
***** hostname mvc-debian.shore.mbari.org
***** copy the interfaces (see attachment to this wiki)&nbsp;file to /etc/network
****** address 134.89.32.16
****** netmask 255.255.254.0
****** gateway 134.89.32.1
****** broadcast 134.89.32.255
***** to check the hostname is set properly
****** uname \-n
****** hostname \-a
****** hostname \-s
****** hostname \-d
****** hostname \-f
****** hostname
**** For future apt-get usage - edit /etc/apt/sources.list and comment out the&nbsp;cdrom drive.&nbsp;&nbsp; This will get packages by ftp from debian mirror.
\\
\\
* Notes:
** Corba
*** It might be better to pull in the omniORB4 from Debian since there are build errors and complexity associated with omniORB.&nbsp;&nbsp;&nbsp; The default config file location is /etc/omniORB4.cfg.
** Looks like the serial.conf file borrowed from debian 3.1 is not setting up the serial ports correctly - not sure if this was ever tested (likely not).&nbsp;&nbsp; Resolution:&nbsp; Need to rebuild the linux kernel to enable standard serial, etc.&nbsp;&nbsp; Instructions added above
** Tar up the built prj directory for transfer to another hard disk:
*** tar \-pczf auv-prj-built.tar.gz prj]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114378</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179857</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.&nbsp;&nbsp;
\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;


h3. Status&nbsp;&nbsp;


h4. Navigation drivers (first priority)

*Status at a glance:*
{dynamictasklist:NavigationDrivers}
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliably).
*** Working to verify PD0 operation.
\\

h4. Science drivers

*Status at a glance:*&nbsp;

{dynamictasklist:ScienceDrivers}\\
\\
\\

*Status details:*
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114384</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179855</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.&nbsp;&nbsp;
\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;


h3. Status&nbsp;&nbsp;


h4. Navigation drivers (first priority)

*Status at a glance:*
{dynamictasklist:NavigationDrivers}

Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number" \\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl
** changes in devices.cfg&nbsp; /dev/ser6 \->/dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliably).
*** Working to verify PD0 operation.\\

h4. Science drivers

*Status at a glance:*&nbsp;

{dynamictasklist:ScienceDrivers}\\
\\

*Status details:*
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
>
13:32:33.120 INFO \[TeledyneDvl\]&nbsp; PD0Header = 7F7FDB02
13:32:33.122 INFO \[TeledyneDvl\] initialize() - The DVL is initialized.
*** 13:32:34.170 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.172 ERROR \[TeledyneDvl\] TM DBG: bytes 9, record read is: 7F7FDB020
*** 13:32:34.182 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.191 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.192 ERROR \[TeledyneDvl\] TM DBG: bytes 77, record read is: 00714004F0088
005201B8011E028402000009124A42002C041901009001B00001400B00E80300
*** 13:32:34.202 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.218 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.219 ERROR \[TeledyneDvl\] TM DBG: bytes 92, record read is: 0021139411000
07D1D5A029D010105320026004D00000248B1150900000000000000000080000100080311142021
*** 13:32:34.234 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.248 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** 13:32:34.249 ERROR \[TeledyneDvl\] TM DBG: bytes 123, record read is: 100000000106
0000E77937FFC7002300280A000000000000FF0000000000000004C1008800000000000000000000
00000196FF0EFF48FF0080008000800
*** 13:32:34.264 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
13:32:34.292 ERROR \[TeledyneDvl\] readRecord(): Incorrect number of bytes read.
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114382</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179859</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Validate each driver by running driver tests (auv-linux/onboard/devices)
** Hydroscat - fixed sscanf problem, fixed seg fault (in test), changed init to 'stop' the sensor stream, increased timeout.&nbsp;&nbsp;
\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;


h3. Status&nbsp;&nbsp;


h4. Navigation drivers (first priority)

*Status at a glance:*
{dynamictasklist:NavigationDrivers}
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
\\

h4. Science drivers

*Status at a glance:*&nbsp;

{dynamictasklist:ScienceDrivers}\\
\\
\\
\\

*Status details:*
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114386</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179860</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

&nbsp;
\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\
h3. Status&nbsp;&nbsp;
\\

h4. Navigation drivers (first priority)
\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
\\

h4. Science drivers
\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\ 
*Status details:*
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114387</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">622670</id>
<property name="body"><![CDATA[Present: *Rob, Frederic, Conor, Tom and Kanna*
* &nbsp;Conor discussed the state of the VCS/AMC integration while working with Rich last week:
** the major bug tackled was that VCS was not flushing messages in the queue. The consequence was that when there is a replan action, and the AMC requests changing the stack, previous messages in the dispatch stack of the layered control were still being sent off for execution.
** Two ways to mitigate:
**# when the AMC fires up, it will await an explicit initialization coming from the VCS
**# In addition Rich will implement a mechanism to ensure that on a replan action, the control stack is reinitialize
** A number of short runs with a lot of inserts/deletes done to test the AMC/VCS handshaking and messages exchange. All sans above, seems to be well.
* Tom raised the question of a test plan for VCS with all the changes in layered control. His suggestion was to run, at the very least, a leak checker.
** Frederic has some simple graphing tool which shows memory usage over time and can provide a simple way to see if memory is being hogged without Free's taking place. He has used this on QNX to ensure his clustering code is kosher.

** Rob suggested checking with Hans for 'spy' which appears to be equivalent to 'top'. We need to check with Hans.
* Socket related issues from last week were fixed; it appeared to be a timing issue with the read buffer getting read at a faster rate.
* We will use JIRA for any issue tracking (see http://oceana:8082/browse/AUT)
* We all had a lively discussion with Rob about a related if not directly connected to this project, of how the Gulper behavior will work. Rob's block diagram of the process is as attached to this note.
* &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">589903</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10387875</id>
<property name="body"><![CDATA[h1. TREX not so complete cheatsheet


h2. Plan

{anchor:top}
# [#dir] Give expected directory structure
# [#env] Describe how to set your unix environment properly to compile/use TREX
# [#general] Describe the configuration file used by TREX and/or AUV flight code and their relations
# [#run] Show how to start a full mission on the vehicle or in simulation

h2. Directory structure

{anchor:dir}
For compiling/executing correctly TREX expects the following directory structure
<path>
* auv-shared
* auv-linux
* auv (note: this is the auv-qnx directory and may be deprecated in the near future)
* Europa
* PLASMA
* TREX

We will assume on the rest of the document that this structure is respected.

h2. Initializing TREX environment variables

{anchor:env}
The file <path>/TREX/devConfig should initialize the environment variable correctly for bash. To load it do the following :
{code:none}
% cd <path>/TREX (note: devConfig script need to be launched from this directory)
% export HAS_AUV_LINUX=yes (note: do not define that if auv-linux is not compiled on your platform - e.g. Mac OS)
% source devConfig
% export VARIANTS=OPTIMIZED (note: to indicate to jam to compile in optimized mode ... so far debug mode is kind of
{code}
broken as Europa is too strong in some of its assert)
After that you should be able to compile the different component. If HAS_AUV_LINUX is set to yes make sure that auv-linux is correctly compiled and up to date. Then you need to compile Europa :
{code:none}
% cd $PLASMA_HOME
% jam && jam (note: it is better to run it twice to make sure that the binary dependencies are taken care of)
{code}
The compilation of TREX core libraries is done similarly
{code:none}
% cd $TREX_HOME
% jam
{code}
after that you can compile the binaries amc and sim
{code:none}
% cd ctd2007
% jam amc
% jam sim
{code}
amc is the batch command that execute the model without any terminal interaction. sim is a debug interface that can be used to step the agent execution using a limited set of commands through the terminal.
There's also a MonteCarlo sampler used for nightly build to exercise the model but we won't develop it here for now.

h2. Using TREX

{anchor:general}

h3. TREX Configuration files :

On $TREX_HOME/ctd2007 you can find a bunch of .cfg files. They are used by TREX to confiugure itself for the mission a non exhaustive description follow :
* amc*.cfg: files defining the number and types of reactors used for the agent. By default the file used is amc.cfg (which is a copy of amc.sim.cfg) and its content on svn should not be modified (it may break the nightly builds). But locally you can replace the file by whichever correspond to your need. Description follow:
** amc.sim.cfg: self contained simulation. The VCS is simulated via a reactor exploiting the model given in simulator.nddl
** amc.vcs.cfg: connection to QNX. TREX connect to vcsServer and statePublisher remotely to execute the mission. Basic configuration for these connections is given by vcs.cfg
** amc.vcs.new.cfg: new implementation used for linux connection. This configuration will probably replace the   amc.vcs.cfg in the near future. It also uses vcs.cfg to connect to the auv components.
** amc.play.cfg: used to replay a mission for debugging purpose.
** amc.vcs.dl.cfg: add an extra reactor that use CORBA to connect to an Iridum modem. This is used for mixed initiative. This current version is connecting to the modem driver from auv-linux while connecting to vcsServer and statPublisher from QNX. This connection to iridium modem allows TREX to send messages to the shore while possibly integrating new goals coming from there. For testing purpose we have also amc.sim.dl.cfg that allows to connect to this modem without needing a connection to other auv components.
* vcs.cfg: indicates the IP and port ussed for connecting to the vehicle. Its content should be :
{code:xml}
<Config log="1" localPort="8002" remoteName="localhost" remotePort="8004" missionStart="init.cfg">
 	<Timeline name="vehicleState"  command="0" />
	<Timeline name="setpoint" class="Setpoint" command="1" />
	<Timeline name="descend"  class="Descend" command="1" />
	<Timeline name="ascend"   class="Ascend" command="1" />
	<Timeline name="waypoint_yoyo" class="Waypoint" command="1" />
	<Timeline name="getgps" class="GPS" command="1" />
	<Timeline name="FireTheGulperAMC" class="Gulper" command="1" />
</Config>
{code}
remoteName should be the URL of the machine where the vcsServer is running. remotePort should have the same value as PORT in $AUV_CONFIG_DIR/vcsServer.cfg. localPort should have the same value as AMC_PORT in $AUV_CONFIG_DIR/statePublisher.cfg (check also in this file that AMC_IP points to the machine where TREX will run).
* init.cfg: is the initial plan sent to vcsServer check that the safety behaviors are consistent with the environment and TREX goals (e.g if the depth envelope is too shallow while TREX wants to do a yoyo with a high lower depth).
* Debug.cfg: used to activate/deactivate debug messages in $TREX_LOG_DIR/latest/Debug.log. by default it as the same content as Debug.Off.cfg you can replace it by Debug.On.cfg but be aware that TREX is very verbose in this case (implying a huge slow down) and it should not be used except when running sim binary which allows to unload/load this file on demand.
* \*.solver.cfg: Europa configuration to tweak the plan solver for the given reactor.
* \*.synch.cfg: Used to configure Europa during synchronization phase of TREX but it is deprecated now and will probably disappear as sson as I have checked that they are not used anymore.
other cfg files: These are the files defining the agent design for each missions. You will find normally correspondings \*.exec.nddl \*.skipper.nddl \*.sim.nddl which describe the model instance for these missions (for example in science.x.skipper.nddl you will see the definition of a VolumeSurvey Goal).These configutrations files will be referred in the future as <mission>.cfg

h3. Note on AUV configurations files useful for simulation :

all these files should be on $AUV_CONFIG_DIR
Make sure that _latitude_ and _longitude_ on workSite.cfg is close enough to the point where TREX expect to do the mission. Otherwise TREX will detect that it is too far from this point and simply do nothing.
Similarly on simulator.cfg check that the depths are reflecting what you would roughly expect at the place where the mission should be executed. These depths are provided by the config attributes _depthn_ with n an integer.
Check statePublisher.cfg and vcssServer.cfg ass described on vcs.cfg item in previous section.
On QNX verify that devices.cfg starts the correct processes including statePublisher
On Linux check the \*processes.cfg to see if it starts correct processes including statePublisher.

&nbsp;Note that threadfish.shore has a *ready to go binary* for AUV-Linux. Log in as 'dorado1' and cd down to 'coding/auv-linux'.


h2. Starting a mission

{anchor:run}

h3. Starting AUV code for TREX

This is required only if TREX expect a connection with the vehicle otherwise you can go directly to the next section.
{code:none|title=On QNX}
% cd $AUV_HOME/altex/onboard/bin
% ./vcsServer [-v] [-sim]
{code}
{info:title=flags information}
* \-v for being verbose
* \-sim when in simulation (ie no HW in the loop)
{info}
{code:none|title=On Linux}
% omniNames&
% notifd -c $OMNINOTIFY_HOME/channel.cfg&

% cd $AUV_HOME/onboard/sampleConfig
% ../bin/vcsServer -proc <proc>.cfg [-fastsim]
{code}
{info:title=flags information}
* \-proc <proc>.cfg specifies the file where extra processes to start can be found (fastSimprocesses.cfg is for example the processess for fast simulation)
* \-fastsim indicates to vcsServer that it will run into linux fast simulation
You can change how verbose auv-linux will be by editing log4cxx.cfg
{info}

h3. Starting TREX in batch mode

{code:none}
% cd $TREX_HOME/ctd2007
% ./amc_o_rt <mission>.cfg [-fast|-sim] <nstep>
Use <nstep> = 50
{code}
{warning:title=Warning}
Currently argument position and order is fixed in TREX
{warning}
{info:title=flags information}
* \-fast indicates that the clock used would connect to auv-linux fast simulation clock. Note that if you do not specify <nstep> in this case TREX will try to go as fast as linux fast simulation goes. This may be a good stress test but it is genrally better to specify a number of step around 50.
* \-sim indicates that TREX will just use a clock that is going as fast as TREX can (useful on TREX pseudo amc.sim or on amc.play)
* <nstep> indicates how much step TREX is allowed to do for deliberation  at least on each tick  when on \-fast or \-sim mode.
{info}
You can see TREX activity by looking on $TREX_LOG_DIR/latest/TREX.log
{code:none}
% cd $TREX_LOG_DIR
% tail -F latest/TREX.log
{code}

h3. Starting TREX in interactive mode

{code:none}
% cd $TREX_HOME/ctd2007
% sim_o_rt <mission> [-sim] [<nstep>]
Options:
 Q :- Quit
 N :- Next
 G :- Goto <tick> e.g. g100
 R :- Reload Debug.cfg
 + :- enable pattern e.g. '+Agent'
 - :- disable pattern e.g. '-Agent'
 ! :- disable all debug messages
>
{code}
You can see here that the command is quite similar to amc except  that it exepect the name of the <mission> instead of <mission>.cfg.
You have then an interactive limited shell a la gdb where you can adnvance to a specific tick (g), step to next tick ( n ), etc commands R/+/-/\! are used to manipulate how much data you want  on the Debug.log starting from now.
{info:title=note about sim}
One can note that, as opposed to amc, sim does not have the flag \-fast. It is due to the fact that by default sim uses the fast clock.
You can change it by adding the flag \-sim when connected to linux fast simulation. As sim is a debug interface where you can start and  stop the execution when you want a real time clock would not make sense.
{info}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10355138</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830434</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux and auv-pkgs Install, build]*
* *[Termios Dev Info]*
* *[Driver Porting Details]*
* *[Running and Testing AUV Linux]*

\\
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment
\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS, download the 3rd party packages.&nbsp;&nbsp;
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor on a workstation
\\
* Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board which is connected to the instruments on the auv
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

h3. Status

\\

h6. Executive Summary:&nbsp;&nbsp;&nbsp;

* 50 days allocated, approx. 2-3 days remaining.&nbsp;&nbsp;&nbsp;
\\
* Debian 4.0 Linux has been installed and development environment has been setup and documented for reproducability.&nbsp;&nbsp;
\\
* After some bug fixing, Navigation drivers&nbsp;are&nbsp;functioning however a serial port&nbsp;'byte drop' problem is preventing long runs and is exposing&nbsp;problems in the error handling/recovery logic
\\
* Science drivers (Hydroscat, Seabird and Lisst) have been debugged and run via serial port on desktop machines but not exercised&nbsp;thru the terminal servers on&nbsp;AUV.
\\
* auv-linux is not&nbsp;ready for deployment, task list detailed below.
\\

h6. Tasks Remaining:

Linux infrastructure &nbsp;(must=1, should=2, nice=3)&nbsp; \[1-2 weeks\]
* \[1\] Install Fan Card driver
* \[1\] Configure eth1 for wifi&nbsp;
* \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
* \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
* \[2\] config out un-needed support (audio, etc.)
* \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
* \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

Serial Port robustness \[1 - 2 weeks\]
* Finish Serial test program (SerTest) to develop termios serial driver and validate 12 port serial card kernel driver.&nbsp;&nbsp;Tune hardware
* Recommend build-up of a test PC104 (Lippert board) + Xtreme104 12 port serial card with harddisk.

Navigation Drivers \[1 - 2 weeks\]&nbsp;
* Overnight run (soak test) of individual drivers
* Overnight run with all drivers operating
* Robustness - Exercise error handling in drivers
* Validation of proper data (gps, compass, pressure)

Science Drivers \[1 - 2 weeks\]
* Validation on LanTronics terminal server in Auv
\\

System&nbsp;\[1 week\]
* Run memory leak and access violation tests using Duma and Electric Fence
* Measure CPU load and power consumption
* Optional - try to get a run of the static analysis tool Coverity
* File bugs on issues found
\\

Development Environment \[&nbsp;1.5 weeks\]
* Create a Build and Simulation server with the same software versions as auv on a workstation (Test what you fly, fly what you test)
* Setup an accessible&nbsp;regression test environment for serial drivers - PC104 + Xtreme104 serial card + device emulators

h6. &nbsp;&nbsp;

\\

h6. Skill Requirements for Tasks:&nbsp;

C++, Linux, Termios, Familiarity with Navigation and Science Sensors and Debian Linux
\\

h6. Details:&nbsp;

* *Install Desktop Linux Development Environment*
** Acquired 2Ghz HP x2100 workstation from IT
** Red Hat Enterprise 5 was installed for initial development.&nbsp; This has been re-setup to be Debian 4.0 to match the Linux chosen for the AUV \-&nbsp;"Test what you fly, fly what you test".
*** Note:&nbsp; auv-linux developers are typically using Fedora Core 6 (no longer available for download) and have various kernels (2.6.18, 2.6.20 and 2.6.22) since some have run the Fedora Upgrade.
** Recommendation is to setup a build (and simulation execution) machine that has the same linux distribution as the auv&nbsp;
\\
* *Setup Build Environment*
** Worked thru the dependencies required for each 3rd party package.
** Created&nbsp;a new CVS module,&nbsp;auv-pkgs, to archive the versions of 3rd party packages&nbsp;to insure&nbsp;reproducibility.&nbsp;&nbsp;&nbsp;
** Created scripts for automating the install procedure.
\\
* *Familiarization with software stack and Driver&nbsp;debug/validation on workstation*
** Acquired a Hydroscat
** Attached Hydroscat to serial port of workstation
** Found and fixed a couple of minor&nbsp;bugs in the driver
** Ran soak (6 hour) test
\\
* *Setup for&nbsp;'native' development on the embedded&nbsp;PC104 Lippert board* \-&nbsp; the test / build environment for validation and test of the drivers
** Debian 3.1 was&nbsp;found to be incompatible with the auv-linux software and 3rd party packages.&nbsp;&nbsp; The decision was made to&nbsp;update to Debian 4.0&nbsp;
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and then manually&nbsp;fix up linux for the differences (static IP, mvc-debian, changed ethernet MAC address, etc.)
*** Acquired a 5GB harddisk from IT, purchased a 3.5" to 2.5" adapter for interfacing the notebook driver to the workstation.
*** On the HP workstation, installed Standard distribution of Debian 4.0, worked thru (and documented) dependent packages that need to be added to the standard distribution using Debian package manager (Aptitude / apt-get)
*** Ran into limitation on disk size - purchased 160GB Hitachi drivers (qty 2)
*** After a successful auv-linux build and test of Hydroscat driver, moved the harddrive to the CTD AUV Vehicle (DMO1).
** Fixed up the ethernet and configured the linux kernel for the serial ports for the AUV.&nbsp;
*** Configured and rebuilt&nbsp;the linux kernel for the Xtreme104 serial card
** Created Instructions for Auv Debian 4.0 Linux Install&nbsp;and configuration (re-used by FOCE team). &nbsp;[AUV Debian4 Linux and auv-pkgs Install, build]
** TODO (must=1, should=2, nice=3)
*** \[2\] Rerun Debian install procedure 'native' on the Lippert board&nbsp;\- let the Debian Installer probe hardware and configure linux.&nbsp;
*** \[1\] Install Fan Card driver
*** \[1\] Configure eth1 for wifi&nbsp;&nbsp;
*** \[2\] config out the un-needed&nbsp;audio support
*** \[1\] rebuild the kernel to add the two serial ports not setup at boottime&nbsp;(ttyS12 adn ttyS13)
*** \[2\] Boot-time startup of CORBA daemons:&nbsp;omniNames & and notifd \-c $OMNINOTIFY_DIR/channel.cfg &
*** \[2\] Fix the timing offset&nbsp;issue found in tailcone test (off by 4msec) due to timing diff between 2.6.18 and 2.6.22.&nbsp;&nbsp;&nbsp;
**** An option is to update to newer kernel (2.6.24 recommended since it's slated for next debian release 'lenny').&nbsp;&nbsp;&nbsp;

\\
\\
* *Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)*
** Serial Device driver.
*** Verify serial port throughput capabilities (using SerTest test program) and resolve linux kernel driver, fifo depth,&nbsp;or IRQ assignments to fix byte drop.
**** Write separate serial test program (SerTest) to validate linux kernel driver and hardware configuration (IRQ)&nbsp;
\\
&nbsp;
** Navigation Drivers (first priority)
*** ashtec(gps) - 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
*** bluefinBatt \-&nbsp;&nbsp; Established serial connection.&nbsp;&nbsp; Character echo is interfering with the driver, action for Hans to modify jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
\\
*** 3dmgx1 Microstrain AHRS Compass - Tom O ported the 3dmgx1 driver. The is passing serial data though there are issues with the data stability (could be the compass).
\\
**** crossbow AHRS compass - Hans requested focus on this driver first (July 2008), however it will likely not be on a deployed vehicle since 3dmgx1 is preferred.
\\
*** parosci Paroscientific pressure sensor - driver is functional however failing overnight tests.&nbsp;&nbsp;&nbsp; (Last minute update: The latest pull from CVS failed)
\\
*** tailcone&nbsp; - tested and compared to QNX.&nbsp;&nbsp; Found a timing offset issue that can be fixed by upgrading the linux kernelt to 2.6.22 or newer (2.6.24 recommended which should be available in Debian 'Lenny' in 2H08 (Sept. best guess).
\\
*** teledyne DVL \-&nbsp; driver is functional however failing overnight tests.
\\
** Science Drivers (second priority)
*** Seabird
**** In progress... getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
*** Hydroscat - HS2 Backscatter optical sensor
**** Actions
***** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
\\
*** Biolume - Biolumenescence
**** Status - Not tested yet
\\
*** lisst - Laser based particle size analyzer
**** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
\\
*** Gulper
**** no linux driver currently available (should be a simple 'fire' command)
\\
*** &nbsp;
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\

Recommendations:
* Linux&nbsp;build: Setup a build (and simulation execution) machine that has the same Debian 4.0 linux distribution as the auv&nbsp;
* Regression testing: Setup a PC104 stack with Xtreme104 serial card and attach&nbsp;device emulators (microprocessors) on the serial ports for regression testing (Fly what you test, test what you fly).&nbsp;&nbsp;&nbsp;
** Device emulators for each class (Streaming, Polled, Fixed, Variable).
** Inject errors for code coverage on error handlers.&nbsp;&nbsp;
\\
\\
\\
&nbsp;

h4. \\


h3.

Thom's Notes:

Time on AUV was 1999.&nbsp;&nbsp;&nbsp;

Fresh checkout from cvs, build failed.
gcc \-o uplinkQserver uplinkQueuerServer.o&nbsp; /home/auv/prj/auv-linux/onboard//utils/auvUtils.a /home/auv/prj/auv-shared/lib/libAuvShared.a \-L/opt/omniOrb/omniORB-4.1.0/build/lib/ \-L/usr/local/apr/lib \-lgctpc \-lpthread \-llog4cxx \-lnetcdf \-lnewmat&nbsp; \-lapr-1 \-laprutil-1 \-lrt
uplinkQueuerServer.o: In function `main':
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:9: undefined reference to `mbari::Logger::configure(char const*)'
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:17: undefined reference to `MsgQueuerServer::MsgQueuerServer(char const*, long, long, unsigned char, int)'
/home/auv/prj/auv-linux/onboard/tools/uplinkQueuerServer.cc:26: undefined reference to `MsgQueuerServer::run()'
collect2: ld returned 1 exit status
make\[1\]: \**\* \[uplinkQserver\] Error 1
make\[1\]: Leaving directory `/home/auv/prj/auv-linux/onboard/tools'
make failed
make: \**\* \[all\] Error 2
\\

The build got far enough to enable teledyne and crossbow builds.&nbsp;&nbsp;&nbsp; Teledyne would not run without creating 'latest' directory in onboard/logs though I seem to remember there was a link involved (talk to Tom O.).
\\

&nbsp;For Leak detection:

[http://www.cprogramming.com/debugging/valgrind.html]

http://www.tldp.org/HOWTO/Valgrind-HOWTO/\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797666</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179895</id>
<property name="body"><![CDATA[h1. AUV Linux - Driver Port and Validation


h4. *Links*

* *[AUV Debian4 Linux Install]*
*&nbsp;*
\\

h3. *Approach*

* Install desktop linux development&nbsp;environment:
** First: redhat RHEL5 (stable release)&nbsp;was readily available and Fedora Core 6 was not available for download.&nbsp; (Hindsight - should have standardized on the same linux used by the rest of the team which should be the same linux used on the AUV).
** After some lessons learned, Debian 4.0 was installed on the workstation to match the embedded platform.
** Instructions for Auv Debian 4.0 Linux Install and auv-pkgs setup:&nbsp;[AUV Debian4 Linux Install]\\
* Setup build environment, dependencies, etc. for&nbsp;auv-linux module, check out auv-linux and auv-shared from CVS.
** After going thru the 3rd party software package setup, a new cvs module was created, auv-pkgs, to archive the open source packages and scripts.
\\
* Get familiar with the software stack and the driver test code by working with a driver for a sensor (Hydroscat connected to the serial port of the workstation)
\\
* Setup the test / build environment, dependencies, etc. for doing 'native' development on the embedded&nbsp;PC104 Lippert board
** Since the Lippert Coolrunner II is relatively slow, the installation and setup is painfully time consuming.&nbsp;&nbsp; The approach taken is to perform the installation and setup as mvc-debian4 (dhcp) on the pentium 4 2Ghz desktop and then transfer the harddisk to the PC104 stack and fix up for static IP (mvc-debian) and changed ethernet MAC address.
\\
* Finish porting and validate each driver is correctly receiving&nbsp;and parsing data&nbsp;by running driver test executables&nbsp;(auv-linux/onboard/devices)
\\
* Run memory leak and access violation tests using Duma and Electric Fence
\\
* Optional - try to get a run of the static analysis tool Coverity
\\
* Measure CPU load and power consumption
\\
\\

\\

h4. \\


h3. *Driver porting and validation*

\\

h4. Setup

* Assuming a&nbsp;Debian and auv-linux&nbsp;software is&nbsp;installed,&nbsp;configured, built, setup, etc. (see below) and&nbsp;network and serial is working.
** Note:&nbsp; omniORB.cfg located in prj/auv-pkgs/omniORB needs to have bootstrap enabled.&nbsp;&nbsp;&nbsp; Done in auv-pkgs cvs module.
** auv@mvc-debian&nbsp;&nbsp; pass: dorado1&nbsp;&nbsp; ip&nbsp; 134.89.32.16 (static)
\\
* Serial Port assignements (per Duane 3/7/08)
** *CPU Card*
*** ttyS0 (console) Iridium
*** ttyS1 Freewave
** *Xtreme/104 Isolated 12 port Card*
*** ttyS2 Tailcone
*** ttyS3 no connect
*** ttyS4 Parosci
*** ttyS5 teledyne DVL&nbsp;\- Navigator Broadband ADCP Version 9.18
*** ttyS6 ashtec GPS
*** ttyS7 Gulper (RS485)
*** ttyS8 no connect
*** ttyS9 Bluefin Batteries (RS485)
*** ttyS10&nbsp;MVC_PIC
*** ttyS11&nbsp;3DM_GX1
*** ttyS12&nbsp;Drop Weight
*** ttyS13&nbsp;USBL
** LanTronix terminal servers
*** tcp:sci1-dmo1:10002 seabird
*** tcp:sci1-dmo1:10001 seabird
*** tcp:sci2-dmo1:14002 hydroscat
*** tcp:sci3-dmo1:14001 lisst
*** &nbsp;

h4. &nbsp;

\\
\\

h3. Status&nbsp;&nbsp;

\\

h4. Navigation drivers (first priority)

\\
*Status at a glance:*
\\
{dynamictasklist:NavigationDrivers}
\\
Status details:
* ashtec(gps)
** devices.cfg change:&nbsp; /dev/ser7 \-> /dev/ttyS6
** 9600 8N1
** Status (+) &nbsp;
*** ./ashtechapp \-dev /dev/ttyS6
*** 'Partial' Basic functional - tested&nbsp;with no statellite acquisition.&nbsp;&nbsp;&nbsp;&nbsp; Seg faults with ctrl-c (exit).
\\
* bluefinBatt
** devices.cfg change: /dev/ser10 \-> /dev/ttyS9
** Status (-) &nbsp;
*** Established serial connection.&nbsp;&nbsp;&nbsp;BlueFinBatt device is no longer&nbsp;echoing characters (not fully confirmed).&nbsp;&nbsp; HT&nbsp;modified jumper on&nbsp;Xtreme104&nbsp;for 'no echo' on RS485.&nbsp;&nbsp;
*** Driver test shows what looks like proper initialization - need to audit the test to see what is being exercised.
\\
* 3dmgx1 Microstrain AHRS Compass
** m3dmgx1Server \-dev /dev/ser12&nbsp;&nbsp;&nbsp;&nbsp; \-useForNav
** ./crossbow \-dev /dev/ttyS11
** Status (+) &nbsp;&nbsp;
*** Crossbow compass is no longer on the vehicle - this has been replaced by the 3DMGX1 compass.&nbsp;&nbsp;&nbsp;&nbsp;
*** Tom O ported the 3dmgx1 driver.&nbsp;&nbsp; The&nbsp;driver&nbsp;is passing serial data though there are issues with the data stability (could be the&nbsp;compass).&nbsp;
\\
* parosci \-&nbsp; Paroscientific pressure sensor
** devices.cfg change:&nbsp; /dev/ser5 \-> /dev/ttyS4
** ./parosci \-dev /dev/ttyS4
*** wait&nbsp;60sec (or so)&nbsp;for 'ping service worksite' to timeout
** Actions:
*** added parosci.cfg to auv-linux/onboard/sampleConfig from QNX dorado389
*** fixed termios baud issue (9600 \-> B9600), no longer fails cfsetispeed
*** Have obtained manual - parosci is unresponsive to serial commands via minicom
*** Parosci does not respond with the serial number when requested by the driver.&nbsp;&nbsp; Have instrumented the writeCommand and see the correct strings are being sent (though I'm not sure about \xd\xa as string terminators).
*** Manual indicates commands should start with an asterisk (the request for serial number does not have this).
*** Called Steve Smith at ParoScientific&nbsp; 425-883-8700 x252.&nbsp;&nbsp; He indicated \*9900VR should get a response no matter what the device ID.
**** Using minicom (trying both&nbsp;'Add Linefeed ON and OFF): The device does respond when incorrect command sequences are sent - \*(00 will start echoing due to invalid ID.
**** No response to \*9900VR
**** No response to \*0100SN
*** Write a simple serial program to make sure the correct byte string is sent to parosci.
**** \*9900VR<0x0d><0x0a> responds with \*0001VR=R1.0
*** \*0100SN<0x0d><0x0a> responds with \*0001SN=87761
*** \*0100P3<0x0d><0x0a> responds with \*000116.02
*** I'm suspecting something in the termios setup of the parosci driver, but am not sure.&nbsp;&nbsp;
** Next step is to hook up the serial protocol analyzer.&nbsp;&nbsp;
*** Made a cable with grab leads, but it's too hard to get the connection.
*** Ordered connector samples from Samtec&nbsp;so I can make an RS232 breakout for the protocol analyzer - this will show the truth about what's actually going out on the serial port.&nbsp;&nbsp;
*** Another option is to to detach parosci from AUV and run on desktop with protocol analyzer.&nbsp;&nbsp;
** Status (-)
*** In progress...&nbsp;&nbsp;
*** Fixed bug in baud set
*** Getting an error "Failed to read serial number"
\\
* sonardyne usbl
** No test executable available
\\
* tailcone
** changes in devices.cfg /dev/ser3 \-> /dev/ttyS2
** ./tailcone \-dev /dev/ttyS2
** Cautions:
*** Recommend running tailcone tests while observing the tailcone
*** Don't run tailcone for longer than 10 to 15 minutes (there is a spring seal that will wear out / overheat)
** Status (/)
*** Ran the tailcone gui with Tom O.&nbsp;&nbsp;&nbsp; Driver&nbsp;passes&nbsp;basic functional test.&nbsp;&nbsp;&nbsp;&nbsp;Worked with Tom O to identify&nbsp;4msec timing skew between runs on Fedora Core 6 updated to 2.6.22 kernel and&nbsp;debian 4.0 (2.6.18)&nbsp;on some tailcone test results.&nbsp;&nbsp;&nbsp; Recommended fix is to update the kernel.
\\
* Teledyne dvl - Doppler Velocity Log
** changes in devices.cfg&nbsp; /dev/ser6 \-> /dev/ttyS5
** Actions
*** Took&nbsp;dvl.cfg from QNX&nbsp;dorado389 (from Rob) and placed the dvl.cfg file&nbsp;in sampleConfig directory
*** Fixed tempios baud problem (cfsetispeed error) with assist from Hans.
*** The problem being chased is readNChars is returning pre-maturely (read of 1466 is returning with 3 to 60 bytes which is causing the driver to fail)
**** Have tried a sleep to allow the termio&nbsp;buffer to fill - does not help.
**** In progress Reading up on termio and analyzing termio setup...
**** Analysis / test is hampered (slowed) by CORBA 1 minute timeout (see corbaUtils)
**** readNChars had a bug in raw where 0&nbsp;instead of count was passed&nbsp;\- TO fixed it, but readNchars is still not working right.&nbsp;&nbsp;&nbsp; Verified that the constructor for TeledyneDVL is passing MaxRecordSize of 7000
** Status (/)
*** In progress...&nbsp;&nbsp;
*** Fixed a bug where the number of bytes was not being set in termios - raw(0,timeout) was changed to raw(count, timeout)
*** Found and fixed another bug where the number of bytes being requested (1466) was being passed to a char field in termios struct resulting in a modulo 256 of 1466 being passed to termios
*** Timeout value of 4000 is also being fed to a char (byte) type in termios structure.&nbsp;&nbsp; Modifying the timeout to 255 has side effects (driver does not work reliablyy, though this could be something else).&nbsp;&nbsp;&nbsp; Changing termios_p.c_cc\[VTIME\] to 255 when passed something bigger does work.
*** PD0 operation is passing basic functional test.&nbsp;&nbsp;&nbsp;&nbsp; Note: there are startup issues that require investigation (AUV buffer full, etc.), but have had 5&nbsp;successful runs of PD0.
\\

h4. Science drivers

\\
*Status at a glance:*&nbsp;
\\
{dynamictasklist:ScienceDrivers}\\
\\
\\
*Status details:*
\\
\\
* Seabird
** seabirdServer \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10002
** seabirdServer \-n ctdDriver \-dev tcp:sci1-dmo1:10001
** Actions:
** Status (-)
*** In progress...&nbsp; getting an error with seabird25 - 06:16:34.747 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open CTD attributes file "tcp:sci1-dmo1:10002"
\\
* Hydroscat - HS2 Backscatter optical sensor
** tcp:sci2-dmo1:14002&nbsp;
** Actions
*** Fixed bug in sscanf on snorm values (%hx \-> %1hx).&nbsp; Added 'STOP' to init.&nbsp;&nbsp; Fixed segfault in log write.&nbsp;&nbsp; Fixed segfault when run with terminal server.
** Status (/)
*** Driver passes basic functional test.
\\
* Biolume - Biolumenescence pump and PMT
** tcp:sci3-dmo1:14002
** Actions
** Status (?)
*** Not tested yet
\\
* lisst - Laser based particle size analyzer
** tcp:sci3-dmo1:14001&nbsp;
** Actions
*** Added 'STOP' to init.&nbsp;&nbsp; debugged and running from Tom's FC6 workstation 6 Mar 08
** Status (/)
*** Driver passes basic functional test
\\
* imagenex
\\
* Gulper
** no linux driver currently available (should be a simple 'fire' command)
\\
* Other (from QNX cfg file)
** dropWeightServer \-dev /dev/ser13
*** no linux driver currently available
** OCR507 \-dev tcp:sci4-dmo1:14001&nbsp;
** isus Optical Nitrate sensor
*** tcp:sci2-dmo1:14001
** mvc-pic
*** diagnostic info is being sent on serial port - no driver required (or available)
** &nbsp;usbl
*** no linux driver currently available.&nbsp;&nbsp; HT indicates not to worry about it.
** iridium
*** no linux driver currently available.&nbsp;&nbsp; HT indicates this is being replaced with <something>
\\

\----------------------------------------------------------------------------------\-

h4. Drivers Debug output (Thoms notes to self):

* Hydroscatauv@mvc-debian:~/prj/auv-linux/onboard/devices/hydroscat$ ./hydroscat \-dev tcp:
sci2-dmo1:14002
* Output on March 10:
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/hydroscat$ . run
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
IOR:010000001800000049444c3a6175762f487964726f7363617449463a312e3000010000000000
000064000000010102000d0000003133342e38392e33322e313600004f040e000000fe9154d54700
002ea7000000000200000200000000000000080000000100000000545441010000001c0000000100
0000010001000100000001000105090101000100000009010100
08:32:33.657 INFO \[Hydroscat\] stopping Hydroscat...
08:32:33.712 INFO \[AuvApplication\] You should override AuvApplication::run()
** 08:32:38.180 ERROR \[Hydroscat\] Hydroscat:bad response to LOG cmd: \!Use SHUTTER c
ommand to enable shutter.
** 08:32:38.181 INFO \[Hydroscat\] stopping Hydroscat...
08:32:42.702 INFO \[Hydroscat\] Hydroscat:starting Hydroscat...
08:32:42.703 INFO \[Hydroscat\] Hydroscat:started
08:32:42.755 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.762 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.768 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.774 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.780 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.786 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.792 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.798 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** 08:32:42.804 ERROR \[Hydroscat\] processRecord(): record too short(20):
'Sampling stopped.
** 08:32:42.810 ERROR \[Hydroscat\] processRecord(): record too short(22):
'03/10/2008 08:32:38
** 08:32:42.816 ERROR \[Hydroscat\] processRecord(): record too short(38):
'Time Resolution: high (0.01 second)
** 08:32:42.822 ERROR \[Hydroscat\] processRecord(): record too short(41):
\!Use SHUTTER command to enable shutter.
** 08:32:42.828 ERROR \[Hydroscat\] processRecord(): record too short(24):
'Sampling and Logging:
** 08:32:42.834 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Period: 0.25 seconds
** 08:32:42.839 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Start delay: 3 seconds
** 08:32:42.846 ERROR \[Hydroscat\] processRecord(): record too short(29):
' Sleep when memory full: 0
** 08:32:42.851 ERROR \[Hydroscat\] processRecord(): record too short(24):
' Start on power up: 0
** 08:32:42.857 ERROR \[Hydroscat\] processRecord(): record too short(23):
'Burst mode: 0 (off) .
** 08:32:42.863 ERROR \[Hydroscat\] processRecord(): record too short(26):
' Warmup time: 0 seconds
** 08:32:42.869 ERROR \[Hydroscat\] processRecord(): record too short(45):
' Burst duration: 0 seconds (not in effect)
** 08:32:42.875 ERROR \[Hydroscat\] processRecord(): record too short(42):
' Burst cycle: 0 minutes (not in effect)
** 08:32:42.881 ERROR \[Hydroscat\] processRecord(): record too short(43):
' Total duration: 0 hours (not in effect)
** 08:32:42.887 ERROR \[Hydroscat\] processRecord(): record too short(19):
'Shutter control:
** 08:32:42.893 ERROR \[Hydroscat\] processRecord(): record too short(33):
' Shutter enabled: 0 (DISABLED)
** 08:32:42.898 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Automatic open/close: 0
** 08:32:42.904 ERROR \[Hydroscat\] processRecord(): record too short(27):
' Open/close time: 6 secs
** 08:32:42.910 ERROR \[Hydroscat\] processRecord(): record too short(22):
' Open direction: CW
** 08:32:42.916 ERROR \[Hydroscat\] processRecord(): record too short(28):
' Shutter state is UNKNOWN
** The driver then processes records normally without fault (tested for 20 minutes)
\\
* Ashtec GPS driver
** Upon application of power,
*** The DG16 runs a built-in self test of its internal memory, and thereafter periodically self-tests various functions during normal operation.&nbsp;&nbsp; Test results are stored for output on command.
*** After self test, the DG16 initializes its battery-backed RAM. If the battery-backed RAM fails self-test (due, for example, to a low battery backup condition), the DG16 clears and reports the loss of stored data, then initializes its channels and begins searching for all satellites within the field of view of its antenna.&nbsp;
*** $PASHQ,HST to view results of self-diagnostic
*** Time to First Fix (TTFF).
**** Re-acquisition 3 seconds
**** Hot Start 11 seconds
**** Warm Start 35 seconds
**** Cold Start 90 seconds
*** The *$PASHQ,RIO* command queries for the receiver's configuration. The response message includes version numbers for the processor and channel firmware, a list of installed options, and the receiver's serial identification number.&nbsp; The response is output in the format:*$PASHR,RIO,f1,f2,f3,f4,f5*cc*\* f1 Receiver name (maximum 10 characters)
**** f2 Main processor firmware version (maximum 10 characters)
**** f3 Channel Firmware version (maximum 10 characters). If not applicable, this field is empty
**** f4 Option setting (maximum 42 characters). ASCII characters represent installed options.
**** f5 Receiver serial number (maximum 20 characters). Underscores represent blank fields
**** cc Checksum. XOR (exclusive or) of all characters between, but not including, the dollar sign ($) and asterisk (*y) characters
**** Option Description: (typical string looks like *$PASHR,RIO,DG16,GM00,,1OPUBKLE_C-NYXDR--, 710029150420*4D*:-) \* Position/raw update rate:&nbsp; \[W = 20 Hz\], \[T = 10 Hz\], \[5 = 5 Hz\], \[2 = 2 Hz\], \[1 = 1 Hz\],
**** \[O\] Raw data output
**** \[P\] Carrier phase tracking
**** \[U\] Differential RTCM - remote station
**** \[B\] Differential RTCM - base station
**** \[K\] RTCM Type 18/19 message generation (available only with RTCM base option)
**** \[L\] Timing pulse output (1PPS)
**** \[E\] Photogrammetry event marker
**** \[C\] Strobe correlator
**** \[N\] Beacon (Not applicable to DG14)
**** \[Y\] SBAS
**** \[X\] User-defined messaging (Not applicable to DG14)
**** \[D\] Multi-base differential
**** \[R\] Third serial port (C) (Not applicable to DG14)
**** \[A\] Altitude limit removed
**** \[V\] Speed limit removed
** After the DG16 is powered and running, you must send commands in order to receive data (such as antenna position).
** When using a terminal, make sure CRLF outgoing is enabled
** The commands used with the DG16 are divided into two groups: set commands and query commands.&nbsp;&nbsp; Use Set commands to change the DG16's operating parameters or turn on or off output messages. Set commands begin with the command string $PASHS.&nbsp;&nbsp; A Set cmd is acknowledged with $PASHR,ACK*3D.
** Use Query commands to request information from the DG16, such as the current operating parameters, current position, or DGPS status. Query commands begin with the command string $PASHQ.&nbsp;
** $PASHQ,STA (crlf) to query which satellites are locked&nbsp;and signal strength.
*** TIME: 18:38:31 UTC
\\
LOCKED:03 23 16
\\
COUNT :54 26 17
** NMEA 0183 ASCII byte strings following a dollar sign ($) character&nbsp; Data fields are separated by commas,&nbsp;Checksum character delimiter and NMEA checksum bytes are recognized by the DG16 but are optional. The hexadecimal checksum is computed by exclusive OR-ing all of the bytes in the message between, but not including, the dollar sign ($) and the asterisk (*y) .&nbsp;&nbsp;Messages end with the standard NMEA message terminator characters \[CRLF\].
** &nbsp;
** $PASHS,NME,POS,A,ON,1&nbsp;&nbsp; comprehensive position information through port A at a set rate (1HZ)
*** $PASHR,POS,0,08,164152.90,3721.06962,N,12156.12176,W,+00003.16,????,008.64,000.55,+000.03,01.7,01.0,01.4,00.9,GH00*20
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** || Parm || Description || Range (FUL/STD) || Example ||
| m1 | UTC time (hhmmss.s) of the position fix | 0 to 235959.99 | 174807.00, |
| m2 | Latitude of the position fix (ddmm.mmmmm) | 0 to 9000.00000 | , |
| c3 | Latitude sector | N or S | , |
| m4 | Longitude of the position fix (dddmm.mmmmm) | 0 to 18000.00000 | , |
| c5 | Longitude sector | E or W | , |
| d6 | GPS quality indicator \\
• 0---Invalid position or position not available \\
• 1---GPS Standard Positioning Service (SPS) \\
mode (C/A code), fix valid \\
• 2---Differential GPS, SPS mode, fix valid \\
• 3---GPS Precise Positioning Service (PPS) \\
mode (P-code). N/A for DG16 \\
• 4---Real Time Kinematic. System used in RTK \\
mode with fixed integers. N/A for DG16 \\
• 5---Float RTK. Satellite system used in RTK \\
mode, floating integers. N/A for DG16 \\
• 6---Estimated (dead reckoning) mode \\
• 7---Manual input mode \\
• 8---Simulator mode | 0, 1, 2, 6, 7, or 8 | 0, |
| d7 | Number of satellites used in position computation | 3 to 14 | 00, |
| d8 | HDOP (horizontal dilution of precision) | 00.0 to 99.9 | , |
| f9 | Altitude above Mean Sea Level (geoidal height) | \-1000.00 to \\
18000.00 | , |
| c10 | Altitude unit of measure (always M) | M | M, |
| d11 | Geoidal separation value | \-999.99 to 999.99 | , |
| c12 | Geoidal separation unit of measure (always M) | M | M, |
| d13 | Age of differential corrections (seconds) | 0 to 999.999 | , |
| d14 | Differential base station ID number | 0 to 1023 | ,\* |
| hh | Checksum | 2-character hex | 45 |
| | | | |
\\
** AshtecApp Test results
** ./ashtechapp \-dev /dev/ttyS7
*** 08:48:27.572 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 08:48:27.604 WARN \[GpsUtils\] Not a GGA sentence: S,NME,ALL,A,OFF
*** 08:48:27.627 WARN \[GpsUtils\] Not a GGA sentence: $PASHS,NME,GGA,A,ON
*** 08:48:48.432 ERROR \[SerialDriver\] gpsDriver::readRecord() - serial device timed out
*** 08:48:48.436 ERROR \[StreamSerialDriver\] run() - Got error from readRecord()
** ./ashtechapp \-dev /dev/ttyS6
** minicom session
*** $GPGGA,174807.00,,,,,0,00,,,M,,M,,*45
*** $GPGGA,215157.00,,,,,0,00,,,M,,M,,*4D
\\
* BluefinBatt
** ./bluefinBatt \-n 3 \-dev /dev/ttyS9&nbsp;
** Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig
/log4cxx.cfg"
16:14:15.082 WARN \[BluefinBattApp\] Using fake values: nBatteries=1, abortVoltage
=9, terminateVoltage=5
16:14:15.090 INFO \[BluefinBatt\] BluefineBatt::init() - 1 batteries on 10 second
interval
16:14:15.092 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
16:14:15.094 ERROR \[SerialDevice\] cfsetospeed() failed
16:14:15.099 INFO \[BluefinBatt\] BluefinBatt::init() - querying for batt ids
16:14:15.103 INFO \[BluefinBatt\] BluefinBatt::init() - battery echo is \!?
\\
* Crossbow (gyro compass)
** auv@mvc-debian4:~/prj/auv-linux/onboard/devices/crossbow$ ./crossbow \-dev /dev/ttyS11
Reading log4cxx configuration file "/home/auv/prj/auv-linux/onboard/sampleConfig/log4cxx.cfg"
16:12:05.748 ERROR \[AttributeParser\] Attributes::parse() - Couldn't open Crossbow
** Constants attributes file "/home/auv/prj/auv-linux/onboard/sampleConfig/crossbo
w.cfg"
** 16:12:05.754 ERROR \[Crossbow\] VehicleConstants \-\- Caught exception while loading&nbsp;vehicle constants
IOR:010000001300000049444c3a6175762f4168727349463a312e30000001000000000000006400
0000010102000d0000003133342e38392e33322e313600000d0a0e000000fe45c0d5470000329100
0000000200000200000000000000080000000100000000545441010000001c000000010000000100
01000100000001000105090101000100000009010100
16:12:05.788 INFO \[AuvApplication\] You should override AuvApplication::run()
** 16:12:05.790 ERROR \[SerialDevice\] cfsetispeed() to baud 38400 failed
16:12:05.792 ERROR \[SerialDevice\] cfsetospeed() failed
16:12:05.794 ERROR \[SerialDevice\] \_F_SETFL failed
** 16:12:05.797 ERROR \[SerialDevice\] \_F_SETFL failed
** AuvSystem::milliSleep \-\- Sleeping for 0 secs and 1000000000 nsec16:12:05.807 INF
O \[Crossbow\] Crossbow.cc: device->read succeeded
16:12:05.809 INFO \[Crossbow\] Crossbow.cc: I think the serial number is 427819033
5 (ff0000ff)
16:12:05.819 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:06.830 ERROR \[Crossbow\] processRecord(): Checksum does not agree
16:12:07.834 ERROR \[Crossbow\] processRecord(): Checksum does not agree
** &nbsp;
* seabird
** ./seabird37 \-n ctdDriver2 \-dev tcp:sci1-dmo1:10001
*** 06:21:16.646 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:16.648 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:16.651 DEBUG \[CorbaUtils\] call nameService->bind_new_context() for CTD
06:21:16.661 DEBUG \[CorbaUtils\] context already bound
06:21:16.665 DEBUG \[CorbaUtils\] call bind() for CTD
06:21:16.675 DEBUG \[CorbaUtils\] invoke prepareToRun()
*** 06:21:16.677 DEBUG \[CorbaUtils\] Activate POA manager
06:21:16.679 DEBUG \[CorbaUtils\] Run the ORB in a new thread
06:21:16.681 DEBUG \[CorbaUtils\] return from registerService()
*** 06:21:16.684 DEBUG \[Seabird37App\] Leaving Seabird37App.initialize()
06:21:16.686 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 06:21:17.655 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:17.657 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:17.660 DEBUG \[SerialDevice\] readUntil: read ?
06:21:17.662 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:17.664 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:18.671 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:18.673 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:18.675 DEBUG \[SerialDevice\] readUntil: read ?
06:21:18.677 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:18.679 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:19.683 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:19.685 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:19.687 DEBUG \[SerialDevice\] readUntil: read ?
06:21:19.689 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:19.691 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:20.695 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:20.697 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:20.699 DEBUG \[SerialDevice\] readUntil: read ?
06:21:20.701 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:20.703 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.707 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.709 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.711 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.713 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.715 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.717 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.719 DEBUG \[SerialDevice\] readUntil: read ?
06:21:21.721 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.723 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:21.725 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:21.727 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:21.729 DEBUG \[SerialDevice\] readUntil: read P
06:21:21.731 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:21.733 DEBUG \[Seabird37\] setLineFormat
*** 06:21:21.735 DEBUG \[SerialDevice\] printTermios() - not implemented for socket
06:21:21.737 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:22.743 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:22.745 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:22.747 DEBUG \[SerialDevice\] readUntil: read
06:21:22.749 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:22.751 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:23.755 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:23.757 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:23.759 DEBUG \[SerialDevice\] readUntil: read
06:21:23.761 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:23.763 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:24.767 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:24.769 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:24.771 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:24.773 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:24.775 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:25.779 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:25.781 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:25.783 DEBUG \[SerialDevice\] readUntil: read
06:21:25.785 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:25.787 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.791 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.793 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.795 DEBUG \[SerialDevice\] readUntil: read
06:21:26.797 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.799 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.801 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.803 DEBUG \[SerialDevice\] readUntil: read
*** 06:21:26.805 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.807 DEBUG \[SerialDevice\] (null): wrote 5 chars: STOP
06:21:26.809 DEBUG \[SerialDevice\] (null): wrote 1 chars:
06:21:26.811 DEBUG \[SerialDevice\] readUntil: term = S>
*** 06:21:26.813 DEBUG \[SerialDevice\] readUntil: read S
06:21:26.816 DEBUG \[SerialDevice\] SerialDevice::confirm() - Timed Out
06:21:26.817 DEBUG \[SerialDriver\] setState() - newState = 3
06:21:26.819 DEBUG \[EventProvider\] publish() - publisher=CTD, type=NewState
06:21:26.821 DEBUG \[EventProvider\] publish() - proxy->push_structured_event
06:21:26.827 DEBUG \[EventProvider\] EventProvider::publish() \-&nbsp; event pushed
06:21:26.829 DEBUG \[EventProvider\] publish() \-&nbsp; return
06:21:26.831 ERROR \[AuvService\] CTD::initialize() failed after 2 tries
\\
** parosci pressure sensor
*** ./parosci
*** 06:39:37.270 DEBUG \[SerialDevice\] Current ispeed setting: 13
*** 06:39:37.271 DEBUG \[SerialDevice\] Current ospeed setting: 13
*** 06:39:37.273 DEBUG \[SerialDevice\] change to speed setting 9600
*** 06:39:37.275 ERROR \[SerialDevice\] cfsetispeed() to baud 9600 failed
06:39:37.277 ERROR \[SerialDevice\] cfsetospeed() failed
06:39:37.279 DEBUG \[SerialDevice\] New ispeed setting: 13
*** 06:39:37.281 DEBUG \[SerialDevice\] New ospeed setting: 13
*** 06:39:37.282 DEBUG \[SerialDevice\] SerialDevice: done...
*** 06:39:37.404 ERROR \[Parosci\] Failed to read serial number
06:39:37.407 ERROR \[AuvService\] Failed to read serial numbre
** teledyne - dvl&nbsp;
*** ./teledyne \-dev /dev/ttyS5
*** ...Timed out while looking for "workSite" service
13:32:31.476 INFO \[AuvApplication\] You should override AuvApplication::run()
*** 13:32:31.730 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.034 ERROR \[TeledyneDvl\]&nbsp; wakeupDvl: Failed to establish comms with DVL
13:32:32.886 INFO \[TeledyneDvl\]
\[BREAK Wakeup A\]
Navigator Broadband ADCP Version 9.18
RD Instruments (c) 1996-2004
All Rights Reserved.
>
13:32:32.913 INFO \[TeledyneDvl\] PD0
>
13:32:32.926 INFO \[TeledyneDvl\] BK1
>
13:32:32.945 INFO \[TeledyneDvl\] TP00:00.33
>
13:32:32.966 INFO \[TeledyneDvl\] TE00:00:0.00
>
13:32:32.990 INFO \[TeledyneDvl\] BL,10,010,100
>
13:32:33.006 INFO \[TeledyneDvl\] BP001
>
13:32:33.026 INFO \[TeledyneDvl\] CF11010
>
13:32:33.040 INFO \[TeledyneDvl\] CB611
>
&nbsp;Baud index = 6.
13:32:33.041 INFO \[TeledyneDvl\] initialize - Baud rate set to 15.
*** 13:32:33.054 INFO \[TeledyneDvl\] EX10011
>
13:32:33.072 INFO \[TeledyneDvl\] EA+04500
>
13:32:33.084 INFO \[TeledyneDvl\] WP0001
>
13:32:33.094 INFO \[TeledyneDvl\] WN25
>
13:32:33.094 INFO \[TeledyneDvl\] initialize - The number of cells is 25.
*** 13:32:33.102 INFO \[TeledyneDvl\] WV210
>
13:32:33.103 INFO \[TeledyneDvl\] initialize - 14 valid commands read in from dvl.
cfg.
*** 13:32:33.113 INFO \[TeledyneDvl\] EC1490
>
13:32:33.119 INFO \[TeledyneDvl\]
*** &nbsp;
*** &nbsp;

h5. mvc-debian4

# install debian 4.0 - root password is dorado1, auv user password is dorado1.&nbsp;&nbsp; hostname is mvc-debian4
# \[root\] install (aptitude and apt-get) the debian packages needed for auv-pkgs
# \[root\] cvs checkout auv-pkgs,&nbsp;build and install each using the supplied '*.bat" scripts&nbsp;
# \[auv\]&nbsp;cvs checkout&nbsp;auv-shared and build (make in top dir)
# \[auv\] cvs checkout auv-linux,&nbsp;comment out the lines with javac (112)&nbsp;and idlj (135)&nbsp;in onboard/taskIF/Makefile, in onboard 'make all'
# &nbsp;

misc

tar cvzf foo.tgz cps100]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114423</id>
</property>
</object>
<object class="Label" package="com.atlassian.confluence.labels">
<id name="id">9142273</id>
<property name="name"><![CDATA[favourite]]></property>
<property name="owner"><![CDATA[kanna]]></property>
<property name="namespace"><![CDATA[my]]></property>
<property name="creationDate">2009-02-02 11:27:00.080</property>
<property name="lastModificationDate">2009-02-02 11:27:26.187</property>
</object>
<object class="Label" package="com.atlassian.confluence.labels">
<id name="id">6422536</id>
<property name="name"><![CDATA[favourite]]></property>
<property name="owner"><![CDATA[headley]]></property>
<property name="namespace"><![CDATA[my]]></property>
<property name="creationDate">2008-10-09 22:18:04.253</property>
<property name="lastModificationDate">2026-02-03 14:36:41.433</property>
</object>
<object class="Label" package="com.atlassian.confluence.labels">
<id name="id">13795329</id>
<property name="name"><![CDATA[favourite]]></property>
<property name="owner"><![CDATA[bgarau]]></property>
<property name="namespace"><![CDATA[my]]></property>
<property name="creationDate">2010-06-14 21:54:04.303</property>
<property name="lastModificationDate">2010-08-17 17:21:47.447</property>
</object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">18579613</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">20971526</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">20971526</property>
<property name="key"><![CDATA[net.customware.confluence.plugin.toc:cachedVersion]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[31]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">18579617</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">20971526</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">20971526</property>
<property name="key"><![CDATA[net.customware.confluence.plugin.toc:cached:1]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[<div>
<ul>
<ul>
    <li><a href='#trex-ODSSwebAPI-Initialservicecallsconsidered.'>Initial service calls considered.</a></li>
<ul>
    <li><a href='#trex-ODSSwebAPI-Generalservices'>General services</a></li>
<ul>
    <li><a href='#trex-ODSSwebAPI-getshorthelp'>get short help</a></li>
    <li><a href='#trex-ODSSwebAPI-TREXversion'>TREX version</a></li>
</ul>
    <li><a href='#trex-ODSSwebAPI-Tickanddaterelatedservices'>Tick and date related services</a></li>
<ul>
    <li><a href='#trex-ODSSwebAPI-Currenttick'>Current tick</a></li>
    <li><a href='#trex-ODSSwebAPI-Nexttick'>Next tick</a></li>
    <li><a href='#trex-ODSSwebAPI-Initialtick'>Initial tick</a></li>
    <li><a href='#trex-ODSSwebAPI-Finaltick'>Final tick</a></li>
    <li><a href='#trex-ODSSwebAPI-tickinfo'>tick info</a></li>
    <li><a href='#trex-ODSSwebAPI-tickatadate'>tick at a date</a></li>
    <li><a href='#trex-ODSSwebAPI-tickrate%2Fduration'>tick rate/duration</a></li>
    <li><a href='#trex-ODSSwebAPI-Waitfornewtick'>Wait for new tick</a></li>
</ul>
    <li><a href='#trex-ODSSwebAPI-Timelinesandgoalsservices'>Timelines and goals services</a></li>
<ul>
    <li><a href='#trex-ODSSwebAPI-Listoftrexexistingtimelines'>List of trex existing timelines</a></li>
    <li><a href='#trex-ODSSwebAPI-Contentsofatimeline'>Contents of a timeline</a></li>
    <li><a href='#trex-ODSSwebAPI-Postanewgoal'>Post a new goal</a></li>
    <li><a href='#trex-ODSSwebAPI-Modifyanexistinggoal'>Modify an existing goal</a></li>
    <li><a href='#trex-ODSSwebAPI-Cancelagoal'>Cancel a goal</a></li>
</ul>
</ul>
    <li><a href='#trex-ODSSwebAPI-Pushservicesenvisioned'>Push services envisioned</a></li>
</ul>
</ul></div>]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3113885</property>
<property name="key"><![CDATA[atlassian.dynamictasklist:NavigationDriver]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[<com.atlassian.confluence.extra.dynamictasklist.model.TaskList>
  <name>NavigationDrivers</name>
  <tasks>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>ashtec gps</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>bluefinBatt</name>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>3dmgx1</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>parosci pressure</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>tailcone</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>teledyne dvl</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
  </tasks>
</com.atlassian.confluence.extra.dynamictasklist.model.TaskList>]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">9372360</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">13926458</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">13926456</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3114074</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">11239490</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">11239490</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">751</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">9797697</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3114074</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">8912916</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">8913153</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3637442</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">8912901</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">9371751</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">8912903</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3113885</property>
<property name="key"><![CDATA[atlassian.dynamictasklist:ScienceDriver]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[<com.atlassian.confluence.extra.dynamictasklist.model.TaskList>
  <name>ScienceDrivers</name>
  <tasks>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>seabird ctd</name>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>hydroscat</name>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>biolume</name>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>lisst</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>gulper</name>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
  </tasks>
</com.atlassian.confluence.extra.dynamictasklist.model.TaskList>]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3113885</property>
<property name="key"><![CDATA[atlassian.dynamictasklist:thingsToD]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[<com.atlassian.confluence.extra.dynamictasklist.model.TaskList>
  <name>thingsToDo</name>
  <tasks>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>ashtech gps</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>bluefinBatt</name>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>3dmxg1 compass</name>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>parosci pressure</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>sonardyne</name>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>tailcone</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>teledyne dvl</name>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
  </tasks>
</com.atlassian.confluence.extra.dynamictasklist.model.TaskList>]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">9372360</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">18579613</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">8912916</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3113885</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">18579617</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">8912901</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">8912903</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3637442</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">763</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">11796734</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3637442</property>
<property name="key"><![CDATA[atlassian.dynamictasklist:NavigationDriver]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[<com.atlassian.confluence.extra.dynamictasklist.model.TaskList>
  <name>NavigationDrivers</name>
  <tasks>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>aschtec GPS</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>BluefinBatt</name>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>3dmgx1 Compass</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>Parosci Pressure</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>Tailcone</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>Teledyne DVL</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
  </tasks>
</com.atlassian.confluence.extra.dynamictasklist.model.TaskList>]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">8356111</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3114460</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">10355444</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">13926458</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">8913153</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3637442</property>
<property name="key"><![CDATA[atlassian.dynamictasklist:ScienceDriver]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[<com.atlassian.confluence.extra.dynamictasklist.model.TaskList>
  <name>ScienceDrivers</name>
  <tasks>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>Seabird CTD</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>Hydroscat Backscatter</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>Biolume</name>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
    <com.atlassian.confluence.extra.dynamictasklist.model.Task>
      <name>Lisst</name>
      <completer>tm</completer>
    </com.atlassian.confluence.extra.dynamictasklist.model.Task>
  </tasks>
</com.atlassian.confluence.extra.dynamictasklist.model.TaskList>]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">9797756</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">9371751</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">9797697</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">13926456</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">17465421</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">8356111</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">751</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3114460</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">10355444</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">763</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">17465421</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">11796734</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">10912189</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">20971526</property>
<property name="key"><![CDATA[net.customware.confluence.plugin.toc:tocCount]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[1]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3113885</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">9797756</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">10912189</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
</hibernate-generic>