Jack2 1.9.10
|
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