diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 671b6f3..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index 5777949..0000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - { - "useNewFormat": true -} - - - - - - - - - - - - - - - - - - { - "keyToString": { - "RunOnceActivity.OpenProjectViewOnStart": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "RunOnceActivity.cidr.known.project.marker": "true", - "WebServerToolWindowFactoryState": "false", - "cf.first.check.clang-format": "false", - "cidr.known.project.marker": "true", - "last_opened_file_path": "/Users/ernest/Desktop/Waterloop firmware/G6-STM32", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "vue.rearranger.settings.migration": "true" - } -} - - - - - 1707613509050 - - - - - - \ No newline at end of file diff --git a/Common/.DS_Store b/Common/.DS_Store deleted file mode 100644 index 01a8b28..0000000 Binary files a/Common/.DS_Store and /dev/null differ diff --git a/Common/Inc/can_driver.h b/Common/Inc/can_driver.h deleted file mode 100644 index e69de29..0000000 diff --git a/Common/Inc/circ_queue.h b/Common/Inc/circ_queue.h index ea742c0..f9fc2d0 100644 --- a/Common/Inc/circ_queue.h +++ b/Common/Inc/circ_queue.h @@ -6,31 +6,14 @@ // define Queue structure typedef struct { size_t len; - CANFrames_t _arr[BUFF_SIZE]; - size_t _head; - size_t _tail; + CAN_Frame_t _arr[BUFF_SIZE]; + size_t* _head; + size_t* _tail; } Queue_t; -// macro _INC_HEAD for _head increment -#define _INC_HEAD(self) { \ - if (self->_head == (BUFF_SIZE - 1)){ \ - self->_head = 0 \ - } else { \ - self->_head += 1; \ - } \ -} - -// macro _INC_TAIL for _tail indexing -#define _INC_TAIL(self) { \ - if (self->_tail == (BUFF_SIZE - 1)) { \ - self->_tail = 0; \ - } else { \ - self->_tail += 1; \ - } \ -} - -Queue_t Queue_init() // intialize new and empty queue structure -uint8_t Queue_empty (Queue_t* self); // check if queue is empty -void Queue_add(Queue_t* self, CAN_Frame_t val); // add a frame to queue -CAN_Frame_t Queue_get(Queue* self); // remove and return head frame -void Queue_print(Queue_t* self); // print queue +Queue_t queue_init(); // intialize new and empty queue structure +uint8_t queue_empty (Queue_t self); // check if queue is empty +uint8_t queue_full(Queue_t self); +void queue_add(Queue_t* self, CAN_Frame_t val); // add a frame to queue +CAN_Frame_t queue_get(Queue_t* self); // remove and return head frame +void queue_print(Queue_t* self); // print queue diff --git a/Common/Src/can_driver.c b/Common/Src/can_driver.c deleted file mode 100644 index e69de29..0000000 diff --git a/Common/Src/circ_queue.c b/Common/Src/circ_queue.c index 6dba622..fc20a7b 100644 --- a/Common/Src/circ_queue.c +++ b/Common/Src/circ_queue.c @@ -1,61 +1,88 @@ #include -#include "config.h" -#include "can_driver.h" #include "circ_queue.h" -// intializes and return a queue with zero length and head/tail indices -Queue_t Queue_init() { - Queue_t ret = { - .len = 0, - ._head = 0, - ._tail = 0, - ._arr = {{0}} - }; - return ret +static void inc_head(Queue_t *self) +{ + if (++self->_head >= self->_arr + BUFF_SIZE) + { + self->_head = self->_arr; + } +} + +static void inc_tail(Queue_t *self) +{ + if (++self->_tail >= self->_arr + BUFF_SIZE) + { + self->_tail = self->_arr; + } +} + +Queue_t queue_init() +{ + Queue_t ret; + ret.len = 0; + ret._head = ret._arr; + ret._tail = ret._arr; + return ret; } // empty queue, returns 1 if true, 0 if false -uint8_t Queue_empty(Quene_t* self) { - return self->len == 0; +uint8_t queue_empty(Queue_t self) +{ + return self.len == 0; +} + +// Check if queue is full +uint8_t queue_full(Queue_t self) +{ + return self.len == BUFF_SIZE; } // adds new CANFrame to queue -void Queue_add(Queue_t* self, CAN_Frame_t frame) { - if ( !(self->len == BUFF_SIZE) ) { - if (Queue_empty(self)) { - self->_arr[self->_head] = frame; - } - else { - _INC_TAIL(self); - self->_arr[self->_tail] = frame; +void Queue_add(Queue_t *self, CAN_Frame_t frame) +{ + if (!queue_full(*self)) + { + *self->_tail = frame; + inc_tail(self); + if (queue_empty(*self)) + { + self->_head = self->_tail; // If adding first element, head and tail should point to the same place } - self->len += 1; + self->len++; } - else { - self->_arr[self->_head] = val; - _INC_HEAD(self); - _INC_TAIL(self); + else + { + // Handle the queue being full, if necessary } } // removes frame from queue -CAN_Frame_t Queue_get(Queue_t* self) { - if (self->len == 0) { - CAN_Frame_t ret = { - - } +CAN_Frame_t queue_get(Queue_t *self) +{ + CAN_Frame_t ret; + if (self->len == 0) + { + ret.id = 0xFFFFFFFF; // frame id init to 0xFFFFFFFF } - else { - CAN_Frame_t ret = self->_arr[self->_head]; - _INC_HEAD(self); - self->len -= 1; - return ret + else + { + ret = *self->_head; + inc_head(self); + self->len--; } + return ret; } - -//print -void Queue_print(Queue_t* self) { - for (size_t i = 0; i < (BUFF_SIZE - 1); i++) { - printf(self->_arr[i]) +// print +void queue_print(Queue_t *self) +{ + CAN_Frame_t *current = self->_head; + for (size_t i = 0; i < self->len; i++) + { + printf("Frame ID: %u\n", current->id); + if (++current == self->_arr + BUFF_SIZE) + { + current = self->_arr; + } } -} \ No newline at end of file +}