Subversion Repositories svn.mios32

Rev

Rev 1541 | Rev 1923 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
32 tk 1
// $Id: mios32_midi.h 1921 2014-01-10 21:22:37Z tk $
2
/*
3
 * Header file for MIDI layer
4
 *
5
 * ==========================================================================
6
 *
7
 *  Copyright (C) 2008 Thorsten Klose (tk@midibox.org)
8
 *  Licensed for personal non-commercial use only.
9
 *  All other rights reserved.
843 philetaylo 10
 *
32 tk 11
 * ==========================================================================
12
 */
13
 
14
#ifndef _MIOS32_MIDI_H
15
#define _MIOS32_MIDI_H
16
 
17
/////////////////////////////////////////////////////////////////////////////
18
// Global definitions
19
/////////////////////////////////////////////////////////////////////////////
20
 
78 tk 21
// the default MIDI port for MIDI output
22
#ifndef MIOS32_MIDI_DEFAULT_PORT
23
#define MIOS32_MIDI_DEFAULT_PORT USB0
24
#endif
33 tk 25
 
78 tk 26
 
307 tk 27
// the default MIDI port for debugging output via MIOS32_MIDI_SendDebugMessage
28
#ifndef MIOS32_MIDI_DEBUG_PORT
29
#define MIOS32_MIDI_DEBUG_PORT USB0
30
#endif
31
 
32
 
69 tk 33
/////////////////////////////////////////////////////////////////////////////
225 tk 34
// Uses by MIOS32 SysEx parser
35
/////////////////////////////////////////////////////////////////////////////
36
 
582 tk 37
// MIDI commands and acknowledge reply codes
307 tk 38
#define MIOS32_MIDI_SYSEX_DEBUG    0x0d
225 tk 39
#define MIOS32_MIDI_SYSEX_DISACK   0x0e
40
#define MIOS32_MIDI_SYSEX_ACK      0x0f
41
 
42
// disacknowledge arguments
43
#define MIOS32_MIDI_SYSEX_DISACK_LESS_BYTES_THAN_EXP  0x01
44
#define MIOS32_MIDI_SYSEX_DISACK_MORE_BYTES_THAN_EXP  0x02
45
#define MIOS32_MIDI_SYSEX_DISACK_WRONG_CHECKSUM       0x03
46
#define MIOS32_MIDI_SYSEX_DISACK_WRITE_FAILED         0x04
47
#define MIOS32_MIDI_SYSEX_DISACK_WRITE_ACCESS         0x05
48
#define MIOS32_MIDI_SYSEX_DISACK_MIDI_TIMEOUT         0x06
49
#define MIOS32_MIDI_SYSEX_DISACK_WRONG_DEBUG_CMD      0x07
50
#define MIOS32_MIDI_SYSEX_DISACK_WRONG_ADDR_RANGE     0x08
51
#define MIOS32_MIDI_SYSEX_DISACK_ADDR_NOT_ALIGNED     0x09
52
#define MIOS32_MIDI_SYSEX_DISACK_BS_NOT_AVAILABLE     0x0a
53
#define MIOS32_MIDI_SYSEX_DISACK_OVERRUN              0x0b
54
#define MIOS32_MIDI_SYSEX_DISACK_FRAME_ERROR          0x0c
230 tk 55
#define MIOS32_MIDI_SYSEX_DISACK_UNKNOWN_QUERY        0x0d
225 tk 56
#define MIOS32_MIDI_SYSEX_DISACK_INVALID_COMMAND      0x0e
558 tk 57
#define MIOS32_MIDI_SYSEX_DISACK_PROG_ID_NOT_ALLOWED  0x0f
582 tk 58
#define MIOS32_MIDI_SYSEX_DISACK_UNSUPPORTED_DEBUG    0x10
225 tk 59
 
60
 
61
/////////////////////////////////////////////////////////////////////////////
69 tk 62
// Global Types
63
/////////////////////////////////////////////////////////////////////////////
33 tk 64
 
