CanInterface Dispatcher, it depends on MyThread (MyThings lib)

Dependents:   PYRN

Committer:
clemounet
Date:
Tue Apr 14 13:26:18 2015 +0000
Revision:
1:b9201bec01bf
Parent:
0:3ca0a6d1e2a1
.up

Who changed what in which revision?

UserRevisionLine numberNew contents of line
clemounet 0:3ca0a6d1e2a1 1 #include "CANFifoMessage.h"
clemounet 0:3ca0a6d1e2a1 2
clemounet 0:3ca0a6d1e2a1 3 CANFifoMessage::CANFifoMessage() {
clemounet 0:3ca0a6d1e2a1 4 this->head = 0;
clemounet 0:3ca0a6d1e2a1 5 this->tail = 0;
clemounet 0:3ca0a6d1e2a1 6 }
clemounet 0:3ca0a6d1e2a1 7 uint32_t CANFifoMessage::available() {
clemounet 0:3ca0a6d1e2a1 8 return (FIFO_SIZE + this->head - this->tail) % FIFO_SIZE;
clemounet 0:3ca0a6d1e2a1 9 }
clemounet 0:3ca0a6d1e2a1 10
clemounet 0:3ca0a6d1e2a1 11 uint32_t CANFifoMessage::free() {
clemounet 0:3ca0a6d1e2a1 12 return (FIFO_SIZE - 1 - available());
clemounet 0:3ca0a6d1e2a1 13 }
clemounet 0:3ca0a6d1e2a1 14
clemounet 0:3ca0a6d1e2a1 15 bool CANFifoMessage::put(CANMessage data){
clemounet 0:3ca0a6d1e2a1 16 uint32_t next;
clemounet 0:3ca0a6d1e2a1 17
clemounet 0:3ca0a6d1e2a1 18 // check if FIFO has room
clemounet 0:3ca0a6d1e2a1 19 next = (this->head + 1) % FIFO_SIZE;
clemounet 0:3ca0a6d1e2a1 20 if (next == this->tail) {
clemounet 0:3ca0a6d1e2a1 21 return false; // FIFO full
clemounet 0:3ca0a6d1e2a1 22 }
clemounet 0:3ca0a6d1e2a1 23
clemounet 0:3ca0a6d1e2a1 24 this->buffer[this->head] = data;
clemounet 0:3ca0a6d1e2a1 25 this->head = next;
clemounet 0:3ca0a6d1e2a1 26
clemounet 0:3ca0a6d1e2a1 27 return true;
clemounet 0:3ca0a6d1e2a1 28 }
clemounet 0:3ca0a6d1e2a1 29
clemounet 0:3ca0a6d1e2a1 30 bool CANFifoMessage::get(CANMessage* data) {
clemounet 0:3ca0a6d1e2a1 31 uint32_t next;
clemounet 0:3ca0a6d1e2a1 32
clemounet 0:3ca0a6d1e2a1 33 // check if FIFO has data
clemounet 0:3ca0a6d1e2a1 34 if (this->head == this->tail) {
clemounet 0:3ca0a6d1e2a1 35 return false; // FIFO empty
clemounet 0:3ca0a6d1e2a1 36 }
clemounet 0:3ca0a6d1e2a1 37
clemounet 0:3ca0a6d1e2a1 38 next = (this->tail + 1) % FIFO_SIZE;
clemounet 0:3ca0a6d1e2a1 39
clemounet 0:3ca0a6d1e2a1 40 *data = this->buffer[this->tail];
clemounet 0:3ca0a6d1e2a1 41 this->tail = next;
clemounet 0:3ca0a6d1e2a1 42
clemounet 0:3ca0a6d1e2a1 43 return true;
clemounet 0:3ca0a6d1e2a1 44 }