Subversion Repositories svn.mios32

Rev

Rev 844 | Rev 851 | 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 848 2010-01-23 23:20:56Z 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,
91
  IIC7 = 0x37
69 tk 92
} mios32_midi_port_t;
32 tk 93
 
94
 
69 tk 95
typedef enum {
96
  NoteOff       = 0x8,
97
  NoteOn        = 0x9,
98
  PolyPressure  = 0xa,
99
  CC            = 0xb,
100
  ProgramChange = 0xc,
101
  Aftertouch    = 0xd,
102
  PitchBend     = 0xe
103
} mios32_midi_event_t;
32 tk 104
 
69 tk 105
 
106
typedef enum {
107
  Chn1,
108
  Chn2,
109
  Chn3,
110
  Chn4,
111
  Chn5,
112
  Chn6,
113
  Chn7,
114
  Chn8,
115
  Chn9,
116
  Chn10,
117
  Chn11,
118
  Chn12,
119
  Chn13,
120
  Chn14,
121
  Chn15,
122
  Chn16
123
} mios32_midi_chn_t;
124
 
125
 
32 tk 126
typedef union {
127
  struct {
848 tk 128
    u32 ALL;
32 tk 129
  };
130
  struct {
848 tk 131
    u8 cin_cable;
132
    u8 evnt0;
133
    u8 evnt1;
134
    u8 evnt2;
32 tk 135
  };
69 tk 136
  struct {
848 tk 137
    u8 type:4;
138
    u8 cable:4;
69 tk 139
    mios32_midi_chn_t chn:4;
140
    mios32_midi_event_t event:4;
848 tk 141
    u8 value1;
142
    u8 value2;
69 tk 143
  };
446 tk 144
 
844 tk 145
  // C++ doesn't allow to redefine names in anonymous unions
146
  // as a simple workaround, we rename these redundant names
69 tk 147
  struct {
848 tk 148
    u8 cin:4;
149
    u8 dummy1_cable:4;
844 tk 150
    mios32_midi_chn_t dummy1_chn:4;
151
    mios32_midi_event_t dummy1_event:4;
848 tk 152
    u8 note:8;
153
    u8 velocity:8;
69 tk 154
  };
155
  struct {
848 tk 156
    u8 dummy2_cin:4;
157
    u8 dummy2_cable:4;
844 tk 158
    mios32_midi_chn_t dummy2_chn:4;
159
    mios32_midi_event_t dummy2_event:4;
848 tk 160
    u8 cc_number:8;
161
    u8 value:8;
69 tk 162
  };
163
  struct {
848 tk 164
    u8 dummy3_cin:4;
165
    u8 dummy3_cable:4;
844 tk 166
    mios32_midi_chn_t dummy3_chn:4;
167
    mios32_midi_event_t dummy3_event:4;
848 tk 168
    u8 program_change:8;
169
    u8 dummy3:8;
69 tk 170
  };
33 tk 171
} mios32_midi_package_t;
32 tk 172
 
173
 
225 tk 174
// command states
175
typedef enum {
176
  MIOS32_MIDI_SYSEX_CMD_STATE_BEGIN,
177
  MIOS32_MIDI_SYSEX_CMD_STATE_CONT,
178
  MIOS32_MIDI_SYSEX_CMD_STATE_END
179
} mios32_midi_sysex_cmd_state_t;
180
 
181
 
32 tk 182
/////////////////////////////////////////////////////////////////////////////
183
// Prototypes
184
/////////////////////////////////////////////////////////////////////////////
185
 
186
extern s32 MIOS32_MIDI_Init(u32 mode);
187
 
78 tk 188
extern s32 MIOS32_MIDI_CheckAvailable(mios32_midi_port_t port);
189
 
528 tk 190
extern s32 MIOS32_MIDI_RS_OptimisationSet(mios32_midi_port_t port, u8 enable);
191
extern s32 MIOS32_MIDI_RS_OptimisationGet(mios32_midi_port_t port);
192
extern s32 MIOS32_MIDI_RS_Reset(mios32_midi_port_t port);
193
 
110 tk 194
extern s32 MIOS32_MIDI_SendPackage_NonBlocking(mios32_midi_port_t port, mios32_midi_package_t package);
69 tk 195
extern s32 MIOS32_MIDI_SendPackage(mios32_midi_port_t port, mios32_midi_package_t package);
32 tk 196
 
69 tk 197
extern s32 MIOS32_MIDI_SendEvent(mios32_midi_port_t port, u8 evnt0, u8 evnt1, u8 evnt2);
198
extern s32 MIOS32_MIDI_SendNoteOff(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 vel);
199
extern s32 MIOS32_MIDI_SendNoteOn(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 vel);
200
extern s32 MIOS32_MIDI_SendPolyPressure(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 val);
681 tk 201
extern s32 MIOS32_MIDI_SendCC(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 cc_number, u8 val);
69 tk 202
extern s32 MIOS32_MIDI_SendProgramChange(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 prg);
203
extern s32 MIOS32_MIDI_SendAftertouch(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 val);
204
extern s32 MIOS32_MIDI_SendPitchBend(mios32_midi_port_t port, mios32_midi_chn_t chn, u16 val);
205
 
206
extern s32 MIOS32_MIDI_SendSysEx(mios32_midi_port_t port, u8 *stream, u32 count);
207
extern s32 MIOS32_MIDI_SendMTC(mios32_midi_port_t port, u8 val);
208
extern s32 MIOS32_MIDI_SendSongPosition(mios32_midi_port_t port, u16 val);
209
extern s32 MIOS32_MIDI_SendSongSelect(mios32_midi_port_t port, u8 val);
210
extern s32 MIOS32_MIDI_SendTuneRequest(mios32_midi_port_t port);
211
extern s32 MIOS32_MIDI_SendClock(mios32_midi_port_t port);
212
extern s32 MIOS32_MIDI_SendTick(mios32_midi_port_t port);
213
extern s32 MIOS32_MIDI_SendStart(mios32_midi_port_t port);
214
extern s32 MIOS32_MIDI_SendStop(mios32_midi_port_t port);
215
extern s32 MIOS32_MIDI_SendContinue(mios32_midi_port_t port);
216
extern s32 MIOS32_MIDI_SendActiveSense(mios32_midi_port_t port);
217
extern s32 MIOS32_MIDI_SendReset(mios32_midi_port_t port);
218
 
307 tk 219
extern s32 MIOS32_MIDI_SendDebugMessage(char *format, ...);
369 tk 220
extern s32 MIOS32_MIDI_SendDebugHexDump(u8 *src, u32 len);
69 tk 221
 
674 tk 222
extern s32 MIOS32_MIDI_Receive_Handler(void *callback_event);
32 tk 223
 
528 tk 224
extern s32 MIOS32_MIDI_Periodic_mS(void);
225
 
281 tk 226
extern s32 MIOS32_MIDI_DirectTxCallback_Init(void *callback_tx);
227
 
228
extern s32 MIOS32_MIDI_DirectRxCallback_Init(void *callback_rx);
155 tk 229
extern s32 MIOS32_MIDI_SendByteToRxCallback(mios32_midi_port_t port, u8 midi_byte);
230
extern s32 MIOS32_MIDI_SendPackageToRxCallback(mios32_midi_port_t port, mios32_midi_package_t midi_package);
33 tk 231
 
225 tk 232
extern s32 MIOS32_MIDI_DefaultPortSet(mios32_midi_port_t port);
233
extern mios32_midi_port_t MIOS32_MIDI_DefaultPortGet(void);
155 tk 234
 
307 tk 235
extern s32 MIOS32_MIDI_DebugPortSet(mios32_midi_port_t port);
236
extern mios32_midi_port_t MIOS32_MIDI_DebugPortGet(void);
237
 
225 tk 238
extern s32 MIOS32_MIDI_DeviceIDSet(u8 device_id);
239
extern u8  MIOS32_MIDI_DeviceIDGet(void);
240
 
674 tk 241
extern s32 MIOS32_MIDI_SysExCallback_Init(void *callback_sysex);
242
 
582 tk 243
extern s32 MIOS32_MIDI_DebugCommandCallback_Init(void *callback_debug_command);
244
 
529 tk 245
extern s32 MIOS32_MIDI_TimeOutCallback_Init(void *callback_timeout);
225 tk 246
 
529 tk 247
 
32 tk 248
/////////////////////////////////////////////////////////////////////////////
249
// Export global variables
250
/////////////////////////////////////////////////////////////////////////////
251
 
80 tk 252
extern const u8 mios32_midi_pcktype_num_bytes[16];
89 tk 253
extern const u8 mios32_midi_expected_bytes_common[8];
254
extern const u8 mios32_midi_expected_bytes_system[16];
32 tk 255
 
225 tk 256
extern const u8 mios32_midi_sysex_header[5];
257
 
32 tk 258
#endif /* _MIOS32_MIDI_H */