summaryrefslogtreecommitdiffstats
path: root/tmk_core/protocol/midi/bytequeue/bytequeue.h
diff options
context:
space:
mode:
authorNathan Sharfi <me@ngalt.com>2016-07-31 14:02:25 -0700
committerNathan Sharfi <me@ngalt.com>2016-07-31 14:02:25 -0700
commitd889648d5373b7ff77dc7bc4b369c628e8336b45 (patch)
tree35c6eb194417242958baf54b36f0ff3a56e378f1 /tmk_core/protocol/midi/bytequeue/bytequeue.h
parent6428069eb70f5cc47ac1f3f9acf3daea14fb9097 (diff)
parentb25dbc484d639210c53d8e13f79cf5a77f2faaaa (diff)
Merge branch 'master' of github.com:jackhumbert/qmk_firmware
# Conflicts: # keyboard/ergodox_ez/keymaps/zweihander-osx/keymap.c # keyboard/ergodox_ez/keymaps/zweihander-osx/zweihander-osx.hex
Diffstat (limited to 'tmk_core/protocol/midi/bytequeue/bytequeue.h')
-rwxr-xr-xtmk_core/protocol/midi/bytequeue/bytequeue.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/tmk_core/protocol/midi/bytequeue/bytequeue.h b/tmk_core/protocol/midi/bytequeue/bytequeue.h
new file mode 100755
index 0000000000..e4a286134f
--- /dev/null
+++ b/tmk_core/protocol/midi/bytequeue/bytequeue.h
@@ -0,0 +1,59 @@
+//this is a single reader [maybe multiple writer?] byte queue
+//Copyright 2008 Alex Norman
+//writen by Alex Norman
+//
+//This file is part of avr-bytequeue.
+//
+//avr-bytequeue is free software: you can redistribute it and/or modify
+//it under the terms of the GNU General Public License as published by
+//the Free Software Foundation, either version 3 of the License, or
+//(at your option) any later version.
+//
+//avr-bytequeue is distributed in the hope that it will be useful,
+//but WITHOUT ANY WARRANTY; without even the implied warranty of
+//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//GNU General Public License for more details.
+//
+//You should have received a copy of the GNU General Public License
+//along with avr-bytequeue. If not, see <http://www.gnu.org/licenses/>.
+
+#ifndef BYTEQUEUE_H
+#define BYTEQUEUE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <inttypes.h>
+#include <stdbool.h>
+
+typedef uint8_t byteQueueIndex_t;
+
+typedef struct {
+ byteQueueIndex_t start;
+ byteQueueIndex_t end;
+ byteQueueIndex_t length;
+ uint8_t * data;
+} byteQueue_t;
+
+//you must have a queue, an array of data which the queue will use, and the length of that array
+void bytequeue_init(byteQueue_t * queue, uint8_t * dataArray, byteQueueIndex_t arrayLen);
+
+//add an item to the queue, returns false if the queue is full
+bool bytequeue_enqueue(byteQueue_t * queue, uint8_t item);
+
+//get the length of the queue
+byteQueueIndex_t bytequeue_length(byteQueue_t * queue);
+
+//this grabs data at the index given [starting at queue->start]
+uint8_t bytequeue_get(byteQueue_t * queue, byteQueueIndex_t index);
+
+//update the index in the queue to reflect data that has been dealt with
+void bytequeue_remove(byteQueue_t * queue, byteQueueIndex_t numToRemove);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+