Merge branch 'branch-1.2' of ssh://git.gag.com/scm/git/fw/altos into branch-1.2
authorBdale Garbee <bdale@gag.com>
Tue, 21 May 2013 15:31:48 +0000 (09:31 -0600)
committerBdale Garbee <bdale@gag.com>
Tue, 21 May 2013 15:31:48 +0000 (09:31 -0600)
altoslib/AltosRecordMM.java
doc/Makefile
doc/altusmetrum.xsl
doc/release-notes-1.2.1.xsl [new file with mode: 0644]
doc/release-notes-1.2.xsl
libaltos/Makefile.am
libaltos/libaltos.c
src/cc1111/ao_usb.c
src/core/ao_usb.h

index bf64192c5888abe1a75e8050e72d2329db4fb154..d697111ccb186d287ae4ac780fc2c5164369c7c2 100644 (file)
@@ -71,11 +71,11 @@ public class AltosRecordMM extends AltosRecord {
        }
 
        public double main_voltage() {
-               return pyro(sense[1]);
+               return pyro(sense[5]);
        }
 
        public double drogue_voltage() {
-               return pyro(sense[0]);
+               return pyro(sense[4]);
        }
 
        public double temperature() {
index 7c4da29ecf1c96df4ee5e87ad207e666b2271ff5..06346a2d5d5c2358e015bcd66e93d9fefbbefca0 100644 (file)
@@ -10,7 +10,8 @@ RELNOTES=\
        release-notes-1.0.1.html \
        release-notes-1.1.html \
        release-notes-1.1.1.html \
-       release-notes-1.2.html
+       release-notes-1.2.html \
+       release-notes-1.2.1.html
 
 RELNOTES_XSL=$(RELNOTES:.html=.xsl)
 HTML=altusmetrum.html altos.html telemetry.html companion.html micropeak.html $(RELNOTES)
index 294f30ac08bab770e821e445a8567d199eb15234..dfd72ab46f99f8fd425ece356f0fe149b01771b5 100644 (file)
     </legalnotice>
     <revhistory>
       <revision>
-       <revnumber>1.2</revnumber>
-       <date>14 April 2013</date>
+       <revnumber>1.2.1</revnumber>
+       <date>21 May 2013</date>
        <revremark>
          Updated for software version 1.2. Version 1.2 adds support
          for TeleBT and AltosDroid. It also adds a few minor features
-         and fixes a few minor bugs in AltosUI and the AltOS firmware.
+         and fixes bugs in AltosUI and the AltOS firmware.
+       </revremark>
+      </revision>
+      <revision>
+       <revnumber>1.2</revnumber>
+       <date>18 April 2013</date>
+       <revremark>
+         Updated for software version 1.2. Version 1.2 adds support
+         for MicroPeak and the MicroPeak USB interface.
        </revremark>
       </revision>
       <revision>
@@ -1105,14 +1113,15 @@ NAR #88757, TRA #12200
         flash memory.
       </para>
       <para>
-        Once a flight record is selected, a window with two tabs is
+        Once a flight record is selected, a window with four tabs is
         opened. The first tab contains a graph with acceleration
         (blue), velocity (green) and altitude (red) of the flight,
-        measured in metric units. The
-        apogee(yellow) and main(magenta) igniter voltages are also
-        displayed; high voltages indicate continuity, low voltages
-        indicate open circuits. The second tab contains some basic
-       flight statistics.
+        measured in metric units. The apogee(yellow) and main(magenta)
+        igniter voltages are also displayed; high voltages indicate
+        continuity, low voltages indicate open circuits. The second
+        tab lets you configure which data to show in the graph.  The
+        third contains some basic flight statistics while the fourth
+        has a map with the ground track of the flight displayed.
       </para>
       <para>
         The graph can be zoomed into a particular area by clicking and
@@ -2851,6 +2860,7 @@ NAR #88757, TRA #12200
   <appendix
       xmlns:xi="http://www.w3.org/2001/XInclude">
     <title>Release Notes</title>
+    <simplesect><title>Version 1.21</title><xi:include href="release-notes-1.2.1.xsl"  xpointer="xpointer(/article/*)"/></simplesect>
     <simplesect><title>Version 1.2</title><xi:include  href="release-notes-1.2.xsl"  xpointer="xpointer(/article/*)"/></simplesect>
     <simplesect><title>Version 1.1.1</title><xi:include        href="release-notes-1.1.1.xsl"  xpointer="xpointer(/article/*)"/></simplesect>
     <simplesect><title>Version 1.1</title><xi:include  href="release-notes-1.1.xsl"  xpointer="xpointer(/article/*)"/></simplesect>
diff --git a/doc/release-notes-1.2.1.xsl b/doc/release-notes-1.2.1.xsl
new file mode 100644 (file)
index 0000000..5f9aef0
--- /dev/null
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"/usr/share/xml/docbook/schema/dtd/4.5/docbookx.dtd">
+
+<article>
+  <para>
+    Version 1.2.1 is a minor release. It adds support for TeleBT and
+    the AltosDroid application, provides several new features in
+    AltosUI and fixes some bugs in the AltOS firmware.
+  </para>
+  <para>
+    AltOS Firmware Changes
+    <itemizedlist>
+      <listitem>
+       Add support for TeleBT
+      </listitem>
+      <listitem>
+       In TeleMini recovery mode (when booted with the outer two
+       debug pins connected together), the radio parameters are also
+       set back to defaults (434.550MHz, N0CALL, factory radio cal).
+      </listitem>
+      <listitem>
+       Add support for reflashing the SkyTraq GPS chips. This
+       requires special host-side code which currently only exists
+       for Linux.
+      </listitem>
+      <listitem>
+       Correct Kalman filter model error covariance matrix. The
+       values used previously assumed continuous measurements instead
+       of discrete measurements.
+      </listitem>
+      <listitem>
+       Fix some bugs in the USB driver for TeleMetrum and TeleDongle
+       that affected Windows users.
+      </listitem>
+      <listitem>
+       Adjusted the automatic gain control parameters that affect
+       receive performance for TeleDongle. Field tests indicate that this
+       may improve receive performance somewhat.
+      </listitem>
+    </itemizedlist>
+  </para>
+  <para>
+    AltosUI Changes
+    <itemizedlist>
+      <listitem>
+       Handle missing GPS lock in 'Descent' tab. Previously, if the
+       GPS position of the pad was unknown, an exception would be
+       raised, breaking the Descent tab contents.
+      </listitem>
+      <listitem>
+       Improve the graph, adding tool-tips to show values near the
+       cursor and making the displayed set of values configurable,
+       adding all of the flight data as options while leaving the
+       default settings alone so that the graph starts by showing
+       height, speed and acceleration.
+      </listitem>
+      <listitem>
+       Make the initial position of the AltosUI top level window
+       configurable. Along with this change, the other windows will
+       pop up at 'sensible' places now, instead of on top of one
+       another.
+      </listitem>
+      <listitem>
+       Add callsign to Monitor idle window and connecting
+       dialogs. This makes it clear which callsign is being used so
+       that the operator will be aware that it must match the flight
+       computer value or no communication will work.
+      </listitem>
+      <listitem>
+       When downloading flight data, display the block number so that
+       the user has some sense of progress. Unfortunately, we don't
+       know how many blocks will need to be downloaded, but at least
+       it isn't just sitting there doing nothing for a long time.
+      </listitem>
+      <listitem>
+       Add GPS data and a map to the graph window. This lets you see
+       a complete summary of the flight without needing to 'replay'
+       the whole thing.
+      </listitem>
+    </itemizedlist>
+  </para>
+</article>
index b254c7b5affeaaa236ac2d8e3eb69333c628c5f3..64ba46a90d2d269a4560d5b70a9cc1c576a56db9 100644 (file)
@@ -4,75 +4,24 @@
 
 <article>
   <para>
-    Version 1.2 is a minor release. It provides a few new features in AltosUI
-    and the AltOS firmware and fixes bugs.
+    Version 1.2 is a major release. It adds support for MicroPeak and
+    the MicroPeak USB adapter.
   </para>
   <para>
     AltOS Firmware Changes
     <itemizedlist>
-      <listitem>
-       In TeleMini recovery mode (when booted with the outer two
-       debug pins connected together), the radio parameters are also
-       set back to defaults (434.550MHz, N0CALL, factory radio cal).
-      </listitem>
-      <listitem>
-       Add support for reflashing the SkyTraq GPS chips. This
-       requires special host-side code which currently only exists
-       for Linux.
-      </listitem>
       <listitem>
        Add MicroPeak support. This includes support for the ATtiny85
        processor and adaptations to the core code to allow for
        devices too small to run the multi-tasking scheduler.
       </listitem>
-      <listitem>
-       Correct Kalman filter model error covariance matrix. The
-       values used previously assumed continuous measurements instead
-       of discrete measurements.
-      </listitem>
     </itemizedlist>
   </para>
   <para>
-    AltosUI Changes
+    MicroPeak UI changes
     <itemizedlist>
       <listitem>
-       Handle missing GPS lock in 'Descent' tab. Previously, if the
-       GPS position of the pad was unknown, an exception would be
-       raised, breaking the Descent tab contents.
-      </listitem>
-      <listitem>
-       Add preliminary TeleMega support, including configuration,
-       data download and analysis.
-      </listitem>
-      <listitem>
-       Improve the graph, adding tool-tips to show values near the
-       cursor and making the displayed set of values configurable,
-       adding all of the flight data as options while leaving the
-       default settings alone so that the graph starts by showing
-       height, speed and acceleration.
-      </listitem>
-      <listitem>
-       Make the initial position of the AltosUI top level window
-       configurable. Along with this change, the other windows will
-       pop up at 'sensible' places now, instead of on top of one
-       another.
-      </listitem>
-      <listitem>
-       Add callsign to Monitor idle window and connecting
-       dialogs. This makes it clear which callsign is being used so
-       that the operator will be aware that it must match the flight
-       computer value or no communication will work.
-      </listitem>
-      <listitem>
-       When downloading flight data, display the block number so that
-       the user has some sense of progress. Unfortunately, we don't
-       know how many blocks will need to be downloaded, but at least
-       it isn't just sitting there doing nothing for a long time.
-      </listitem>
-      <listitem>
-       Add GPS data and a map to the graph window. This lets you see
-       a complete summary of the flight without needing to 'replay'
-       the whole thing.
+       Added this new application
       </listitem>
     </itemizedlist>
   </para>
index b5ab1ddb0d87e573679ecd57ae1c1190cb3fea7a..415495586961ec397d1c4f2aaecdc53b3e629d3d 100644 (file)
@@ -42,7 +42,7 @@ MINGCC64=x86_64-w64-mingw32-gcc
 MINGFLAGS=-Wall -DWINDOWS -DBUILD_DLL -I$(JVM_INCLUDE)
 MINGLIBS=-lsetupapi
 
-fat: altos.dll altos64.dll
+fat: all altos.dll altos64.dll
 
 altos.dll: $(libaltos_la_SOURCES)
        $(MINGCC32) -o $@ $(MINGFLAGS) -shared $(libaltos_la_SOURCES) $(MINGLIBS)
index fc949c7020a2e8143f5c5f83238ebda3cb4b1003..4a6363edc7a069c4e0f83d930d24d9d7bdea4b2c 100644 (file)
@@ -994,6 +994,11 @@ log_message(char *fmt, ...)
        if (!log)
                log = fopen("\\temp\\altos.txt", "w");
        if (log) {
+               SYSTEMTIME time;
+               GetLocalTime(&time);
+               fprintf (log, "%4d-%02d-%02d %2d:%02d:%02d. ", 
+                        time.wYear, time.wMonth, time.wDay,
+                        time.wHour, time.wMinute, time.wSecond);
                va_start(a, fmt);
                vfprintf(log, fmt, a);
                va_end(a);
@@ -1339,6 +1344,7 @@ altos_open(struct altos_device *device)
                file->handle = open_serial(full_name);
                if (file->handle != INVALID_HANDLE_VALUE)
                        break;
+               altos_set_last_windows_error();
                Sleep(100);
        }
        
@@ -1373,13 +1379,19 @@ altos_open(struct altos_device *device)
 PUBLIC void
 altos_close(struct altos_file *file)
 {
-       if (file->handle != INVALID_HANDLE_VALUE) {
-               CloseHandle(file->handle);
+       HANDLE  handle = file->handle;
+       if (handle != INVALID_HANDLE_VALUE) {
+               HANDLE  ov_read = file->ov_read.hEvent;
+               HANDLE  ov_write = file->ov_write.hEvent;
+               file->handle = INVALID_HANDLE_VALUE;
+               file->ov_read.hEvent = INVALID_HANDLE_VALUE;
+               file->ov_write.hEvent = INVALID_HANDLE_VALUE;
+               PurgeComm(handle, PURGE_RXABORT|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_TXCLEAR);
+               Sleep(100);
+               CloseHandle(handle);
                file->handle = INVALID_HANDLE_VALUE;
-               SetEvent(file->ov_read.hEvent);
-               SetEvent(file->ov_write.hEvent);
-               CloseHandle(file->ov_read.hEvent);
-               CloseHandle(file->ov_write.hEvent);
+               CloseHandle(ov_read);
+               CloseHandle(ov_write);
        }
 }
 
index 8bd2efdf73706e2c9060e02d389191fa2112f04b..a655d1be903589374bae5c5d1af63244ac873697 100644 (file)
@@ -152,19 +152,17 @@ ao_usb_ep0_fill(void)
                *ao_usb_ep0_out_data++ = USBFIFO[0];
 }
 
-void
+static void
 ao_usb_ep0_queue_byte(uint8_t a)
 {
        ao_usb_ep0_in_buf[ao_usb_ep0_in_len++] = a;
 }
 
-void
+static void
 ao_usb_set_address(uint8_t address)
 {
        ao_usb_running = 1;
-       USBADDR = address | 0x80;
-       while (USBADDR & 0x80)
-               ;
+       USBADDR = address;
 }
 
 static void
@@ -191,24 +189,6 @@ ao_usb_ep0_setup(void)
        if (ao_usb_ep0_out_len != 0)
                return;
 
-       /* Figure out how to ACK the setup packet */
-       if (ao_usb_setup.dir_type_recip & AO_USB_DIR_IN) {
-               if (ao_usb_setup.length)
-                       ao_usb_ep0_state = AO_USB_EP0_DATA_IN;
-               else
-                       ao_usb_ep0_state = AO_USB_EP0_IDLE;
-       } else {
-               if (ao_usb_setup.length)
-                       ao_usb_ep0_state = AO_USB_EP0_DATA_OUT;
-               else
-                       ao_usb_ep0_state = AO_USB_EP0_IDLE;
-       }
-       USBINDEX = 0;
-       if (ao_usb_ep0_state == AO_USB_EP0_IDLE)
-               USBCS0 = USBCS0_CLR_OUTPKT_RDY | USBCS0_DATA_END;
-       else
-               USBCS0 = USBCS0_CLR_OUTPKT_RDY;
-
        ao_usb_ep0_in_data = ao_usb_ep0_in_buf;
        ao_usb_ep0_in_len = 0;
        switch(ao_usb_setup.dir_type_recip & AO_USB_SETUP_TYPE_MASK) {
@@ -274,10 +254,39 @@ ao_usb_ep0_setup(void)
                }
                break;
        }
