| 
							- /*
 -  * DISTRHO Cardinal Plugin
 -  * Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
 -  *
 -  * This program 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 any later version.
 -  *
 -  * This program 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.
 -  *
 -  * For a full copy of the GNU General Public License see the LICENSE file.
 -  */
 - 
 - /**
 -  * This file is an edited version of VCVRack's midi.hpp
 -  * Copyright (C) 2016-2021 VCV.
 -  *
 -  * This program 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.
 -  */
 - 
 - #pragma once
 - 
 - #include "choc/choc_SmallVector.h"
 - 
 - namespace rack {
 - /** Abstraction for all MIDI drivers in Rack */
 - namespace midi {
 - 
 - 
 - struct Message {
 - 	/** Initialized to 3 empty bytes. */
 - 	choc::SmallVector<uint8_t, 3> bytes;
 - 	/** The Engine frame timestamp of the Message.
 - 	For output messages, the frame when the message was generated.
 - 	For input messages, the frame when it is intended to be processed.
 - 	-1 for undefined, to be sent or processed immediately.
 - 	*/
 - 	int64_t frame = -1;
 - 
 - 	Message() {
 - 		bytes.resize(3);
 - 	}
 - 
 - 	int getSize() const {
 - 		return bytes.size();
 - 	}
 - 	void setSize(int size) {
 - 		bytes.resize(size);
 - 	}
 - 
 - 	uint8_t getChannel() const {
 - 		if (bytes.size() < 1)
 - 			return 0;
 - 		return bytes[0] & 0xf;
 - 	}
 - 	void setChannel(uint8_t channel) {
 - 		if (bytes.size() < 1)
 - 			return;
 - 		bytes[0] = (bytes[0] & 0xf0) | (channel & 0xf);
 - 	}
 - 
 - 	uint8_t getStatus() const {
 - 		if (bytes.size() < 1)
 - 			return 0;
 - 		return bytes[0] >> 4;
 - 	}
 - 	void setStatus(uint8_t status) {
 - 		if (bytes.size() < 1)
 - 			return;
 - 		bytes[0] = (bytes[0] & 0xf) | (status << 4);
 - 	}
 - 
 - 	uint8_t getNote() const {
 - 		if (bytes.size() < 2)
 - 			return 0;
 - 		return bytes[1];
 - 	}
 - 	void setNote(uint8_t note) {
 - 		if (bytes.size() < 2)
 - 			return;
 - 		bytes[1] = note & 0x7f;
 - 	}
 - 
 - 	uint8_t getValue() const {
 - 		if (bytes.size() < 3)
 - 			return 0;
 - 		return bytes[2];
 - 	}
 - 	void setValue(uint8_t value) {
 - 		if (bytes.size() < 3)
 - 			return;
 - 		bytes[2] = value & 0x7f;
 - 	}
 - 
 - 	std::string toString() const;
 - 
 - 	int64_t getFrame() const {
 - 		return frame;
 - 	}
 - 
 - 	void setFrame(int64_t frame) {
 - 		this->frame = frame;
 - 	}
 - };
 - 
 - 
 - /* NOTE all the other MIDI stuff (drivers, ports etc) is purposefully missing here, unwanted in Cardinal
 -  */
 - struct Port;
 - 
 - 
 - } // namespace midi
 - } // namespace rack
 
 
  |