diff include/Midi.h @ 181:391ad036557d

Basic Midi input implementation
author Giulio Moro <giuliomoro@yahoo.it>
date Fri, 15 Jan 2016 21:50:46 +0000
parents
children b3a306da03e0
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/include/Midi.h	Fri Jan 15 21:50:46 2016 +0000
@@ -0,0 +1,72 @@
+/*
+ * Midi.h
+ *
+ *  Created on: 15 Jan 2016
+ *      Author: giulio
+ */
+
+#ifndef MIDI_H_
+#define MIDI_H_
+
+#include <BeagleRT.h>
+#include <vector>
+
+typedef unsigned char midi_byte_t;
+
+class Midi {
+public:
+	Midi();
+	/**
+	 * Open the specified input Midi port and start reading from it.
+	 * @param port Midi port to open
+	 * @return 1 on success, -1 on failure
+	 */
+	int readFrom(int port);
+	/**
+	 * Open the specified output Midi port and prepares to write to it.
+	 * @param port Midi port to open
+	 * @return 1 on success, -1 on failure
+	 */
+	int writeTo(int port);
+
+	/**
+	 * Get received midi byte, one at a time.
+	 * @return  -1 if no new byte is available, -2 on error,
+	 * the oldest not yet retrieved midi byte otherwise
+	*/
+	int getInput();
+
+	/**
+	 * Writes a Midi byte to the output port
+	 * @param byte the Midi byte to write
+	 * @return 1 on success, -1 on error
+	 */
+	int writeOutput(midi_byte_t byte);
+
+	/**
+	 * Writes Midi bytes to the output port
+	 * @param bytes an array of bytes to be written
+	 * @param length number of bytes to write
+	 * @return 1 on success, -1 on error
+	 */
+	int writeMidiOut(short unsigned int* bytes, unsigned int length);
+
+	virtual ~Midi();
+	static void midiInputLoop();
+    static bool staticConstructed;
+	static void staticConstructor();
+private:
+	void readInputLoop();
+	int outputPort;
+	int inputPort;
+	std::vector<midi_byte_t> inputBytes;
+	unsigned int inputBytesWritePointer;
+	unsigned int inputBytesReadPointer;
+	std::vector<midi_byte_t> outputBytes;
+	static std::vector<Midi*> objAddrs;
+	static AuxiliaryTask midiInputTask;
+	static AuxiliaryTask midiOutputTask;
+};
+
+
+#endif /* MIDI_H_ */