65
 
69 tk 66
typedef enum {
307 tk 67
  DEFAULT    = 0x00,
68
  MIDI_DEBUG = 0x01,
33 tk 69
 
78 tk 70
  USB0 = 0x10,
71
  USB1 = 0x11,
72
  USB2 = 0x12,
73
  USB3 = 0x13,
74
  USB4 = 0x14,
75
  USB5 = 0x15,
76
  USB6 = 0x16,
77
  USB7 = 0x17,
32 tk 78
 
78 tk 79
  UART0 = 0x20,
80
  UART1 = 0x21,
284 tk 81
  UART2 = 0x22,
82
  UART3 = 0x23,
78 tk 83
 
84
  IIC0 = 0x30,
85
  IIC1 = 0x31,
86
  IIC2 = 0x32,
87
  IIC3 = 0x33,
88
  IIC4 = 0x34,
89
  IIC5 = 0x35,
90
  IIC6 = 0x36,
1045 tk 91
  IIC7 = 0x37,
92
 
93
  OSC0 = 0x40,
94
  OSC1 = 0x41,
95
  OSC2 = 0x42,
96
  OSC3 = 0x43,
97
  OSC4 = 0x44,
98
  OSC5 = 0x45,
99
  OSC6 = 0x46,
1921 tk 100
  OSC7 = 0x47,
101
 
102
  SPI0 = 0x50,
103
  SPI1 = 0x51,
104
  SPI2 = 0x52,
105
  SPI3 = 0x53,
106
  SPI4 = 0x54,
107
  SPI5 = 0x55,
108
  SPI6 = 0x56,
109
  SPI7 = 0x57
110
 
69 tk 111
} mios32_midi_port_t;
32 tk 112
 
113
 
69 tk 114
typedef enum {
115
  NoteOff       = 0x8,
116
  NoteOn        = 0x9,
117
  PolyPressure  = 0xa,
118
  CC            = 0xb,
119
  ProgramChange = 0xc,
120
  Aftertouch    = 0xd,
121
  PitchBend     = 0xe
122
} mios32_midi_event_t;
32 tk 123
 
69 tk 124
 
125
typedef enum {
126
  Chn1,
127
  Chn2,
128
  Chn3,
129
  Chn4,
130
  Chn5,
131
  Chn6,
132
  Chn7,
133
  Chn8,
134
  Chn9,
135
  Chn10,
136
  Chn11,
137
  Chn12,
138
  Chn13,
139
  Chn14,
140
  Chn15,
141
  Chn16
142
} mios32_midi_chn_t;
143
 
144
 
32 tk 145
typedef union {
146
  struct {
848 tk 147
    u32 ALL;
32 tk 148
  };
149
  struct {
848 tk 150
    u8 cin_cable;
151
    u8 evnt0;
152
    u8 evnt1;
153
    u8 evnt2;
32 tk 154
  };
69 tk 155
  struct {
848 tk 156
    u8 type:4;
157
    u8 cable:4;
851 tk 158
    u8 chn:4; // mios32_midi_chn_t
159
    u8 event:4; // mios32_midi_event_t
848 tk 160
    u8 value1;
161
    u8 value2;
69 tk 162
  };
446 tk 163
 
844 tk 164
  // C++ doesn't allow to redefine names in anonymous unions
165
  // as a simple workaround, we rename these redundant names
69 tk 166
  struct {
848 tk 167
    u8 cin:4;
168
    u8 dummy1_cable:4;
851 tk 169
    u8 dummy1_chn:4; // mios32_midi_chn_t 
170
    u8 dummy1_event:4; // mios32_midi_event_t 
848 tk 171
    u8 note:8;
172
    u8 velocity:8;
69 tk 173
  };
174
  struct {
848 tk 175
    u8 dummy2_cin:4;
176
    u8 dummy2_cable:4;
851 tk 177
    u8 dummy2_chn:4; // mios32_midi_chn_t 
178
    u8 dummy2_event:4; // mios32_midi_event_t 
848 tk 179
    u8 cc_number:8;
180
    u8 value:8;
69 tk 181
  };
182
  struct {
848 tk 183
    u8 dummy3_cin:4;
184
    u8 dummy3_cable:4;
851 tk 185
    u8 dummy3_chn:4; // mios32_midi_chn_t 
186
    u8 dummy3_event:4; // mios32_midi_event_t
848 tk 187
    u8 program_change:8;
188
    u8 dummy3:8;
69 tk 189
  };
33 tk 190
} mios32_midi_package_t;
32 tk 191
 
