Subversion Repositories svn.mios32

Rev

Rev 2027 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2027 Rev 2659
Line 1... Line 1...
1
// $Id: seq_mixer.c 2027 2014-08-03 19:38:00Z tk $
1
// $Id: seq_mixer.c 2659 2019-01-13 14:17:46Z tk $
2
/*
2
/*
3
 * Mixer Routines
3
 * Mixer Routines
4
 *
4
 *
5
 * ==========================================================================
5
 * ==========================================================================
6
 *
6
 *
Line 18... Line 18...
18
#include <mios32.h>
18
#include <mios32.h>
19
#include "tasks.h"
19
#include "tasks.h"
20
20
21
#include "seq_ui.h"
21
#include "seq_ui.h"
22
#include "seq_mixer.h"
22
#include "seq_mixer.h"
-
 
23
#include "seq_midi_in.h"
-
 
24
#include "seq_midi_router.h"
23
#include "seq_file.h"
25
#include "seq_file.h"
24
#include "seq_file_m.h"
26
#include "seq_file_m.h"
25
27
26
28
27
/////////////////////////////////////////////////////////////////////////////
29
/////////////////////////////////////////////////////////////////////////////
Line 120... Line 122...
120
    return -2; // invalid parameter number
122
    return -2; // invalid parameter number
121
123
122
  return seq_mixer_value[chn][par];
124
  return seq_mixer_value[chn][par];
123
}
125
}
124
126
-
 
127
-
 
128
/////////////////////////////////////////////////////////////////////////////
-
 
129
// Sends a CC value, considers Bus target
-
 
130
/////////////////////////////////////////////////////////////////////////////
-
 
131
static s32 SEQ_MIXER_SendProgramChange(mios32_midi_port_t midi_port, mios32_midi_chn_t midi_chn, u8 pc)
-
 
132
{
-
 
133
  mios32_midi_package_t midi_package;
-
 
134
-
 
135
  midi_package.type  = 0xc;
-
 
136
  midi_package.evnt0 = 0xc0 | midi_chn;
-
 
137
  midi_package.evnt1 = pc;
-
 
138
  midi_package.evnt2 = 0x00;
-
 
139
-
 
140
  if( (midi_port & 0xf0) == 0xf0 ) { // send to bus?
-
 
141
    // forward to router
-
 
142
    SEQ_MIDI_ROUTER_Receive(midi_port, midi_package);
-
 
143
-
 
144
    // forward to transposer/arpeggiator/CC parser/etc...
-
 
145
    SEQ_MIDI_IN_Receive(midi_port, midi_package);
-
 
146
-
 
147
    return 0; // no error
-
 
148
  }
-
 
149
-
 
150
  return MIOS32_MIDI_SendPackage(midi_port, midi_package);
-
 
151
}
-
 
152
-
 
153
-
 
154
/////////////////////////////////////////////////////////////////////////////
-
 
155
// Sends a CC value, considers Bus target
-
 
156
/////////////////////////////////////////////////////////////////////////////
-
 
157
static s32 SEQ_MIXER_SendCC(mios32_midi_port_t midi_port, mios32_midi_chn_t midi_chn, u8 cc, u8 value)
-
 
158
{
-
 
159
  mios32_midi_package_t midi_package;
-
 
160
-
 
161
  midi_package.type  = 0xb;
-
 
162
  midi_package.evnt0 = 0xb0 | midi_chn;
-
 
163
  midi_package.evnt1 = cc;
-
 
164
  midi_package.evnt2 = value;
-
 
165
-
 
166
  if( (midi_port & 0xf0) == 0xf0 ) { // send to bus?
-
 
167
    // forward to router
-
 
168
    SEQ_MIDI_ROUTER_Receive(midi_port, midi_package);
-
 
169
-
 
170
    // forward to transposer/arpeggiator/CC parser/etc...
-
 
171
    SEQ_MIDI_IN_Receive(midi_port, midi_package);
-
 
172
-
 
173
    return 0; // no error
-
 
174
  }
-
 
175
-
 
176
  return MIOS32_MIDI_SendPackage(midi_port, midi_package);
-
 
177
}
125
178
126
/////////////////////////////////////////////////////////////////////////////
179
/////////////////////////////////////////////////////////////////////////////
127
// Sends a single mixer value
180
// Sends a single mixer value
128
/////////////////////////////////////////////////////////////////////////////
181
/////////////////////////////////////////////////////////////////////////////
129
s32 SEQ_MIXER_Send(u8 chn, seq_mixer_par_t par)
182
s32 SEQ_MIXER_Send(u8 chn, seq_mixer_par_t par)
Line 135... Line 188...
135
  if( (value=SEQ_MIXER_Get(chn, par)) < 0 )
188
  if( (value=SEQ_MIXER_Get(chn, par)) < 0 )
136
    return 0; // don't return error, as it could be misinterpreded as a MIDI interface issue
189
    return 0; // don't return error, as it could be misinterpreded as a MIDI interface issue
137
190
138
  switch( par ) {
191
  switch( par ) {
139
    case SEQ_MIXER_PAR_PRG:
192
    case SEQ_MIXER_PAR_PRG:
140
      return value == 0 ? 0 : MIOS32_MIDI_SendProgramChange(midi_port, midi_chn, value-1);
193
      return value == 0 ? 0 : SEQ_MIXER_SendProgramChange(midi_port, midi_chn, value-1);
141
    case SEQ_MIXER_PAR_VOLUME:  
194
    case SEQ_MIXER_PAR_VOLUME:  
142
      return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, 7, value-1);
195
      return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, 7, value-1);
143
    case SEQ_MIXER_PAR_PANORAMA:
196
    case SEQ_MIXER_PAR_PANORAMA:
144
      return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, 10, value-1);
197
      return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, 10, value-1);
145
    case SEQ_MIXER_PAR_REVERB:  
198
    case SEQ_MIXER_PAR_REVERB:  
146
      return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, 91, value-1);
199
      return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, 91, value-1);
147
    case SEQ_MIXER_PAR_CHORUS:
200
    case SEQ_MIXER_PAR_CHORUS:
148
      return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, 93, value-1);
201
      return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, 93, value-1);
149
    case SEQ_MIXER_PAR_MODWHEEL:
202
    case SEQ_MIXER_PAR_MODWHEEL:
150
      return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, 1, value-1);
203
      return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, 1, value-1);
151
204
152
    case SEQ_MIXER_PAR_CC1:
205
    case SEQ_MIXER_PAR_CC1:
153
      return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC1_NUM), value-1);
206
      return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC1_NUM), value-1);
154
    case SEQ_MIXER_PAR_CC2:
207
    case SEQ_MIXER_PAR_CC2:
155
      return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC2_NUM), value-1);
208
      return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC2_NUM), value-1);
156
    case SEQ_MIXER_PAR_CC3:
209
    case SEQ_MIXER_PAR_CC3:
157
      return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC3_NUM), value-1);
210
      return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC3_NUM), value-1);
158
    case SEQ_MIXER_PAR_CC4:
211
    case SEQ_MIXER_PAR_CC4:
159
      return value == 0 ? 0 : MIOS32_MIDI_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC4_NUM), value-1);
212
      return value == 0 ? 0 : SEQ_MIXER_SendCC(midi_port, midi_chn, SEQ_MIXER_Get(chn, SEQ_MIXER_PAR_CC4_NUM), value-1);
160
  }
213
  }
161
214
162
  // not supported
215
  // not supported
163
  // don't return error, as this could be misinterpreted as a MIDI interface issue
216
  // don't return error, as this could be misinterpreted as a MIDI interface issue
164
  return 0;
217
  return 0;