Skip to content

File midi_parser.h

File List > external-docs > libDaisy > src > hid > midi_parser.h

Go to the documentation of this file

Source Code

#pragma once
#ifndef DSY_MIDI_PARSER_H
#define DSY_MIDI_PARSER_H

#include <stdint.h>
#include <stdlib.h>
#include "hid/MidiEvent.h"

namespace daisy
{
class MidiParser
{
  public:
    MidiParser(){};
    ~MidiParser() {}

    inline void Init() { Reset(); }

    bool Parse(uint8_t byte, MidiEvent *event_out);

    void Reset();

  private:
    enum ParserState
    {
        ParserEmpty,
        ParserHasStatus,
        ParserHasData0,
        ParserSysEx,
    };

    ParserState     pstate_;
    MidiEvent       incoming_message_;
    MidiMessageType running_status_;

    // Masks to check for message type, and byte content
    const uint8_t kStatusByteMask     = 0x80;
    const uint8_t kMessageMask        = 0x70;
    const uint8_t kDataByteMask       = 0x7F;
    const uint8_t kChannelMask        = 0x0F;
    const uint8_t kSystemRealTimeMask = 0x07;
};

} // namespace daisy

#endif