Subversion Repositories svn.mios32

Rev

Rev 369 | Rev 528 | 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 446 2009-04-14 07:10:15Z 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
 
307 tk 37
// MIDI acknowledge reply codes
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
57
 
58
 
59
/////////////////////////////////////////////////////////////////////////////
69 tk 60
// Global Types
61
/////////////////////////////////////////////////////////////////////////////
33 tk 62
 
63
 
69 tk 64
typedef enum {
307 tk 65
  DEFAULT    = 0x00,
66
  MIDI_DEBUG = 0x01,
33 tk 67
 
78 tk 68
  USB0 = 0x10,
69
  USB1 = 0x11,
70
  USB2 = 0x12,
71
  USB3 = 0x13,
72
  USB4 = 0x14,
73
  USB5 = 0x15,
74
  USB6 = 0x16,
75
  USB7 = 0x17,
32 tk 76
 
78 tk 77
  UART0 = 0x20,
78
  UART1 = 0x21,
284 tk 79
  UART2 = 0x22,
80
  UART3 = 0x23,
78 tk 81
 
82
  IIC0 = 0x30,
83
  IIC1 = 0x31,
84
  IIC2 = 0x32,
85
  IIC3 = 0x33,
86
  IIC4 = 0x34,
87
  IIC5 = 0x35,
88
  IIC6 = 0x36,
89
  IIC7 = 0x37
69 tk 90
} mios32_midi_port_t;
32 tk 91
 
92
 
69 tk 93
typedef enum {
94
  NoteOff       = 0x8,
95
  NoteOn        = 0x9,
96
  PolyPressure  = 0xa,
97
  CC            = 0xb,
98
  ProgramChange = 0xc,
99
  Aftertouch    = 0xd,
100
  PitchBend     = 0xe
101
} mios32_midi_event_t;
32 tk 102
 
69 tk 103
 
104
typedef enum {
105
  Chn1,
106
  Chn2,
107
  Chn3,
108
  Chn4,
109
  Chn5,
110
  Chn6,
111
  Chn7,
112
  Chn8,
113
  Chn9,
114
  Chn10,
115
  Chn11,
116
  Chn12,
117
  Chn13,
118
  Chn14,
119
  Chn15,
120
  Chn16
121
} mios32_midi_chn_t;
122
 
123
 
