00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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;
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
00150
00151 SERVER_EXPORT jack_driver_desc_t *
00152 jack_driver_descriptor_construct(
00153 const char * name,
00154 jack_driver_type_t type,
00155 const char * description,
00156 jack_driver_desc_filler_t * filler);
00157
00158
00159 SERVER_EXPORT int
00160 jack_driver_descriptor_add_parameter(
00161 jack_driver_desc_t * driver_descr,
00162 jack_driver_desc_filler_t * filler,
00163 const char * name,
00164 char character,
00165 jack_driver_param_type_t type,
00166 const jack_driver_param_value_t * value_ptr,
00167 jack_driver_param_constraint_desc_t * constraint,
00168 const char * short_desc,
00169 const char * long_desc);
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
00200
00201