Subversion Repositories svn.mios32

Rev

Rev 558 | Rev 595 | 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 582 2009-05-25 22:04:11Z 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.
10
 *
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 {
128
    unsigned ALL:32;
129
  };
130
  struct {
337 tk 131
    unsigned cin_cable:8;
32 tk 132
    unsigned evnt0:8;
133
    unsigned evnt1:8;
134
    unsigned evnt2:8;
135
  };
69 tk 136
  struct {
337 tk 137
    unsigned type:4;
69 tk 138
    unsigned cable:4;
139
    mios32_midi_chn_t chn:4;
140
    mios32_midi_event_t event:4;
141
    unsigned value1:8;
142
    unsigned value2:8;
143
  };
446 tk 144
 
145
#ifndef __cplusplus
146
  // C++ doesn't allow to redefine names in unions
147
  // as a simple workaround, we only provide them for .c code
69 tk 148
  struct {
149
    unsigned cin:4;
150
    unsigned cable:4;
151
    mios32_midi_chn_t chn:4;
152
    mios32_midi_event_t event:4;
153
    unsigned note:8;
154
    unsigned velocity:8;
155
  };
156
  struct {
157
    unsigned cin:4;
158
    unsigned cable:4;
159
    mios32_midi_chn_t chn:4;
160
    mios32_midi_event_t event:4;
161
    unsigned cc_number:8;
162
    unsigned value:8;
163
  };
164
  struct {
165
    unsigned cin:4;
166
    unsigned cable:4;
167
    mios32_midi_chn_t chn:4;
168
    mios32_midi_event_t event:4;
169
    unsigned program_change:8;
170
    unsigned dummy:8;
171
  };
446 tk 172
#endif
33 tk 173
} mios32_midi_package_t;
32 tk 174
 
175
 
225 tk 176
// command states
177
typedef enum {
178
  MIOS32_MIDI_SYSEX_CMD_STATE_BEGIN,
179
  MIOS32_MIDI_SYSEX_CMD_STATE_CONT,
180
  MIOS32_MIDI_SYSEX_CMD_STATE_END
181
} mios32_midi_sysex_cmd_state_t;
182
 
183
 
32 tk 184
/////////////////////////////////////////////////////////////////////////////
185
// Prototypes
186
/////////////////////////////////////////////////////////////////////////////
187
 
188
extern s32 MIOS32_MIDI_Init(u32 mode);
189
 
78 tk 190
extern s32 MIOS32_MIDI_CheckAvailable(mios32_midi_port_t port);
191
 
528 tk 192
extern s32 MIOS32_MIDI_RS_OptimisationSet(mios32_midi_port_t port, u8 enable);
193
extern s32 MIOS32_MIDI_RS_OptimisationGet(mios32_midi_port_t port);
194
extern s32 MIOS32_MIDI_RS_Reset(mios32_midi_port_t port);
195
 
110 tk 196
extern s32 MIOS32_MIDI_SendPackage_NonBlocking(mios32_midi_port_t port, mios32_midi_package_t package);
69 tk 197
extern s32 MIOS32_MIDI_SendPackage(mios32_midi_port_t port, mios32_midi_package_t package);
32 tk 198
 
69 tk 199
extern s32 MIOS32_MIDI_SendEvent(mios32_midi_port_t port, u8 evnt0, u8 evnt1, u8 evnt2);
200
extern s32 MIOS32_MIDI_SendNoteOff(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 vel);
201
extern s32 MIOS32_MIDI_SendNoteOn(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 vel);
202
extern s32 MIOS32_MIDI_SendPolyPressure(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 val);
226 stryd_one 203
extern s32 MIOS32_MIDI_SendCC(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 val);
69 tk 204
extern s32 MIOS32_MIDI_SendProgramChange(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 prg);
205
extern s32 MIOS32_MIDI_SendAftertouch(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 val);
206
extern s32 MIOS32_MIDI_SendPitchBend(mios32_midi_port_t port, mios32_midi_chn_t chn, u16 val);
207
 
208
extern s32 MIOS32_MIDI_SendSysEx(mios32_midi_port_t port, u8 *stream, u32 count);
209
extern s32 MIOS32_MIDI_SendMTC(mios32_midi_port_t port, u8 val);
210
extern s32 MIOS32_MIDI_SendSongPosition(mios32_midi_port_t port, u16 val);
211
extern s32 MIOS32_MIDI_SendSongSelect(mios32_midi_port_t port, u8 val);
212
extern s32 MIOS32_MIDI_SendTuneRequest(mios32_midi_port_t port);
213
extern s32 MIOS32_MIDI_SendClock(mios32_midi_port_t port);
214
extern s32 MIOS32_MIDI_SendTick(mios32_midi_port_t port);
215
extern s32 MIOS32_MIDI_SendStart(mios32_midi_port_t port);
216
extern s32 MIOS32_MIDI_SendStop(mios32_midi_port_t port);
217
extern s32 MIOS32_MIDI_SendContinue(mios32_midi_port_t port);
218
extern s32 MIOS32_MIDI_SendActiveSense(mios32_midi_port_t port);
219
extern s32 MIOS32_MIDI_SendReset(mios32_midi_port_t port);
220
 
307 tk 221
extern s32 MIOS32_MIDI_SendDebugMessage(char *format, ...);
369 tk 222
extern s32 MIOS32_MIDI_SendDebugHexDump(u8 *src, u32 len);
69 tk 223
 
33 tk 224
extern s32 MIOS32_MIDI_Receive_Handler(void *callback_event, void *callback_sysex);
32 tk 225
 
528 tk 226
extern s32 MIOS32_MIDI_Periodic_mS(void);
227
 
281 tk 228
extern s32 MIOS32_MIDI_DirectTxCallback_Init(void *callback_tx);
229
 
230
extern s32 MIOS32_MIDI_DirectRxCallback_Init(void *callback_rx);
155 tk 231
extern s32 MIOS32_MIDI_SendByteToRxCallback(mios32_midi_port_t port, u8 midi_byte);
232
extern s32 MIOS32_MIDI_SendPackageToRxCallback(mios32_midi_port_t port, mios32_midi_package_t midi_package);
33 tk 233
 
225 tk 234
extern s32 MIOS32_MIDI_DefaultPortSet(mios32_midi_port_t port);
235
extern mios32_midi_port_t MIOS32_MIDI_DefaultPortGet(void);
155 tk 236
 
307 tk 237
extern s32 MIOS32_MIDI_DebugPortSet(mios32_midi_port_t port);
238
extern mios32_midi_port_t MIOS32_MIDI_DebugPortGet(void);
239
 
225 tk 240
extern s32 MIOS32_MIDI_DeviceIDSet(u8 device_id);
241
extern u8  MIOS32_MIDI_DeviceIDGet(void);
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 */