192
 
225 tk 193
// command states
194
typedef enum {
195
  MIOS32_MIDI_SYSEX_CMD_STATE_BEGIN,
196
  MIOS32_MIDI_SYSEX_CMD_STATE_CONT,
197
  MIOS32_MIDI_SYSEX_CMD_STATE_END
198
} mios32_midi_sysex_cmd_state_t;
199
 
200
 
32 tk 201
/////////////////////////////////////////////////////////////////////////////
202
// Prototypes
203
/////////////////////////////////////////////////////////////////////////////
204
 
205
extern s32 MIOS32_MIDI_Init(u32 mode);
206
 
78 tk 207
extern s32 MIOS32_MIDI_CheckAvailable(mios32_midi_port_t port);
208
 
528 tk 209
extern s32 MIOS32_MIDI_RS_OptimisationSet(mios32_midi_port_t port, u8 enable);
210
extern s32 MIOS32_MIDI_RS_OptimisationGet(mios32_midi_port_t port);
211
extern s32 MIOS32_MIDI_RS_Reset(mios32_midi_port_t port);
212
 
110 tk 213
extern s32 MIOS32_MIDI_SendPackage_NonBlocking(mios32_midi_port_t port, mios32_midi_package_t package);
69 tk 214
extern s32 MIOS32_MIDI_SendPackage(mios32_midi_port_t port, mios32_midi_package_t package);
32 tk 215
 
69 tk 216
extern s32 MIOS32_MIDI_SendEvent(mios32_midi_port_t port, u8 evnt0, u8 evnt1, u8 evnt2);
217
extern s32 MIOS32_MIDI_SendNoteOff(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 vel);
218
extern s32 MIOS32_MIDI_SendNoteOn(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 vel);
219
extern s32 MIOS32_MIDI_SendPolyPressure(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 val);
681 tk 220
extern s32 MIOS32_MIDI_SendCC(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 cc_number, u8 val);
69 tk 221
extern s32 MIOS32_MIDI_SendProgramChange(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 prg);
222
extern s32 MIOS32_MIDI_SendAftertouch(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 val);
223
extern s32 MIOS32_MIDI_SendPitchBend(mios32_midi_port_t port, mios32_midi_chn_t chn, u16 val);
224
 
225
extern s32 MIOS32_MIDI_SendSysEx(mios32_midi_port_t port, u8 *stream, u32 count);
226
extern s32 MIOS32_MIDI_SendMTC(mios32_midi_port_t port, u8 val);
227
extern s32 MIOS32_MIDI_SendSongPosition(mios32_midi_port_t port, u16 val);
228
extern s32 MIOS32_MIDI_SendSongSelect(mios32_midi_port_t port, u8 val);
229
extern s32 MIOS32_MIDI_SendTuneRequest(mios32_midi_port_t port);
230
extern s32 MIOS32_MIDI_SendClock(mios32_midi_port_t port);
231
extern s32 MIOS32_MIDI_SendTick(mios32_midi_port_t port);
232
extern s32 MIOS32_MIDI_SendStart(mios32_midi_port_t port);
233
extern s32 MIOS32_MIDI_SendStop(mios32_midi_port_t port);
234
extern s32 MIOS32_MIDI_SendContinue(mios32_midi_port_t port);
235
extern s32 MIOS32_MIDI_SendActiveSense(mios32_midi_port_t port);
236
extern s32 MIOS32_MIDI_SendReset(mios32_midi_port_t port);
237
 
