Subversion Repositories svn.mios32

Rev

Rev 155 | Rev 226 | 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 225 2008-12-31 00:50: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
 
69 tk 27
/////////////////////////////////////////////////////////////////////////////
225 tk 28
// Uses by MIOS32 SysEx parser
29
/////////////////////////////////////////////////////////////////////////////
30
 
31
// ack/disack code
32
#define MIOS32_MIDI_SYSEX_DISACK   0x0e
33
#define MIOS32_MIDI_SYSEX_ACK      0x0f
34
 
35
// disacknowledge arguments
36
#define MIOS32_MIDI_SYSEX_DISACK_LESS_BYTES_THAN_EXP  0x01
37
#define MIOS32_MIDI_SYSEX_DISACK_MORE_BYTES_THAN_EXP  0x02
38
#define MIOS32_MIDI_SYSEX_DISACK_WRONG_CHECKSUM       0x03
39
#define MIOS32_MIDI_SYSEX_DISACK_WRITE_FAILED         0x04
40
#define MIOS32_MIDI_SYSEX_DISACK_WRITE_ACCESS         0x05
41
#define MIOS32_MIDI_SYSEX_DISACK_MIDI_TIMEOUT         0x06
42
#define MIOS32_MIDI_SYSEX_DISACK_WRONG_DEBUG_CMD      0x07
43
#define MIOS32_MIDI_SYSEX_DISACK_WRONG_ADDR_RANGE     0x08
44
#define MIOS32_MIDI_SYSEX_DISACK_ADDR_NOT_ALIGNED     0x09
45
#define MIOS32_MIDI_SYSEX_DISACK_BS_NOT_AVAILABLE     0x0a
46
#define MIOS32_MIDI_SYSEX_DISACK_OVERRUN              0x0b
47
#define MIOS32_MIDI_SYSEX_DISACK_FRAME_ERROR          0x0c
48
#define MIOS32_MIDI_SYSEX_DISACK_WRONG_UNLOCK_SEQ     0x0d
49
#define MIOS32_MIDI_SYSEX_DISACK_INVALID_COMMAND      0x0e
50
 
51
 
52
/////////////////////////////////////////////////////////////////////////////
69 tk 53
// Global Types
54
/////////////////////////////////////////////////////////////////////////////
33 tk 55
 
56
 
69 tk 57
typedef enum {
78 tk 58
  DEFAULT = 0x00,
33 tk 59
 
78 tk 60
  USB0 = 0x10,
61
  USB1 = 0x11,
62
  USB2 = 0x12,
63
  USB3 = 0x13,
64
  USB4 = 0x14,
65
  USB5 = 0x15,
66
  USB6 = 0x16,
67
  USB7 = 0x17,
32 tk 68
 
69
 
78 tk 70
  UART0 = 0x20,
71
  UART1 = 0x21,
72
 
73
  IIC0 = 0x30,
74
  IIC1 = 0x31,
75
  IIC2 = 0x32,
76
  IIC3 = 0x33,
77
  IIC4 = 0x34,
78
  IIC5 = 0x35,
79
  IIC6 = 0x36,
80
  IIC7 = 0x37
69 tk 81
} mios32_midi_port_t;
32 tk 82
 
83
 
69 tk 84
typedef enum {
85
  NoteOff       = 0x8,
86
  NoteOn        = 0x9,
87
  PolyPressure  = 0xa,
88
  CC            = 0xb,
89
  ProgramChange = 0xc,
90
  Aftertouch    = 0xd,
91
  PitchBend     = 0xe
92
} mios32_midi_event_t;
32 tk 93
 
69 tk 94
 
95
typedef enum {
96
  Chn1,
97
  Chn2,
98
  Chn3,
99
  Chn4,
100
  Chn5,
101
  Chn6,
102
  Chn7,
103
  Chn8,
104
  Chn9,
105
  Chn10,
106
  Chn11,
107
  Chn12,
108
  Chn13,
109
  Chn14,
110
  Chn15,
111
  Chn16
112
} mios32_midi_chn_t;
113
 
114
 
32 tk 115
typedef union {
116
  struct {
117
    unsigned ALL:32;
118
  };
119
  struct {
33 tk 120
    unsigned type:8;
32 tk 121
    unsigned evnt0:8;
122
    unsigned evnt1:8;
123
    unsigned evnt2:8;
124
  };
69 tk 125
  struct {
126
    unsigned cin:4;
127
    unsigned cable:4;
128
    mios32_midi_chn_t chn:4;
129
    mios32_midi_event_t event:4;
130
    unsigned value1:8;
131
    unsigned value2:8;
132
  };
133
  struct {
134
    unsigned cin:4;
135
    unsigned cable:4;
136
    mios32_midi_chn_t chn:4;
137
    mios32_midi_event_t event:4;
138
    unsigned note:8;
139
    unsigned velocity:8;
140
  };
141
  struct {
142
    unsigned cin:4;
143
    unsigned cable:4;
144
    mios32_midi_chn_t chn:4;
145
    mios32_midi_event_t event:4;
146
    unsigned cc_number:8;
147
    unsigned value:8;
148
  };
149
  struct {
150
    unsigned cin:4;
151
    unsigned cable:4;
152
    mios32_midi_chn_t chn:4;
153
    mios32_midi_event_t event:4;
154
    unsigned program_change:8;
155
    unsigned dummy:8;
156
  };
33 tk 157
} mios32_midi_package_t;
32 tk 158
 
