paparazzi-commits
[Top][All Lists]
Advanced

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

[paparazzi-commits] [4261] i2c on neo is working, including dynamic con


From: Pascal Brisset
Subject: [paparazzi-commits] [4261] i2c on neo is working, including dynamic conf
Date: Sat, 17 Oct 2009 07:29:30 +0000

Revision: 4261
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4261
Author:   hecto
Date:     2009-10-17 07:29:30 +0000 (Sat, 17 Oct 2009)
Log Message:
-----------
 i2c on neo is working, including dynamic conf

Modified Paths:
--------------
    paparazzi3/trunk/sw/airborne/modules/gps_i2c/gps_i2c.c
    paparazzi3/trunk/sw/airborne/modules/gps_i2c/gps_i2c.h

Modified: paparazzi3/trunk/sw/airborne/modules/gps_i2c/gps_i2c.c
===================================================================
--- paparazzi3/trunk/sw/airborne/modules/gps_i2c/gps_i2c.c      2009-10-17 
07:26:12 UTC (rev 4260)
+++ paparazzi3/trunk/sw/airborne/modules/gps_i2c/gps_i2c.c      2009-10-17 
07:29:30 UTC (rev 4261)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009  ENAC, Pascal Brisset, Michel Gorraz
+ * Copyright (C) 2009  ENAC, Pascal Brisset, Michel Gorraz,Gautier Hattenberger
  *
  * This file is part of paparazzi.
  * 
@@ -22,6 +22,7 @@
 
 #include "gps_i2c.h"
 #include "i2c.h"
+#include "gps.h"
 
 uint8_t gps_i2c_rx_buf[GPS_I2C_BUF_SIZE];
 uint8_t gps_i2c_rx_insert_idx, gps_i2c_rx_extract_idx;
@@ -38,7 +39,6 @@
 #define GPS_I2C_STATUS_ASKING_NB_AVAIL_BYTES  2
 #define GPS_I2C_STATUS_READING_NB_AVAIL_BYTES 3
 #define GPS_I2C_STATUS_READING_DATA           4
-#define GPS_I2C_STATUS_WRITING_DATA           5
 
 #define gps_i2c_AddCharToRxBuf(_x) { \
   gps_i2c_rx_buf[gps_i2c_rx_insert_idx] = _x; \
@@ -46,7 +46,7 @@
 }
 
 static uint8_t gps_i2c_status;
-static uint8_t gps_i2c_nb_avail_bytes;
+static uint16_t gps_i2c_nb_avail_bytes; /* size buffer =~ 12k */
 static uint8_t data_buf_len;
 
 void
@@ -57,30 +57,20 @@
   gps_i2c_rx_insert_idx = 0;
   gps_i2c_rx_extract_idx = 0;
   gps_i2c_tx_insert_idx = 0;
+#ifdef GPS_CONFIGURE
+  /* The call in main_ap.c is made before the modules init (too early) */
+  gps_configure_uart();
+#endif
 }
 
-static inline void
-gps_i2c_ask_read(uint8_t addr) {
-  i2c0_buf[0] = addr;
-  i2c0_transmit(GPS_I2C_SLAVE_ADDR, 1, &gps_i2c_done);
-  gps_i2c_done = FALSE;
-}
-
-static inline void
-continue_reading(void) {
-  if (gps_i2c_nb_avail_bytes > 0) {
-    gps_i2c_ask_read(GPS_I2C_ADDR_DATA);
-    gps_i2c_status = GPS_I2C_STATUS_ASKING_DATA;
-  } else {
-    gps_i2c_status = GPS_I2C_STATUS_IDLE;
-  }
-}
-
 void
 gps_i2c_periodic(void) {
-  // We should check gps_i2c_done == true
-  gps_i2c_ask_read(GPS_I2C_ADDR_NB_AVAIL_BYTES);
-  gps_i2c_status = GPS_I2C_STATUS_ASKING_NB_AVAIL_BYTES;
+  if (gps_i2c_done && gps_i2c_status == GPS_I2C_STATUS_IDLE) {
+    i2c0_buf[0] = GPS_I2C_ADDR_NB_AVAIL_BYTES;
+    i2c0_transmit_no_stop(GPS_I2C_SLAVE_ADDR, 1, &gps_i2c_done);
+    gps_i2c_done = FALSE;
+    gps_i2c_status = GPS_I2C_STATUS_ASKING_NB_AVAIL_BYTES;
+  }
 }
 
 void
