2) In effects.c, some EffectsValues are changed to better reflect the
strings used in the XML.
3) New EffectSettings are added for use when writing out effects to XML.
4) Added an XmlLabel structure for mapping a value to a string. Generally,
these are the union of the set of all values over the set of supported
devices.
5) There's a large array of XmlSettings used to derive the translation of
a preset to XML.
6) Add an enum for product_id and use it to set a filter for file suffix.
7) Minor cleanup in push_message() that suppresses spurious error messages.
8) Fixed a bad memset in read_data_thread().
9) In gdigi.h, a few changes in names to be consistent with XML.
There are some new definitions of LFO and VSWITCH parameters that
need to be computed.
10) In gui.c, fixed up a compiler warning.
Added a map from device id to file type and code to set a default filter
in the read dialog.
Wired up the 'save to XML' callback and reorganized the menue entries to
better distinguish between 'save to file' and 'store to device'.
In preset.c, sort the params so that what we write as XML more closely
matches what is generated on the windows side.
128 lines
3.9 KiB
C
128 lines
3.9 KiB
C
/*
|
|
* Copyright (c) 2009 Tomasz Moń <desowin@gmail.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; under version 3 of the License.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses>.
|
|
*/
|
|
|
|
#ifndef GDIGI_EFFECTS_H
|
|
#define GDIGI_EFFECTS_H
|
|
|
|
#include <glib.h>
|
|
|
|
typedef enum {
|
|
VALUE_TYPE_PLAIN = 0, /**< value displayed directly */
|
|
VALUE_TYPE_SUFFIX = 1 << 0, /**< use suffix for displaying */
|
|
VALUE_TYPE_OFFSET = 1 << 1, /**< use value offset */
|
|
VALUE_TYPE_STEP = 1 << 2, /**< use value step different than 1 */
|
|
VALUE_TYPE_LABEL = 1 << 3, /**< use value labels (overrides any other option) */
|
|
VALUE_TYPE_EXTRA = 1 << 4, /**< use extra values */
|
|
VALUE_TYPE_DECIMAL= 1 << 5, /**< display decimal places */
|
|
VALUE_TYPE_NONE = 1 << 6, /**< no value displayed */
|
|
} ValueType;
|
|
|
|
typedef struct _EffectValues {
|
|
gdouble min; /**< Minumum value */
|
|
gdouble max; /**< Maximum value */
|
|
gint type; /**< value type bitmask (ValueType) */
|
|
|
|
GStrv labels; /**< value labels */
|
|
gint offset; /**< value offset */
|
|
gdouble step; /**< value step */
|
|
gchar *suffix; /**< value suffix */
|
|
|
|
struct _EffectValues *extra;
|
|
/**< additional value range,
|
|
use it when there're different range types */
|
|
gint decimal; /**< amount of decimal places to display */
|
|
} EffectValues;
|
|
|
|
typedef struct {
|
|
gchar *label; /**< Parameter name */
|
|
guint id; /**< ID (to set parameter) */
|
|
guint position; /**< position */
|
|
EffectValues *values; /**< valid parameter values */
|
|
} EffectSettings;
|
|
|
|
typedef struct {
|
|
guint type; /**< value (type) */
|
|
gchar *label; /**< Effect name */
|
|
EffectSettings *settings; /**< possible parameters */
|
|
gint settings_amt; /**< possible parameters length */
|
|
} EffectGroup;
|
|
|
|
typedef struct {
|
|
gchar *label; /**< Group label */
|
|
guint id; /**< ID to set effect on/off, or if it isn't on/off group then -1 */
|
|
guint type; /**< ID to set effect type */
|
|
guint position; /**< position */
|
|
EffectGroup *group; /**< possible effect types */
|
|
gint group_amt; /**< possible effect types length */
|
|
} Effect;
|
|
|
|
typedef struct {
|
|
gchar *label; /**< base effect name */
|
|
Effect *effect; /**< list of supported effects */
|
|
gint amt; /**< list of supported effects length */
|
|
} EffectList;
|
|
|
|
typedef struct {
|
|
guint type; /**< ID to set effect type */
|
|
guint position;
|
|
EffectGroup *group;
|
|
gint group_amt;
|
|
} ModifierGroup;
|
|
|
|
typedef struct {
|
|
gchar *name;
|
|
EffectList *effects;
|
|
gint n_effects;
|
|
gint n_rows;
|
|
} EffectPage;
|
|
|
|
typedef struct {
|
|
gchar *name;
|
|
PresetBank bank;
|
|
} Banks;
|
|
|
|
enum product_id {
|
|
RP150 = 1,
|
|
RP250 = 2,
|
|
GNX4 = 3,
|
|
GNX3000 = 4,
|
|
RP500 = 5,
|
|
RP1000 = 6,
|
|
RP155 = 7,
|
|
RP255 = 8,
|
|
RP355 = 9,
|
|
};
|
|
|
|
typedef struct {
|
|
gchar *name;
|
|
unsigned char family_id;
|
|
unsigned char product_id;
|
|
EffectPage *pages;
|
|
gint n_pages;
|
|
Banks *banks;
|
|
gint n_banks;
|
|
} Device;
|
|
|
|
ModifierGroup *modifier_linkable_list();
|
|
void modifier_group_free(ModifierGroup *modifier_group);
|
|
void get_values_info(EffectValues *values,
|
|
gdouble *min, gdouble *max, gboolean *custom);
|
|
gboolean get_device_info(unsigned char device_id, unsigned char family_id,
|
|
unsigned char product_id,
|
|
Device **device);
|
|
|
|
#endif /* GDIGI_EFFECTS_H */
|