Author: jaguarondi
Date: 2008-06-24 14:16:28 +0200 (Tue, 24 Jun 2008)
New Revision: 1260
Modified:
firmware/tuxaudio/branches/new_rf/communication.c
firmware/tuxaudio/branches/new_rf/i2c.c
firmware/tuxaudio/branches/new_rf/i2c.h
Log:
* Changed the I2C service routine to speed-it up. Parsing is now done outside
the interrupt.
Modified: firmware/tuxaudio/branches/new_rf/communication.c
===================================================================
--- firmware/tuxaudio/branches/new_rf/communication.c 2008-06-24 12:07:58 UTC
(rev 1259)
+++ firmware/tuxaudio/branches/new_rf/communication.c 2008-06-24 12:16:28 UTC
(rev 1260)
@@ -36,6 +36,8 @@
/* I2C read message (in) */
static uint8_t in_buf[CMD_SIZE];
static struct i2c_msg msg_in = {0, 0, in_buf};
+/* I2C last received command */
+static uint8_t *received_cmd = 0;
/** Size of the stack buffer to tuxcore */
#define CORE_OUT_BUF_SIZE 16
@@ -182,28 +184,21 @@
* \param msg I2C message received
* \return 0 if a stop should be sent, 1 for a restart.
*/
-bool i2c_master_receive_service(struct i2c_msg *msg)
+void i2c_master_receive_service(struct i2c_msg *msg)
{
if (msg->len != CMD_SIZE)
/* Error here. */
- return 0;
+ return;
if (*(msg->buf) == 0)
{
/* Got nothing so stop reading. */
- return 0;
+ return;
}
if (msg->addr == TUXCORE_ADDR)
/* From tuxcore */
{
- /* Parse the command and forward if it isn't dropped. */
- if (!parse_cmd(msg->buf))
- queue_rf_cmd(msg->buf);
- /* As we got something, there's maybe more so if the stack is not full,
- * continue */
- if (FifoLength(rf_cmdout_buf) <= RF_BUF_SIZE - CMD_SIZE)
- return 1;
+ received_cmd = msg->buf;
}
- return 0;
}
/*
@@ -448,9 +443,17 @@
return;
}
+ /* Parse the received command and forward if it isn't dropped. */
+ if (received_cmd)
+ {
+ if (!parse_cmd(received_cmd))
+ queue_rf_cmd(received_cmd);
+ received_cmd = 0;
+ }
+
/* Send otherwise get commands. */
- //if (!send_core_cmds())
- //{
- //get_core_cmd();
- //}
+ if (!send_core_cmds())
+ {
+ get_core_cmd();
+ }
}
Modified: firmware/tuxaudio/branches/new_rf/i2c.c
===================================================================
--- firmware/tuxaudio/branches/new_rf/i2c.c 2008-06-24 12:07:58 UTC (rev
1259)
+++ firmware/tuxaudio/branches/new_rf/i2c.c 2008-06-24 12:16:28 UTC (rev
1260)
@@ -84,7 +84,7 @@
/* function pointer to i2c receive routine */
/* I2cSlaveReceive is called when this processor is addressed as a slave for
* writing */
-static bool (*i2c_master_receive) (struct i2c_msg *msg);
+static void (*i2c_master_receive) (struct i2c_msg *msg);
/* I2cSlaveTransmit is called when this processor is addressed as a slave for
* reading */
static uint8_t(*i2cSlaveTransmit) (uint8_t transmitDataLengthMax,
@@ -99,7 +99,7 @@
//i2c_resume();
/* Set the user function which handles receiving (incoming) data as a slave */
-void i2c_master_receive_handler(bool (*i2cMasterRx_func) (struct i2c_msg *msg))
+void i2c_master_receive_handler(void (*i2cMasterRx_func) (struct i2c_msg *msg))
{
i2c_master_receive = i2cMasterRx_func;
}
@@ -362,14 +362,8 @@
m_msg->state = i2c_state;
if (i2c_master_receive)
{
- if (i2c_master_receive(m_msg))
- {
- buf_idx = 0;
- i2c_state = I2C_BUSY;
- twi_send_start(); /* restart a read */
- }
- else
- twi_send_stop(); /* end of data stream */
+ i2c_master_receive(m_msg);
+ twi_send_stop(); /* end of data stream */
}
break;
case TW_MT_SLA_NACK: /* 0x20 */
Modified: firmware/tuxaudio/branches/new_rf/i2c.h
===================================================================
--- firmware/tuxaudio/branches/new_rf/i2c.h 2008-06-24 12:07:58 UTC (rev
1259)
+++ firmware/tuxaudio/branches/new_rf/i2c.h 2008-06-24 12:16:28 UTC (rev
1260)
@@ -80,7 +80,7 @@
/* Functions */
void i2cInit(void);
-void i2c_master_receive_handler(bool (*i2cMasterRx_func) (struct i2c_msg
*msg));
+void i2c_master_receive_handler(void (*i2cMasterRx_func) (struct i2c_msg
*msg));
void
i2cSetSlaveTransmitHandler(uint8_t(*i2cSlaveTx_func)
(uint8_t transmitDataLengthMax,
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Tux-droid-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tux-droid-svn