1541 tk 238
extern s32 MIOS32_MIDI_SendDebugStringHeader(mios32_midi_port_t port, char command, char first_byte);
239
extern s32 MIOS32_MIDI_SendDebugStringBody(mios32_midi_port_t port, char *str_from_second_byte, u32 len);
240
extern s32 MIOS32_MIDI_SendDebugStringFooter(mios32_midi_port_t port);
241
 
307 tk 242
extern s32 MIOS32_MIDI_SendDebugMessage(char *format, ...);
1477 tk 243
extern s32 MIOS32_MIDI_SendDebugString(char *str);
369 tk 244
extern s32 MIOS32_MIDI_SendDebugHexDump(u8 *src, u32 len);
69 tk 245
 
1921 tk 246
extern s32 MIOS32_MIDI_ReceivePackage(mios32_midi_port_t port, mios32_midi_package_t package, void *_callback_package);
674 tk 247
extern s32 MIOS32_MIDI_Receive_Handler(void *callback_event);
32 tk 248
 
528 tk 249
extern s32 MIOS32_MIDI_Periodic_mS(void);
250
 
1327 tk 251
extern s32 MIOS32_MIDI_DirectTxCallback_Init(s32 (*callback_tx)(mios32_midi_port_t port, mios32_midi_package_t package));
252
extern s32 MIOS32_MIDI_DirectRxCallback_Init(s32 (*callback_rx)(mios32_midi_port_t port, u8 midi_byte));
281 tk 253
 
155 tk 254
extern s32 MIOS32_MIDI_SendByteToRxCallback(mios32_midi_port_t port, u8 midi_byte);
255
extern s32 MIOS32_MIDI_SendPackageToRxCallback(mios32_midi_port_t port, mios32_midi_package_t midi_package);
33 tk 256
 
225 tk 257
extern s32 MIOS32_MIDI_DefaultPortSet(mios32_midi_port_t port);
258
extern mios32_midi_port_t MIOS32_MIDI_DefaultPortGet(void);
155 tk 259
 
307 tk 260
extern s32 MIOS32_MIDI_DebugPortSet(mios32_midi_port_t port);
261
extern mios32_midi_port_t MIOS32_MIDI_DebugPortGet(void);
262
 
225 tk 263
extern s32 MIOS32_MIDI_DeviceIDSet(u8 device_id);
264
extern u8  MIOS32_MIDI_DeviceIDGet(void);
265
 
1327 tk 266
extern s32 MIOS32_MIDI_SysExCallback_Init(s32 (*callback_sysex)(mios32_midi_port_t port, u8 sysex_byte));
674 tk 267
 
1327 tk 268
extern s32 MIOS32_MIDI_DebugCommandCallback_Init(s32 (*callback_debug_command)(mios32_midi_port_t port, char c));
1541 tk 269
extern s32 MIOS32_MIDI_FilebrowserCommandCallback_Init(s32 (*callback_filebrowser_command)(mios32_midi_port_t port, char c));
582 tk 270
 
1327 tk 271
extern s32 MIOS32_MIDI_TimeOutCallback_Init(s32 (*callback_timeout)(mios32_midi_port_t port));
225 tk 272
 
529 tk 273
 
32 tk 274
/////////////////////////////////////////////////////////////////////////////
275
// Export global variables
276
/////////////////////////////////////////////////////////////////////////////
277
 
80 tk 278
extern const u8 mios32_midi_pcktype_num_bytes[16];
89 tk 279
extern const u8 mios32_midi_expected_bytes_common[8];
280
extern const u8 mios32_midi_expected_bytes_system[16];
32 tk 281
 
225 tk 282
extern const u8 mios32_midi_sysex_header[5];
283
 
32 tk 284
#endif /* _MIOS32_MIDI_H */