[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [paparazzi-commits] [4261] i2c on neo is working, including dynamic conf,
Pascal Brisset <=