Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "circbuff.h"
- void circbuff_init(circbuff_t *circbuff) {
- circbuff->end_bit = 0;
- circbuff->end_byte = 0;
- circbuff->start_bit = 0;
- circbuff->start_byte = 0;
- }
- uint8_t circbuff_size(circbuff_t *circbuff) {
- if (circbuff->end_byte >= circbuff->start_byte) {
- return (circbuff->end_byte - circbuff->start_byte);
- } else {
- return CIRCBUFF_LENGTH -
- (circbuff->start_byte - circbuff->end_byte);
- }
- }
- bool circbuff_is_full(circbuff_t *circbuff) {
- return (circbuff_size(circbuff) >= CIRCBUFF_LENGTH - 1);
- }
- bool circbuff_add_byte(circbuff_t *circbuff, uint8_t data) {
- bool status = false;
- if (circbuff_is_full(circbuff) == true) {
- circbuff->start_byte =
- (circbuff->start_byte + 1) % CIRCBUFF_LENGTH;
- circbuff->start_bit = 0;
- status = true;
- }
- circbuff->data[circbuff->end_byte] = data;
- circbuff->end_byte = (circbuff->end_byte + 1) % CIRCBUFF_LENGTH;
- circbuff->end_bit = 0;
- return status;
- }
- bool circbuff_is_empty(circbuff_t *circbuff) {
- return circbuff->start_byte == circbuff->end_byte;
- }
- uint8_t circbuff_pop_byte(circbuff_t *circbuff) {
- circbuff->start_bit = 0;
- if (circbuff_is_empty(circbuff) == false) {
- uint8_t data = circbuff->data[circbuff->start_byte];
- circbuff->start_byte =
- (circbuff->start_byte + 1) % CIRCBUFF_LENGTH;
- return data;
- }
- return 0;
- }
- bool circbuff_add_bit(circbuff_t *circbuff, uint8_t data) {
- bool status = false;
- circbuff->data[circbuff->end_byte] |= data << (7 - circbuff->end_bit);
- circbuff->end_bit++;
- if (circbuff->end_bit > 7) {
- if (circbuff_is_full(circbuff) == true) {
- circbuff->start_byte =
- (circbuff->start_byte + 1) % CIRCBUFF_LENGTH;
- circbuff->start_bit = 0;
- status = true;
- }
- circbuff->end_byte = (circbuff->end_byte + 1) % CIRCBUFF_LENGTH;
- circbuff->end_bit = 0;
- circbuff->data[circbuff->end_byte] = 0;
- }
- return status;
- }
- uint8_t circbuff_pop_bit(circbuff_t *circbuff) {
- uint8_t data;
- uint8_t bit;
- data = circbuff->data[circbuff->start_byte];
- bit = (data & (1 << (7 - circbuff->start_bit))) >>
- (7 - circbuff->start_bit);
- circbuff->start_bit++;
- if (circbuff->start_bit > 7) {
- circbuff_pop_byte(circbuff);
- }
- return bit;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement