Jack2 1.9.10

driver_interface.h

00001 /*
00002   Copyright (C) 2003 Bob Ham <rah@bash.sh>
00003   Copyright (C) 2008 Nedko Arnaudov <nedko@arnaudov.name>
00004 
00005   This program is free software; you can redistribute it and/or modify
00006   it under the terms of the GNU Lesser General Public License as published by
00007   the Free Software Foundation; either version 2.1 of the License, or
00008   (at your option) any later version.
00009 
00010   This program is distributed in the hope that it will be useful,
00011   but WITHOUT ANY WARRANTY; without even the implied warranty of
00012   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013   GNU Lesser General Public License for more details.
00014 
00015   You should have received a copy of the GNU Lesser General Public License
00016   along with this program; if not, write to the Free Software
00017   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00018 
00019 */
00020 
00021 #ifndef __jack_driver_interface_h__
00022 #define __jack_driver_interface_h__
00023 
00024 #ifdef __cplusplus
00025 extern "C"
00026 {
00027 #endif
00028 
00029 #include <limits.h>
00030 #include "jslist.h"
00031 
00032 #include "JackCompilerDeps.h"
00033 #include "JackSystemDeps.h"
00034 
00035 #define JACK_DRIVER_NAME_MAX          15
00036 #define JACK_DRIVER_PARAM_NAME_MAX    15
00037 #define JACK_DRIVER_PARAM_STRING_MAX  127
00038 #define JACK_DRIVER_PARAM_DESC        255
00039 #define JACK_PATH_MAX                 511
00040 
00041 #define JACK_CONSTRAINT_FLAG_RANGE       ((uint32_t)1) 
00042 #define JACK_CONSTRAINT_FLAG_STRICT      ((uint32_t)2) 
00043 #define JACK_CONSTRAINT_FLAG_FAKE_VALUE  ((uint32_t)4) 
00046 typedef enum
00047 {
00048     JackDriverParamInt = 1,
00049     JackDriverParamUInt,
00050     JackDriverParamChar,
00051     JackDriverParamString,
00052     JackDriverParamBool
00053 } jack_driver_param_type_t;
00054 
00056 typedef enum
00057 {
00058     JackDriverMaster = 1,
00059     JackDriverSlave,
00060     JackDriverNone,
00061 } jack_driver_type_t;
00062 
00064 typedef union
00065 {
00066     uint32_t ui;
00067     int32_t i;
00068     char c;
00069     char str[JACK_DRIVER_PARAM_STRING_MAX + 1];
00070 } jack_driver_param_value_t;
00071 
00072 typedef struct {
00073     jack_driver_param_value_t value;
00074     char short_desc[64];               
00075 } jack_driver_param_value_enum_t;
00076 
00077 struct jack_constraint_enum_uint32_descriptor {
00078     uint32_t value;
00079     const char * short_desc;
00080 };
00081 
00082 struct jack_constraint_enum_sint32_descriptor {
00083     int32_t value;
00084     const char * short_desc;
00085 };
00086 
00087 struct jack_constraint_enum_char_descriptor {
00088     char value;
00089     const char * short_desc;
00090 };
00091 
00092 struct jack_constraint_enum_str_descriptor {
00093     const char * value;
00094     const char * short_desc;
00095 };
00096 
00097 typedef struct {
00098     uint32_t flags;         
00099     union {
00100         struct {
00101             jack_driver_param_value_t min;
00102             jack_driver_param_value_t max;
00103         } range;            
00105         struct {
00106             uint32_t count;
00107             jack_driver_param_value_enum_t * possible_values_array;
00108         } enumeration;      
00109     } constraint;
00110 } jack_driver_param_constraint_desc_t;
00111 
00113 typedef struct {
00114     char name[JACK_DRIVER_NAME_MAX + 1]; 
00115     char character;                    
00116     jack_driver_param_type_t type;     
00117     jack_driver_param_value_t value;   
00118     jack_driver_param_constraint_desc_t * constraint; 
00119     char short_desc[64];               
00120     char long_desc[1024];              
00121 }
00122 jack_driver_param_desc_t;
00123 
00125 typedef struct {
00126     char character;
00127     jack_driver_param_value_t value;
00128 }
00129 jack_driver_param_t;
00130 
00132 typedef struct {
00133     char name[JACK_DRIVER_NAME_MAX + 1];      
00134     jack_driver_type_t type;               
00135     char desc[JACK_DRIVER_PARAM_DESC + 1];    
00136     char file[JACK_PATH_MAX + 1];             
00137     uint32_t nparams;                         
00138     jack_driver_param_desc_t * params;        
00139 }
00140 jack_driver_desc_t;
00141 
00142 typedef struct {
00143     uint32_t size;          /* size of the param array, in elements */
00144 }
00145 jack_driver_desc_filler_t;
00146 
00147 int jack_parse_driver_params(jack_driver_desc_t * desc, int argc, char* argv[], JSList ** param_ptr);
00148 
00149 // To be used by drivers
00150 
00151 SERVER_EXPORT jack_driver_desc_t *            /* Newly allocated driver descriptor, NULL on failure */
00152 jack_driver_descriptor_construct(
00153     const char * name,          /* Driver name */
00154     jack_driver_type_t type,    /* Driver type */
00155     const char * description,   /* Driver description */
00156     jack_driver_desc_filler_t * filler); /* Pointer to stack var to be supplied to jack_driver_descriptor_add_parameter() as well.
00157                                             Can be NULL for drivers that have no parameters. */
00158 
00159 SERVER_EXPORT int                            /* 0 on failure */
00160 jack_driver_descriptor_add_parameter(
00161     jack_driver_desc_t * driver_descr,  /* Pointer to driver descriptor as returned by jack_driver_descriptor_construct() */
00162     jack_driver_desc_filler_t * filler, /* Pointer to the stack var that was supplied to jack_driver_descriptor_add_parameter(). */
00163     const char * name,                  /* Parameter's name */
00164     char character,                     /* Parameter's character (for getopt, etc) */
00165     jack_driver_param_type_t type,      /* The parameter's type */
00166     const jack_driver_param_value_t * value_ptr, /* Pointer to parameter's (default) value */
00167     jack_driver_param_constraint_desc_t * constraint, /* Pointer to parameter constraint descriptor. NULL if there is no constraint */
00168     const char * short_desc,            /* A short (~30 chars) description for the user */
00169     const char * long_desc);            /* A longer description for the user, if NULL short_desc will be used */
00170 
00171 SERVER_EXPORT
00172 int jack_constraint_add_enum(
00173     jack_driver_param_constraint_desc_t ** constraint_ptr_ptr,
00174     uint32_t * array_size_ptr,
00175     jack_driver_param_value_t * value_ptr,
00176     const char * short_desc);
00177 
00178 SERVER_EXPORT
00179 void jack_constraint_free(jack_driver_param_constraint_desc_t * constraint_ptr);
00180 
00181 #define JACK_CONSTRAINT_COMPOSE_ENUM(type) \
00182 SERVER_EXPORT                              \
00183 jack_driver_param_constraint_desc_t *      \
00184 jack_constraint_compose_enum_ ## type(     \
00185     uint32_t flags,                        \
00186     struct jack_constraint_enum_ ## type ## _descriptor * descr_array_ptr)
00187 
00188 JACK_CONSTRAINT_COMPOSE_ENUM(uint32);
00189 JACK_CONSTRAINT_COMPOSE_ENUM(sint32);
00190 JACK_CONSTRAINT_COMPOSE_ENUM(char);
00191 JACK_CONSTRAINT_COMPOSE_ENUM(str);
00192 
00193 typedef jack_driver_desc_t * (*JackDriverDescFunction) ();
00194 
00195 #ifdef __cplusplus
00196 }
00197 #endif
00198 
00199 #endif /* __jack_driver_interface_h__ */
00200 
00201