paparazzi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[paparazzi-commits] [4766] fix handling of doubles


From: Pascal Brisset
Subject: [paparazzi-commits] [4766] fix handling of doubles
Date: Tue, 30 Mar 2010 10:00:38 +0000

Revision: 4766
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4766
Author:   hecto
Date:     2010-03-30 10:00:29 +0000 (Tue, 30 Mar 2010)
Log Message:
-----------
 fix handling of doubles

Modified Paths:
--------------
    paparazzi3/trunk/sw/airborne/downlink.h
    paparazzi3/trunk/sw/airborne/sim/ivy_transport.h
    paparazzi3/trunk/sw/lib/ocaml/convert.c
    paparazzi3/trunk/sw/lib/ocaml/pprz.ml

Modified: paparazzi3/trunk/sw/airborne/downlink.h
===================================================================
--- paparazzi3/trunk/sw/airborne/downlink.h     2010-03-30 09:58:26 UTC (rev 
4765)
+++ paparazzi3/trunk/sw/airborne/downlink.h     2010-03-30 10:00:29 UTC (rev 
4766)
@@ -98,6 +98,7 @@
 #define DownlinkPutDoubleByAddr(_chan, _x) Transport(_chan, 
PutDoubleByAddr(_x))
 
 #define DownlinkPutFloatArray(_chan, _n, _x) Transport(_chan, 
PutFloatArray(_n, _x))
+#define DownlinkPutDoubleArray(_chan, _n, _x) Transport(_chan, 
PutDoubleArray(_n, _x))
 #define DownlinkPutInt16Array(_chan, _n, _x) Transport(_chan, 
PutInt16Array(_n, _x))
 #define DownlinkPutUint16Array(_chan, _n, _x) Transport(_chan, 
PutUint16Array(_n, _x))
 #define DownlinkPutInt32Array(_chan, _n, _x) Transport(_chan, 
PutInt32Array(_n, _x))

Modified: paparazzi3/trunk/sw/airborne/sim/ivy_transport.h
===================================================================
--- paparazzi3/trunk/sw/airborne/sim/ivy_transport.h    2010-03-30 09:58:26 UTC 
(rev 4765)
+++ paparazzi3/trunk/sw/airborne/sim/ivy_transport.h    2010-03-30 10:00:29 UTC 
(rev 4766)
@@ -27,9 +27,11 @@
 #define IvyTransportPutInt8ByAddr(x) IvyTransportPutIntByAddr(x) Space()
 #define IvyTransportPutInt16ByAddr(x) IvyTransportPutIntByAddr(x) Space()
 #define IvyTransportPutInt32ByAddr(x) IvyTransportPutIntByAddr(x) Space()
-#define IvyTransportPutFloatByAddr(x) ivy_p += sprintf(ivy_p, "%f ", *x);
-#define IvyTransportPutDoubleByAddr(x) ivy_p += sprintf(ivy_p, "%f ", *x);
 
+#define IvyTransportPutOneFloatByAddr(x) ivy_p += sprintf(ivy_p, "%f", *x);
+#define IvyTransportPutFloatByAddr(x) IvyTransportPutOneFloatByAddr(x) Space()
+#define IvyTransportPutDoubleByAddr(x) IvyTransportPutOneFloatByAddr(x) Space()
+
 #define IvyTransportPutArray(_put, _n, _x) { \
   int i; \
   for(i = 0; i < _n; i++) { \
@@ -42,3 +44,5 @@
 #define IvyTransportPutInt16Array(_n, _x) 
IvyTransportPutArray(IvyTransportPutIntByAddr, _n, _x)
 #define IvyTransportPutUint16Array(_n, _x) 
IvyTransportPutArray(IvyTransportPutUintByAddr, _n, _x)
 #define IvyTransportPutUint32Array(_n, _x) 
IvyTransportPutArray(IvyTransportPutUintByAddr, _n, _x)
+#define IvyTransportPutFloatArray(_n, _x) 
IvyTransportPutArray(IvyTransportPutOneFloatByAddr, _n, _x)
+#define IvyTransportPutDoubleArray(_n, _x) IvyTransportPutFloatArray(_n, _x) 

Modified: paparazzi3/trunk/sw/lib/ocaml/convert.c
===================================================================
--- paparazzi3/trunk/sw/lib/ocaml/convert.c     2010-03-30 09:58:26 UTC (rev 
4765)
+++ paparazzi3/trunk/sw/lib/ocaml/convert.c     2010-03-30 10:00:29 UTC (rev 
4766)
@@ -39,6 +39,14 @@
   return copy_double((double)(*x));
 }
 
+value 
+c_double_of_indexed_bytes(value s, value index)
+{
+  double *x = (double*)(String_val(s) + Int_val(index));
+
+  return copy_double(*x);
+}
+
 value
 c_sprint_float(value s, value index, value f) {
   float *p = (float*) (String_val(s) + Int_val(index));

Modified: paparazzi3/trunk/sw/lib/ocaml/pprz.ml
===================================================================
--- paparazzi3/trunk/sw/lib/ocaml/pprz.ml       2010-03-30 09:58:26 UTC (rev 
4765)
+++ paparazzi3/trunk/sw/lib/ocaml/pprz.ml       2010-03-30 10:00:29 UTC (rev 
4766)
@@ -75,6 +75,7 @@
 let messages_xml = fun () -> Lazy.force lazy_messages_xml
 
 external float_of_bytes : string -> int -> float = "c_float_of_indexed_bytes"
+external double_of_bytes : string -> int -> float = "c_double_of_indexed_bytes"
 external int32_of_bytes : string -> int -> int32 = "c_int32_of_indexed_bytes"
 external int8_of_bytes : string -> int -> int = "c_int8_of_indexed_bytes"
 external int16_of_bytes : string -> int -> int = "c_int16_of_indexed_bytes"
@@ -238,6 +239,9 @@
   | Scalar "uint16" -> Int (Char.code buffer.[index+1] lsl 8 + Char.code 
buffer.[index]), sizeof _type
   | Scalar "int16" -> Int (int16_of_bytes buffer index), sizeof _type
   | Scalar "float" ->  Float (float_of_bytes buffer index), sizeof _type
+  | Scalar "double" ->  
+      fprintf stderr "%s\n%!" (Debug.xprint (String.sub buffer index 8));
+Float (double_of_bytes buffer index), sizeof _type
   | Scalar ("int32"  | "uint32") -> Int32 (int32_of_bytes buffer index), 
sizeof _type
   | ArrayType t ->
       (** First get the number of values *)





reply via email to

[Prev in Thread] Current Thread [Next in Thread]