159
 
225 tk 160
// command states
161
typedef enum {
162
  MIOS32_MIDI_SYSEX_CMD_STATE_BEGIN,
163
  MIOS32_MIDI_SYSEX_CMD_STATE_CONT,
164
  MIOS32_MIDI_SYSEX_CMD_STATE_END
165
} mios32_midi_sysex_cmd_state_t;
166
 
167
 
32 tk 168
/////////////////////////////////////////////////////////////////////////////
169
// Prototypes
170
/////////////////////////////////////////////////////////////////////////////
171
 
172
extern s32 MIOS32_MIDI_Init(u32 mode);
173
 
78 tk 174
extern s32 MIOS32_MIDI_CheckAvailable(mios32_midi_port_t port);
175
 
110 tk 176
extern s32 MIOS32_MIDI_SendPackage_NonBlocking(mios32_midi_port_t port, mios32_midi_package_t package);
69 tk 177
extern s32 MIOS32_MIDI_SendPackage(mios32_midi_port_t port, mios32_midi_package_t package);
32 tk 178
 
69 tk 179
extern s32 MIOS32_MIDI_SendEvent(mios32_midi_port_t port, u8 evnt0, u8 evnt1, u8 evnt2);
180
extern s32 MIOS32_MIDI_SendNoteOff(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 vel);
181
extern s32 MIOS32_MIDI_SendNoteOn(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 vel);
182
extern s32 MIOS32_MIDI_SendPolyPressure(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 val);
183
extern s32 MIOS32_MIDI_SendPolyPressure(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 note, u8 val);
184
extern s32 MIOS32_MIDI_SendProgramChange(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 prg);
185
extern s32 MIOS32_MIDI_SendAftertouch(mios32_midi_port_t port, mios32_midi_chn_t chn, u8 val);
186
extern s32 MIOS32_MIDI_SendPitchBend(mios32_midi_port_t port, mios32_midi_chn_t chn, u16 val);
187
 
188
extern s32 MIOS32_MIDI_SendSysEx(mios32_midi_port_t port, u8 *stream, u32 count);
189
extern s32 MIOS32_MIDI_SendMTC(mios32_midi_port_t port, u8 val);
190
extern s32 MIOS32_MIDI_SendSongPosition(mios32_midi_port_t port, u16 val);
191
extern s32 MIOS32_MIDI_SendSongSelect(mios32_midi_port_t port, u8 val);
192
extern s32 MIOS32_MIDI_SendTuneRequest(mios32_midi_port_t port);
193
extern s32 MIOS32_MIDI_SendClock(mios32_midi_port_t port);
194
extern s32 MIOS32_MIDI_SendTick(mios32_midi_port_t port);
195
extern s32 MIOS32_MIDI_SendStart(mios32_midi_port_t port);
196
extern s32 MIOS32_MIDI_SendStop(mios32_midi_port_t port);
197
extern s32 MIOS32_MIDI_SendContinue(mios32_midi_port_t port);
198
extern s32 MIOS32_MIDI_SendActiveSense(mios32_midi_port_t port);
199
extern s32 MIOS32_MIDI_SendReset(mios32_midi_port_t port);
200
 
201
 
33 tk 202
extern s32 MIOS32_MIDI_Receive_Handler(void *callback_event, void *callback_sysex);
32 tk 203
 
155 tk 204
extern s32 MIOS32_MIDI_DirectRxTxCallback_Init(void *callback_rx, void *callback_tx);
205
extern s32 MIOS32_MIDI_SendByteToRxCallback(mios32_midi_port_t port, u8 midi_byte);
206
extern s32 MIOS32_MIDI_SendPackageToRxCallback(mios32_midi_port_t port, mios32_midi_package_t midi_package);
207
extern s32 MIOS32_MIDI_SendByteToTxCallback(mios32_midi_port_t port, u8 midi_byte);
208
extern s32 MIOS32_MIDI_SendPackageToTxCallback(mios32_midi_port_t port, mios32_midi_package_t midi_package);
33 tk 209
 
225 tk 210
extern s32 MIOS32_MIDI_DefaultPortSet(mios32_midi_port_t port);
211
extern mios32_midi_port_t MIOS32_MIDI_DefaultPortGet(void);
155 tk 212
 
225 tk 213
extern s32 MIOS32_MIDI_DeviceIDSet(u8 device_id);
214
extern u8  MIOS32_MIDI_DeviceIDGet(void);
215
 
216
 
32 tk 217
/////////////////////////////////////////////////////////////////////////////
218
// Export global variables
219
/////////////////////////////////////////////////////////////////////////////
220
 
80 tk 221
extern const u8 mios32_midi_pcktype_num_bytes[16];
89 tk 222
extern const u8 mios32_midi_expected_bytes_common[8];
223
extern const u8 mios32_midi_expected_bytes_system[16];
32 tk 224
 
225 tk 225
extern const u8 mios32_midi_sysex_header[5];
226
 
32 tk 227
#endif /* _MIOS32_MIDI_H */