32 tk 124
typedef union {
125
  struct {
126
    unsigned ALL:32;
127
  };
128
  struct {
337 tk 129
    unsigned cin_cable:8;
32 tk 130
    unsigned evnt0:8;
131
    unsigned evnt1:8;
132
    unsigned evnt2:8;
133
  };
69 tk 134
  struct {
337 tk 135
    unsigned type:4;
69 tk 136
    unsigned cable:4;
137
    mios32_midi_chn_t chn:4;
138
    mios32_midi_event_t event:4;
139
    unsigned value1:8;
140
    unsigned value2:8;
141
  };
446 tk 142
 
143
#ifndef __cplusplus
144
  // C++ doesn't allow to redefine names in unions
145
  // as a simple workaround, we only provide them for .c code
69 tk 146
  struct {
147
    unsigned cin:4;
148
    unsigned cable:4;
149
    mios32_midi_chn_t chn:4;
150
    mios32_midi_event_t event:4;
151
    unsigned note:8;
152
    unsigned velocity:8;
153
  };
154
  struct {
155
    unsigned cin:4;
156
    unsigned cable:4;
157
    mios32_midi_chn_t chn:4;
158
    mios32_midi_event_t event:4;
159
    unsigned cc_number:8;
160
    unsigned value:8;
161
  };
162
  struct {
163
    unsigned cin:4;
164
    unsigned cable:4;
165
    mios32_midi_chn_t chn:4;
166
    mios32_midi_event_t event:4;
167
    unsigned program_change:8;
168
    unsigned dummy:8;
169
  };
446 tk 170
#endif
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
 
110 tk 190
extern s32 MIOS32_MIDI_SendPackage_NonBlocking(mios32_midi_port_t port, mios32_midi_package_t package);
69 tk 191
extern s32 MIOS32_MIDI_SendPackage(mios32_midi_port_t port, mios32_midi_package_t package);
32 tk 192
 
69 tk 193
extern s32 MIOS32_MIDI_SendEvent(mios32_midi_port_t port, u8 evnt0, u8 evnt1, u8 evnt2);
194
extern s32 MIOS32_MIDI_SendNoteOff(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 vel);
195
extern s32 MIOS32_MIDI_SendNoteOn(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 vel);
196
extern s32 MIOS32_MIDI_SendPolyPressure(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 val);
226 stryd_one 197
extern s32 MIOS32_MIDI_SendCC(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 val);
69 tk 198
extern s32 MIOS32_MIDI_SendProgramChange(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 prg);
199
extern s32 MIOS32_MIDI_SendAftertouch(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 val);
200
extern s32 MIOS32_MIDI_SendPitchBend(mios32_midi_port_t port, mios32_midi_chn_t chn, u16 val);
201
 
202
extern s32 MIOS32_MIDI_SendSysEx(mios32_midi_port_t port, u8 *stream, u32 count);
203
extern s32 MIOS32_MIDI_SendMTC(mios32_midi_port_t port, u8 val);
204
extern s32 MIOS32_MIDI_SendSongPosition(mios32_midi_port_t port, u16 val);
205
extern s32 MIOS32_MIDI_SendSongSelect(mios32_midi_port_t port, u8 val);
206
extern s32 MIOS32_MIDI_SendTuneRequest(mios32_midi_port_t port);
207
extern s32 MIOS32_MIDI_SendClock(mios32_midi_port_t port);
208
extern s32 MIOS32_MIDI_SendTick(mios32_midi_port_t port);
209
extern s32 MIOS32_MIDI_SendStart(mios32_midi_port_t port);
210
extern s32 MIOS32_MIDI_SendStop(mios32_midi_port_t port);
211
extern s32 MIOS32_MIDI_SendContinue(mios32_midi_port_t port);
212
extern s32 MIOS32_MIDI_SendActiveSense(mios32_midi_port_t port);
213
extern s32 MIOS32_MIDI_SendReset(mios32_midi_port_t port);
214
 
307 tk 215
extern s32 MIOS32_MIDI_SendDebugMessage(char *format, ...);
369 tk 216
extern s32 MIOS32_MIDI_SendDebugHexDump(u8 *src, u32 len);
69 tk 217
 
33 tk 218
extern s32 MIOS32_MIDI_Receive_Handler(void *callback_event, void *callback_sysex);
32 tk 219
 
281 tk 220
extern s32 MIOS32_MIDI_DirectTxCallback_Init(void *callback_tx);
221
 
222
extern s32 MIOS32_MIDI_DirectRxCallback_Init(void *callback_rx);
155 tk 223
extern s32 MIOS32_MIDI_SendByteToRxCallback(mios32_midi_port_t port, u8 midi_byte);
224
extern s32 MIOS32_MIDI_SendPackageToRxCallback(mios32_midi_port_t port, mios32_midi_package_t midi_package);
33 tk 225
 
225 tk 226
extern s32 MIOS32_MIDI_DefaultPortSet(mios32_midi_port_t port);
227
extern mios32_midi_port_t MIOS32_MIDI_DefaultPortGet(void);
155 tk 228
 
307 tk 229
extern s32 MIOS32_MIDI_DebugPortSet(mios32_midi_port_t port);
230
extern mios32_midi_port_t MIOS32_MIDI_DebugPortGet(void);
231
 
225 tk 232
extern s32 MIOS32_MIDI_DeviceIDSet(u8 device_id);
233
extern u8  MIOS32_MIDI_DeviceIDGet(void);
234
 
235
 
32 tk 236
/////////////////////////////////////////////////////////////////////////////
237
// Export global variables
238
/////////////////////////////////////////////////////////////////////////////
239
 
80 tk 240
extern const u8 mios32_midi_pcktype_num_bytes[16];
89 tk 241
extern const u8 mios32_midi_expected_bytes_common[8];
242
extern const u8 mios32_midi_expected_bytes_system[16];
32 tk 243
 
225 tk 244
extern const u8 mios32_midi_sysex_header[5];
245
 
32 tk 246
#endif /* _MIOS32_MIDI_H */