-       if (ao_usb_ep0_state != AO_USB_EP0_DATA_OUT) {
+
+       /* Figure out how to ACK the setup packet and the
+        * next state
+        */
+       USBINDEX = 0;
+       if (ao_usb_ep0_in_len) {
+
+               /* Sending data back to the host
+                */
+               ao_usb_ep0_state = AO_USB_EP0_DATA_IN;
+               USBCS0 = USBCS0_CLR_OUTPKT_RDY;
                if (ao_usb_setup.length < ao_usb_ep0_in_len)
                        ao_usb_ep0_in_len = ao_usb_setup.length;
                ao_usb_ep0_flush();
+       } else if (ao_usb_ep0_out_len) {
+               
+               /* Receiving data from the host
+                */
+               ao_usb_ep0_state = AO_USB_EP0_DATA_OUT;
+               USBCS0 = USBCS0_CLR_OUTPKT_RDY;
+       } else if (ao_usb_setup.length) {
+
+               /* Uh-oh, the host expected to send or receive data
+                * and we don't know what to do.
+                */
+               ao_usb_ep0_state = AO_USB_EP0_STALL;
+               USBCS0 = USBCS0_CLR_OUTPKT_RDY | USBCS0_SEND_STALL;
+       } else {
+
+               /* Simple setup packet with no data
+                */
+               ao_usb_ep0_state = AO_USB_EP0_IDLE;
+               USBCS0 = USBCS0_CLR_OUTPKT_RDY | USBCS0_DATA_END;
        }
 }
 
