paparazzi-commits
[Top][All Lists]
Advanced

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

[paparazzi-commits] [4256] add an i2c_transmit_no_stop() function


From: Pascal Brisset
Subject: [paparazzi-commits] [4256] add an i2c_transmit_no_stop() function
Date: Fri, 16 Oct 2009 14:02:00 +0000

Revision: 4256
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4256
Author:   hecto
Date:     2009-10-16 14:01:59 +0000 (Fri, 16 Oct 2009)
Log Message:
-----------
 add an i2c_transmit_no_stop() function

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

Modified: paparazzi3/trunk/sw/airborne/i2c.c
===================================================================
--- paparazzi3/trunk/sw/airborne/i2c.c  2009-10-16 07:55:09 UTC (rev 4255)
+++ paparazzi3/trunk/sw/airborne/i2c.c  2009-10-16 14:01:59 UTC (rev 4256)
@@ -10,6 +10,7 @@
 volatile uint8_t i2c0_len;
 volatile uint8_t i2c0_index;
 volatile uint8_t i2c0_slave_addr;
+volatile bool_t  i2c0_stop_after_transmit;
 
 volatile bool_t* i2c0_finished;
 
@@ -28,14 +29,26 @@
   I2c0SendStart();
 }
 
-void i2c0_transmit(uint8_t slave_addr, uint8_t len, volatile bool_t* finished) 
{
+static inline void i2c0_init_transmit(uint8_t slave_addr, uint8_t len, 
volatile bool_t* finished) {
   i2c0_len = len;
   i2c0_slave_addr = slave_addr & ~I2C_RECEIVE;
   i2c0_finished = finished;
   i2c0_status = I2C_BUSY;
+}
+
+
+void i2c0_transmit(uint8_t slave_addr, uint8_t len, volatile bool_t* finished) 
{
+  i2c0_init_transmit(slave_addr, len, finished);
+  i2c0_stop_after_transmit = TRUE; /** Default "historic" behaviour */
   I2c0SendStart();
 }
 
+void i2c0_transmit_no_stop(uint8_t slave_addr, uint8_t len, volatile bool_t* 
finished) {
+  i2c0_init_transmit(slave_addr, len, finished);
+  i2c0_stop_after_transmit = FALSE; /** Default "historic" behaviour */
+  I2c0SendStart();
+}
+
 #endif /* USE_I2C0 */
 
 #ifdef USE_I2C1

Modified: paparazzi3/trunk/sw/airborne/i2c.h
===================================================================
--- paparazzi3/trunk/sw/airborne/i2c.h  2009-10-16 07:55:09 UTC (rev 4255)
+++ paparazzi3/trunk/sw/airborne/i2c.h  2009-10-16 14:01:59 UTC (rev 4256)
@@ -24,11 +24,14 @@
 extern void i2c0_init(void);
 extern void i2c0_receive(uint8_t slave_addr, uint8_t len, volatile bool_t* 
finished);
 extern void i2c0_transmit(uint8_t slave_addr, uint8_t len, volatile bool_t* 
finished);
+extern void i2c0_transmit_no_stop(uint8_t slave_addr, uint8_t len, volatile 
bool_t* finished);
 
 extern volatile uint8_t i2c0_status;
+extern volatile bool_t  i2c0_stop_after_transmit;
 
+
 #ifndef I2C0_BUF_LEN
-#define I2C0_BUF_LEN 16
+#define I2C0_BUF_LEN 32
 #endif
 
 extern volatile uint8_t i2c0_buf[I2C0_BUF_LEN];
@@ -71,7 +74,11 @@
        I2c0SendByte(i2c0_buf[i2c0_index]);                             \
        i2c0_index++;                                                   \
       } else {                                                         \
-       I2c0SendStop();                                                 \
+       if (i2c0_stop_after_transmit) {                                 \
+          I2c0SendStop();                                               \
+        } else {                                                        \
+          I2c0Finished();                                               \
+        }                                                               \
       }                                                                        
\
       break;                                                           \
     case I2C_MR_DATA_NACK:                                             \





reply via email to

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