@@ -99,7 +89,7 @@
       gps_i2c_done = FALSE;
 
       /* Reset flag if finished */
-      if (gps_i2c_tx_extract_idx < gps_i2c_tx_insert_idx) {
+      if (gps_i2c_tx_extract_idx >= gps_i2c_tx_insert_idx) {
        gps_i2c_data_ready_to_transmit = FALSE;
        gps_i2c_tx_insert_idx = 0;
       }
@@ -114,9 +104,15 @@
     
   case GPS_I2C_STATUS_READING_NB_AVAIL_BYTES:
     gps_i2c_nb_avail_bytes = (i2c0_buf[0]<<8) | i2c0_buf[1];
-    continue_reading();
+
+    if (gps_i2c_nb_avail_bytes)
+      goto continue_reading;
+    else
+      gps_i2c_status = GPS_I2C_STATUS_IDLE;
     break;
-    
+
+  continue_reading:
+
   case GPS_I2C_STATUS_ASKING_DATA:
     data_buf_len = Min(gps_i2c_nb_avail_bytes, I2C0_BUF_LEN);
     gps_i2c_nb_avail_bytes -= data_buf_len;
@@ -125,17 +121,21 @@
     gps_i2c_done = FALSE;
     gps_i2c_status = GPS_I2C_STATUS_READING_DATA;
     break;
-    
+
   case GPS_I2C_STATUS_READING_DATA: {
     uint8_t i;
     for(i = 0; i < data_buf_len; i++) {
       gps_i2c_AddCharToRxBuf(i2c0_buf[i]);
     }
-    continue_reading();
+
+    if (gps_i2c_nb_avail_bytes)
+     goto continue_reading;
+    else
+      gps_i2c_status = GPS_I2C_STATUS_IDLE;
     break;
   }
-  case GPS_I2C_STATUS_WRITING_DATA: 
-    gps_i2c_status = GPS_I2C_STATUS_IDLE;
-    break;
+
+  default:
+    return;
   }
 }

Modified: paparazzi3/trunk/sw/airborne/modules/gps_i2c/gps_i2c.h
===================================================================
--- paparazzi3/trunk/sw/airborne/modules/gps_i2c/gps_i2c.h      2009-10-17 
07:26:12 UTC (rev 4260)
+++ paparazzi3/trunk/sw/airborne/modules/gps_i2c/gps_i2c.h      2009-10-17 
07:29:30 UTC (rev 4261)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009  ENAC, Pascal Brisset, Michel Gorraz
+ * Copyright (C) 2009  ENAC, Pascal Brisset, Michel Gorraz,Gautier Hattenberger
  *
  * This file is part of paparazzi.
  * 
@@ -25,7 +25,7 @@
 
 #include "std.h"
 
-#define GPS_I2C_SLAVE_ADDR 0x42
+#define GPS_I2C_SLAVE_ADDR (0x42 << 1)
 
 #define GPS_I2C_BUF_SIZE 256
 extern uint8_t gps_i2c_rx_buf[GPS_I2C_BUF_SIZE];
@@ -50,7 +50,7 @@
   gps_i2c_data_ready_to_transmit = TRUE; \
   gps_i2c_tx_extract_idx = 0;            \
 }
-#define gps_i2cTxRunning (gps_i2c_data_ready_to_transmit)
-#define gps_i2cInitParam(_baud, _uart_prm1, _uart_prm2) {}
+// #define gps_i2cTxRunning (gps_i2c_data_ready_to_transmit)
+// #define gps_i2cInitParam(_baud, _uart_prm1, _uart_prm2) {}
 
 #endif // GPS_I2C





reply via email to

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