@@ -299,12 +308,12 @@ ao_usb_ep0(void)
                USBINDEX = 0;
                cs0 = USBCS0;
                if (cs0 & USBCS0_SETUP_END) {
-                       ao_usb_ep0_state = AO_USB_EP0_IDLE;
                        USBCS0 = USBCS0_CLR_SETUP_END;
+                       ao_usb_ep0_state = AO_USB_EP0_IDLE;
                }
                if (cs0 & USBCS0_SENT_STALL) {
+                       USBCS0 = 0;
                        ao_usb_ep0_state = AO_USB_EP0_IDLE;
-                       USBCS0 &= ~USBCS0_SENT_STALL;
                }
                if (ao_usb_ep0_state == AO_USB_EP0_DATA_IN &&
                    (cs0 & USBCS0_INPKT_RDY) == 0)
@@ -318,12 +327,11 @@ ao_usb_ep0(void)
                                break;
                        case AO_USB_EP0_DATA_OUT:
                                ao_usb_ep0_fill();
-                               if (ao_usb_ep0_out_len == 0)
-                                       ao_usb_ep0_state = AO_USB_EP0_IDLE;
                                USBINDEX = 0;
-                               if (ao_usb_ep0_state == AO_USB_EP0_IDLE)
+                               if (ao_usb_ep0_out_len == 0) {
+                                       ao_usb_ep0_state = AO_USB_EP0_IDLE;
                                        USBCS0 = USBCS0_CLR_OUTPKT_RDY | USBCS0_DATA_END;
-                               else
+                               else
                                        USBCS0 = USBCS0_CLR_OUTPKT_RDY;
                                break;
                        }
index 4476ee6be99f4ffd76db8f6d651ff2171616d989..6bc77608ef331a8782b6be051c948deab9cdcc52 100644 (file)
@@ -114,6 +114,7 @@ extern __code __at (0x00aa) uint8_t ao_usb_descriptors [];
 #define AO_USB_EP0_IDLE                0
 #define AO_USB_EP0_DATA_IN     1
 #define AO_USB_EP0_DATA_OUT    2
+#define AO_USB_EP0_STALL       3
 
 #define LE_WORD(x)    ((x)&0xFF),((uint8_t) (((uint16_t) (x))>>8))