Open FFBoard
Open source force feedback firmware
MidiMain.h
Go to the documentation of this file.
1/*
2 * MidiMain.h
3 *
4 * Created on: 23.01.2020
5 * Author: Yannick
6 */
7
8// TODO rewrite for tinyusb!
9#ifndef MidiMAIN_H_
10#define MidiMAIN_H_
11#include "target_constants.h"
12#ifdef MIDI
13#include <FFBoardMain.h>
14#include "cppmain.h"
15#include "TMC4671.h"
16#include "MotorDriver.h"
17#include "TimerHandler.h"
18#include "vector"
19#include "MidiHandler.h"
20#include "thread.hpp"
21
22struct MidiNote{
23 uint8_t note = 0;
24 uint8_t volume = 0;
25 float counter = 0;
26 float pitchbend = 1;
27};
28
30
31 enum class MidiMain_commands : uint32_t{
33 };
34
35public:
36 MidiMain();
37 virtual ~MidiMain();
38
39 TIM_HandleTypeDef* timer_update;
40
43 static bool isCreatable() {return true;};
44 CommandStatus command(const ParsedCommand& cmd,std::vector<CommandReply>& replies);
45 void usbInit();
46 void update();
47
48 void noteOn(uint8_t chan, uint8_t note,uint8_t velocity);
49 void noteOff(uint8_t chan, uint8_t note,uint8_t velocity);
50 void controlChange(uint8_t chan, uint8_t c, uint8_t val);
51 void pitchBend(uint8_t chan, int16_t val);
52
53 void timerElapsed(TIM_HandleTypeDef* htim);
54
55 virtual std::string getHelpstring(){
56 return "Plays MIDI via TMC4671";
57 }
58
59 void play();
60
61 std::unique_ptr<TMC4671> drv;
62
63 uint32_t movementrange = 0x3fff;
64
65private:
66
67 volatile bool updateflag = false;
68 float noteToFreq[128] = {0};
69 std::vector<MidiNote> notes[16];
70 bool active[16] = {false};
71 uint32_t power = 2500;
72
73 const uint16_t period = 100;//71; // Microseconds
74 float periodf = period / 1000000.0; // seconds
75};
76
77#endif /* MidiMAIN_H_ */
78#endif
CommandStatus
void controlChange(uint8_t chan, uint8_t c, uint8_t val)
Definition: MidiMain.cpp:143
float noteToFreq[128]
Definition: MidiMain.h:68
bool active[16]
Definition: MidiMain.h:70
void usbInit()
Definition: MidiMain.cpp:175
MidiMain_commands
Definition: MidiMain.h:31
void play()
Definition: MidiMain.cpp:91
uint32_t power
Definition: MidiMain.h:71
std::unique_ptr< TMC4671 > drv
Definition: MidiMain.h:61
static bool isCreatable()
Definition: MidiMain.h:43
static ClassIdentifier info
Definition: MidiMain.h:41
const ClassIdentifier getInfo()
Definition: MidiMain.cpp:23
const uint16_t period
Definition: MidiMain.h:73
MidiMain()
Definition: MidiMain.cpp:28
void update()
Definition: MidiMain.cpp:78
TIM_HandleTypeDef * timer_update
Definition: MidiMain.h:39
void noteOff(uint8_t chan, uint8_t note, uint8_t velocity)
Definition: MidiMain.cpp:133
void pitchBend(uint8_t chan, int16_t val)
Definition: MidiMain.cpp:148
float periodf
Definition: MidiMain.h:74
uint32_t movementrange
Definition: MidiMain.h:63
virtual ~MidiMain()
Definition: MidiMain.cpp:73
virtual std::string getHelpstring()
Definition: MidiMain.h:55
std::vector< MidiNote > notes[16]
Definition: MidiMain.h:69
void timerElapsed(TIM_HandleTypeDef *htim)
Definition: MidiMain.cpp:85
volatile bool updateflag
Definition: MidiMain.h:67
void noteOn(uint8_t chan, uint8_t note, uint8_t velocity)
Definition: MidiMain.cpp:122
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies)
Definition: MidiMain.cpp:156
float pitchbend
Definition: MidiMain.h:26
float counter
Definition: MidiMain.h:25
uint8_t note
Definition: MidiMain.h:23
uint8_t volume
Definition: MidiMain.h:24