summaryrefslogtreecommitdiff
path: root/digital/ai/src/twi_master/twi_master.c
diff options
context:
space:
mode:
authorNicolas Schodet2012-05-11 00:45:08 +0200
committerNicolas Schodet2012-05-11 00:47:24 +0200
commit2f31f222f2d6e4bd7c3962cbaea9c061d0339c0d (patch)
tree709570c993cedd998e8e57f0d6bbbb66cb75b7c2 /digital/ai/src/twi_master/twi_master.c
parentfc29c40de5516d5b57e7d07f882655610b711fd2 (diff)
digital/ai/src/twi_master: add transient mode for short lived commands
Diffstat (limited to 'digital/ai/src/twi_master/twi_master.c')
-rw-r--r--digital/ai/src/twi_master/twi_master.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/digital/ai/src/twi_master/twi_master.c b/digital/ai/src/twi_master/twi_master.c
index 65acdce2..d9cc9ac5 100644
--- a/digital/ai/src/twi_master/twi_master.c
+++ b/digital/ai/src/twi_master/twi_master.c
@@ -232,3 +232,19 @@ twi_master_send_buffer (uint8_t length)
twi_master_send_head ();
}
+void
+twi_master_send_transient_buffer (uint8_t length)
+{
+ assert (length != 0);
+ struct twi_master_command_t *c =
+ &twi_master.pending[TWI_MASTER_PENDING_TAIL];
+ /* Fill sequence number, compute CRC, store length. */
+ c->command[1] = ++twi_master_slaves[c->slave].seq;
+ c->command[0] = crc_compute (&c->command[1], length + 1);
+ c->length = length + 1;
+ /* Send right now without acknowledgement. */
+ twi_master_send (twi_master_slaves[c->slave].address, c->command,
+ c->length + 1);
+ twi_master_wait ();
+}
+