opalplugin.h

Go to the documentation of this file.
00001 /*
00002  * h323plugins.h
00003  *
00004  * H.323 codec plugins handler
00005  *
00006  * Open H323 Library
00007  *
00008  * Copyright (C) 2004 Post Increment
00009  *
00010  * The contents of this file are subject to the Mozilla Public License
00011  * Version 1.0 (the "License"); you may not use this file except in
00012  * compliance with the License. You may obtain a copy of the License at
00013  * http://www.mozilla.org/MPL/
00014  *
00015  * Software distributed under the License is distributed on an "AS IS"
00016  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
00017  * the License for the specific language governing rights and limitations
00018  * under the License.
00019  *
00020  * The Original Code is Open H323 Library.
00021  *
00022  * The Initial Developer of the Original Code is Post Increment
00023  *
00024  * Contributor(s): ______________________________________.
00025  *
00026  * $Log: opalplugin.h,v $
00027  * Revision 1.10  2006/05/16 11:26:06  shorne
00028  * Added more hid key input mask types
00029  *
00030  * Revision 1.9  2005/11/21 21:04:10  shorne
00031  * Added more HID input switches
00032  *
00033  * Revision 1.8  2005/08/23 08:13:06  shorne
00034  * Added HID plugin volume & LCD display support
00035  *
00036  * Revision 1.7  2005/07/03 13:54:23  shorne
00037  * Added Initial LID Plugin Support
00038  *
00039  * Revision 1.6  2005/06/07 03:22:22  csoutheren
00040  * Added patch 1198741 with support for plugin codecs with generic capabilities
00041  * Added patch 1198754 with support for setting quality level on audio codecs
00042  * Added patch 1198760 with GSM-AMR codec support
00043  * Many thanks to Richard van der Hoff for his work
00044  *
00045  * Revision 1.5  2004/12/20 23:30:20  csoutheren
00046  * Added plugin support for packet loss concealment frames
00047  *
00048  * Revision 1.4  2004/11/29 06:30:53  csoutheren
00049  * Added support for wideband codecs
00050  *
00051  * Revision 1.3  2004/05/18 22:26:28  csoutheren
00052  * Initial support for embedded codecs
00053  * Fixed problems with streamed codec support
00054  * Updates for abstract factory loading methods
00055  *
00056  * Revision 1.2  2004/05/09 14:44:36  csoutheren
00057  * Added support for streamed plugin audio codecs
00058  *
00059  * Revision 1.1  2004/04/09 12:25:25  csoutheren
00060  * Renamed from h323plugin.h
00061  *
00062  * Revision 1.2  2004/04/03 10:38:24  csoutheren
00063  * Added in initial cut at codec plugin code. Branches are for wimps :)
00064  *
00065  * Revision 1.1.2.1  2004/03/31 11:03:16  csoutheren
00066  * Initial public version
00067  *
00068  * Revision 1.8  2004/02/23 13:17:32  craigs
00069  * Fixed problems with codec interface functions
00070  *
00071  * Revision 1.7  2004/02/23 13:04:09  craigs
00072  * Removed warnings when compliing plugins
00073  *
00074  * Revision 1.6  2004/01/27 14:55:46  craigs
00075  * Implemented static linking of new codecs
00076  *
00077  * Revision 1.5  2004/01/23 05:21:15  craigs
00078  * Updated for changes to the codec plugin interface
00079  *
00080  * Revision 1.4  2004/01/09 11:27:46  craigs
00081  * Plugin codec audio now works :)
00082  *
00083  * Revision 1.3  2004/01/09 07:32:22  craigs
00084  * More fixes for capability problems
00085  *
00086  * Revision 1.2  2004/01/06 07:05:03  craigs
00087  * Changed to support plugin codecs
00088  *
00089  * Revision 1.1  2004/01/04 13:37:51  craigs
00090  * Implementation of codec plugins
00091  *
00092  *
00093  */
00094 
00095 #ifndef __OPAL_H323PLUGIN_H
00096 #define __OPAL_H323PLUGIN_H
00097 
00098 #ifdef __cplusplus
00099 extern "C" {
00100 #endif
00101 
00102 #include <time.h>
00103 
00104 #ifdef _WIN32
00105 #  ifdef PLUGIN_CODEC_DLL_EXPORTS
00106 #    define PLUGIN_CODEC_DLL_API __declspec(dllexport)
00107 #  else
00108 #    define PLUGIN_CODEC_DLL_API __declspec(dllimport)
00109 #  endif
00110 
00111 #else
00112 
00113 #define PLUGIN_CODEC_DLL_API
00114 
00115 #endif
00116 
00117 #define PWLIB_PLUGIN_API_VERSION 0
00118 
00119 #define PLUGIN_CODEC_VERSION                     1    // initial version
00120 #define PLUGIN_CODEC_VERSION_WIDEBAND            2    // added wideband
00121 
00122 #define PLUGIN_CODEC_API_VER_FN       PWLibPlugin_GetAPIVersion
00123 #define PLUGIN_CODEC_API_VER_FN_STR   "PWLibPlugin_GetAPIVersion"
00124 
00125 #define PLUGIN_CODEC_GET_CODEC_FN     OpalCodecPlugin_GetCodecs
00126 #define PLUGIN_CODEC_GET_CODEC_FN_STR "OpalCodecPlugin_GetCodecs"
00127 
00128 #define PLUGIN_CODEC_API_VER_FN_DECLARE \
00129 PLUGIN_CODEC_DLL_API unsigned int PLUGIN_CODEC_API_VER_FN() \
00130 { return PWLIB_PLUGIN_API_VERSION; }
00131 
00132 enum {
00133   PluginCodec_License_None                           = 0,
00134   PluginCodec_Licence_None = PluginCodec_License_None,        // allow for old code with misspelled constant
00135   PluginCodec_License_GPL                            = 1,
00136   PluginCodec_License_MPL                            = 2,
00137   PluginCodec_License_Freeware                       = 3,
00138   PluginCodec_License_ResearchAndDevelopmentUseOnly  = 4,
00139   PluginCodec_License_BSD                            = 5,
00140 
00141   PluginCodec_License_NoRoyalties                    = 0x7f,
00142 
00143   // any license codes above here require royalty payments
00144   PluginCodec_License_RoyaltiesRequired              = 0x80
00145 };
00146 
00147 struct PluginCodec_information {
00148   // start of version 1 fields
00149   time_t timestamp;                     // codec creation time and date - obtain with command: date -u "+%c = %s"
00150 
00151   const char * sourceAuthor;            // source code author
00152   const char * sourceVersion;           // source code version
00153   const char * sourceEmail;             // source code email contact information
00154   const char * sourceURL;               // source code web site
00155   const char * sourceCopyright;         // source code copyright
00156   const char * sourceLicense;           // source code license
00157   unsigned char sourceLicenseCode;      // source code license
00158 
00159   const char * codecDescription;        // codec description
00160   const char * codecAuthor;             // codec author
00161   const char * codecVersion;            // codec version
00162   const char * codecEmail;              // codec email contact information
00163   const char * codecURL;                // codec web site
00164   const char * codecCopyright;          // codec copyright information
00165   const char * codecLicense;            // codec license
00166   unsigned short codecLicenseCode;      // codec license code
00167   // end of version 1 fields
00168 
00169 };
00170 
00171 enum PluginCodec_Flags {
00172   PluginCodec_MediaTypeMask          = 0x000f,
00173   PluginCodec_MediaTypeAudio         = 0x0000,
00174   PluginCodec_MediaTypeVideo         = 0x0001,
00175   PluginCodec_MediaTypeAudioStreamed = 0x0002,
00176 
00177   PluginCodec_InputTypeMask          = 0x0010,
00178   PluginCodec_InputTypeRaw           = 0x0000,
00179   PluginCodec_InputTypeRTP           = 0x0010,
00180 
00181   PluginCodec_OutputTypeMask         = 0x0020,
00182   PluginCodec_OutputTypeRaw          = 0x0000,
00183   PluginCodec_OutputTypeRTP          = 0x0020,
00184 
00185   PluginCodec_RTPTypeMask            = 0x0040,
00186   PluginCodec_RTPTypeDynamic         = 0x0000,
00187   PluginCodec_RTPTypeExplicit        = 0x0040,
00188 
00189   PluginCodec_RTPSharedMask          = 0x0080,
00190   PluginCodec_RTPTypeNotShared       = 0x0000,
00191   PluginCodec_RTPTypeShared          = 0x0080,
00192 
00193   PluginCodec_DecodeSilenceMask      = 0x0100,
00194   PluginCodec_NoDecodeSilence        = 0x0000,
00195   PluginCodec_DecodeSilence          = 0x0100,
00196 
00197   PluginCodec_BitsPerSamplePos       = 12,
00198   PluginCodec_BitsPerSampleMask      = 0xf000,
00199 };
00200 
00201 enum PluginCodec_CoderFlags {
00202   PluginCodec_CoderSilenceFrame      = 1
00203 };
00204 
00205 struct PluginCodec_Definition;
00206 
00207 struct PluginCodec_ControlDefn {
00208   const char * name;
00209   int (*control)(const struct PluginCodec_Definition * codec, void * context, 
00210                  const char * name, void * parm, unsigned * parmLen);
00211  
00212 };
00213 
00214 struct PluginCodec_Definition {
00215   unsigned int version;                                // codec structure version
00216 
00217   // start of version 1 fields
00218   struct PluginCodec_information * info;   // license information
00219 
00220   unsigned int flags;                      // b0-3: 0 = audio,        1 = video
00221                                            // b4:   0 = raw input,    1 = RTP input
00222                                            // b5:   0 = raw output,   1 = RTP output
00223                                            // b6:   0 = dynamic RTP,  1 = explicit RTP
00224                                            // b7:   0 = no share RTP, 1 = share RTP
00225 
00226   const char * descr;                                  // text decription
00227 
00228   const char * sourceFormat;               // source format
00229   const char * destFormat;                 // destination format
00230 
00231   const void * userData;                   // user data value
00232 
00233   unsigned int sampleRate;                 // samples per second
00234   unsigned int bitsPerSec;                       // raw bits per second
00235   unsigned int nsPerFrame;                 // nanoseconds per frame
00236   unsigned int samplesPerFrame;                  // samples per frame
00237   unsigned int bytesPerFrame;              // max bytes per frame
00238   unsigned int recommendedFramesPerPacket; // recommended number of frames per packet
00239   unsigned int maxFramesPerPacket;         // maximum number of frames per packet
00240 
00241   unsigned char rtpPayload;                      // IANA RTP payload code (if defined)
00242   const char * sdpFormat;                  // SDP format string (or NULL, if no SDP format)
00243 
00244   void * (*createCodec)(const struct PluginCodec_Definition * codec);                     // create codec 
00245   void (*destroyCodec) (const struct PluginCodec_Definition * codec,  void * context);  // destroy codec
00246   int (*codecFunction) (const struct PluginCodec_Definition * codec,  void * context,   // do codec function
00247                                   const void * from, unsigned * fromLen,
00248                                         void * to,   unsigned * toLen,
00249                                         unsigned int * flag);
00250   struct PluginCodec_ControlDefn * codecControls;
00251  
00252   // H323 specific fields
00253   unsigned char h323CapabilityType;
00254   void          * h323CapabilityData;
00255 
00256   // end of version 1 fields
00257 };
00258 
00259 typedef struct PluginCodec_Definition * (* PluginCodec_GetCodecFunction)(unsigned int *, unsigned int);
00260 typedef unsigned (* PluginCodec_GetAPIVersionFunction)();
00261 
00263 //
00264 //  H.323 specific values
00265 //
00266 
00267 
00268 struct PluginCodec_H323CapabilityExtension {
00269   unsigned int index;
00270   void * data;
00271   unsigned dataLength;
00272 };
00273 
00274 struct PluginCodec_H323NonStandardCodecData {
00275   const char * objectId;
00276   unsigned char  t35CountryCode;
00277   unsigned char  t35Extension;
00278   unsigned short manufacturerCode;
00279   const unsigned char * data;
00280   unsigned int dataLength;
00281   int (*capabilityMatchFunction)(struct PluginCodec_H323NonStandardCodecData *);
00282 };
00283 
00284 
00285 struct PluginCodec_H323GenericParameterDefinition
00286 {
00287     int collapsing; /* boolean */
00288     unsigned int id;
00289     enum PluginCodec_H323GenericParameterType {
00290         /* these need to be in the same order as the choices in
00291            H245_ParameterValue::Choices, as the value is just cast to that type
00292         */
00293         PluginCodec_GenericParameter_Logical = 0,
00294         PluginCodec_GenericParameter_Bitfield,
00295         PluginCodec_GenericParameter_ShortMin,
00296         PluginCodec_GenericParameter_ShortMax,
00297         PluginCodec_GenericParameter_LongMin,
00298         PluginCodec_GenericParameter_LongMax,
00299         PluginCodec_GenericParameter_OctetString,
00300         PluginCodec_GenericParameter_GenericParameter
00301     } type;
00302     union {
00303         unsigned long integer;
00304         char *octetstring;
00305         struct PluginCodec_H323GenericParameterDefinition *genericparameter;
00306     } value;
00307 };
00308 
00309     
00310 struct PluginCodec_H323GenericCodecData {
00311     // XXX need a way of specifying non-standard identifiers?
00312     
00313     // some cunning structures & lists, and associated logic in 
00314     // H323CodecPluginGenericAudioCapability::H323CodecPluginGenericAudioCapability()
00315     const char * standardIdentifier;
00316     unsigned int maxBitRate;
00317 
00318     /* parameters; these are the parameters which are set in the
00319        'TerminalCapabilitySet' and 'OpenLogicalChannel' requests */
00320     unsigned int nParameters;
00321     /* an array of nParameters parameter definitions */
00322     const struct PluginCodec_H323GenericParameterDefinition *params; 
00323 };
00324     
00325 struct PluginCodec_H323AudioGSMData {
00326   int comfortNoise:1;
00327   int scrambled:1;
00328 };
00329 
00330 struct  PluginCodec_H323AudioG7231AnnexC {
00331   unsigned char maxAl_sduAudioFrames;
00332   int silenceSuppression:1;
00333   int highRateMode0:6;                // INTEGER (27..78),      -- units octets
00334   int   highRateMode1:6;                // INTEGER (27..78),    -- units octets
00335   int   lowRateMode0:6;                 // INTEGER (23..66),    -- units octets
00336   int   lowRateMode1:6;                 // INTEGER (23..66),    -- units octets
00337   int   sidMode0:4;                         // INTEGER (6..17), -- units octets
00338   int   sidMode1:4;                         // INTEGER (6..17), -- units octets
00339 };
00340 
00341 struct PluginCodec_H323VideoH261
00342 {
00343   int qcifMPI:2;                         //     INTEGER (1..4) OPTIONAL,        -- units 1/29.97 Hz
00344   int cifMPI:2;                                // INTEGER (1..4) OPTIONAL,      -- units 1/29.97 Hz
00345         int temporalSpatialTradeOffCapability; //       BOOLEAN,
00346         int maxBitRate;                        //       INTEGER (1..19200),     -- units of 100 bit/s
00347   int stillImageTransmission:1;          //     BOOLEAN,        -- Annex D of H.261
00348   int videoBadMBsCap:1;                  //     BOOLEAN
00349   const struct PluginCodec_H323CapabilityExtension * extensions;
00350 };
00351 
00352 enum {
00353   PluginCodec_H323Codec_undefined,                      // must be zero, so empty struct is undefined
00354   PluginCodec_H323Codec_programmed,                     // H323ProgrammedCapability
00355   PluginCodec_H323Codec_nonStandard,            // H323NonStandardData
00356   PluginCodec_H323Codec_generic,        // H323GenericCodecData
00357 
00358   // audio codecs
00359   PluginCodec_H323AudioCodec_g711Alaw_64k,                  // int
00360   PluginCodec_H323AudioCodec_g711Alaw_56k,                  // int
00361   PluginCodec_H323AudioCodec_g711Ulaw_64k,                  // int
00362   PluginCodec_H323AudioCodec_g711Ulaw_56k,                  // int
00363   PluginCodec_H323AudioCodec_g722_64k,                        // int
00364   PluginCodec_H323AudioCodec_g722_56k,                        // int
00365   PluginCodec_H323AudioCodec_g722_48k,                        // int
00366   PluginCodec_H323AudioCodec_g7231,                               // H323AudioG7231Data
00367   PluginCodec_H323AudioCodec_g728,                                // int
00368   PluginCodec_H323AudioCodec_g729,                                // int
00369   PluginCodec_H323AudioCodec_g729AnnexA,                      // int
00370   PluginCodec_H323AudioCodec_is11172,             // not yet implemented
00371   PluginCodec_H323AudioCodec_is13818Audio,        // not yet implemented
00372   PluginCodec_H323AudioCodec_g729wAnnexB,                     // int
00373   PluginCodec_H323AudioCodec_g729AnnexAwAnnexB,   // int
00374   PluginCodec_H323AudioCodec_g7231AnnexC,         // H323AudioG7231AnnexC
00375   PluginCodec_H323AudioCodec_gsmFullRate,                     // H323AudioGSMData
00376   PluginCodec_H323AudioCodec_gsmHalfRate,                     // H323AudioGSMData
00377   PluginCodec_H323AudioCodec_gsmEnhancedFullRate,       // H323AudioGSMData
00378   PluginCodec_H323AudioCodec_g729Extensions,      // not yet implemented
00379 
00380   // video codecs
00381   PluginCodec_H323VideoCodec_h261,                // not yet implemented 
00382   PluginCodec_H323VideoCodec_h262,                // not yet implemented
00383   PluginCodec_H323VideoCodec_h263,                // not yet implemented
00384   PluginCodec_H323VideoCodec_is11172,             // not yet implemented
00385 };
00386 
00387 
00388 
00389 #ifdef OPAL_STATIC_CODEC
00390 
00391 #  undef PLUGIN_CODEC_DLL_API
00392 #  define PLUGIN_CODEC_DLL_API static
00393 #  define PLUGIN_CODEC_IMPLEMENT(name) \
00394 unsigned int Opal_StaticCodec_##name##_GetAPIVersion() \
00395 { return PWLIB_PLUGIN_API_VERSION; } \
00396 static struct PluginCodec_Definition * PLUGIN_CODEC_GET_CODEC_FN(unsigned * count, unsigned /*version*/); \
00397 struct PluginCodec_Definition * Opal_StaticCodec_##name##_GetCodecs(unsigned * p1, unsigned p2) \
00398 { return PLUGIN_CODEC_GET_CODEC_FN(p1,p2); } \
00399 
00400 #else
00401 
00402 #  define PLUGIN_CODEC_IMPLEMENT(name) \
00403 PLUGIN_CODEC_DLL_API unsigned int PLUGIN_CODEC_API_VER_FN() \
00404 { return PWLIB_PLUGIN_API_VERSION; } \
00405 
00406 #endif
00407 
00408 #ifdef __cplusplus
00409 };
00410 #endif
00411 
00413 //  LID/HID Plugins
00414 
00415 #ifdef _WIN32   // Only Support Win32 at the moment
00416 
00417 // Harware Input Device
00418 #define PLUGIN_HID_GET_DEVICE_FN        OpalHIDPlugin_GetDevice
00419 #define PLUGIN_HID_GET_DEVICE_FN_STR "OpalHIDPlugin_GetDevice"
00420 
00421 #define PLUGIN_HID_VERSION                       1    // initial version
00422 
00423 #  define PLUGIN_HID_IMPLEMENT(name) \
00424 PLUGIN_CODEC_DLL_API unsigned int PLUGIN_CODEC_API_VER_FN() \
00425 { return PWLIB_PLUGIN_API_VERSION; } \
00426 
00427 
00428 struct PluginHID_information {
00429   // start of version 1 fields
00430   time_t timestamp;                     // codec creation time and date - obtain with command: date -u "+%c = %s"
00431 
00432   const char * sourceAuthor;            // source code author
00433   const char * sourceVersion;           // source code version
00434   const char * sourceEmail;             // source code email contact information
00435   const char * sourceURL;               // source code web site
00436   const char * sourceCopyright;         // source code copyright
00437   const char * sourceLicense;           // source code license
00438   unsigned char sourceLicenseCode;      // source code license
00439 
00440   const char * HIDDescription;          // HID description
00441   const char * HIDManufacturer;         // HID Manufacturer
00442   const char * HIDModel;                // HID Model
00443   const char * HIDEmail;                                // HID email contact information
00444   const char * HIDURL;                  // HID Manufacturer web site
00445 
00446   // end of version 1 fields
00447 
00448 };
00449 
00450 enum PluginHID_Flags {
00451   PluginHID_TypeMask            = 0x000f,
00452   PluginHID_TypeUSBAudio        = 0x0000,       // USB Audio device
00453   PluginHID_TypePCIAudio        = 0x0001,       // PCI Audio device
00454 
00455   PluginHID_ToneMask            = 0x0010,
00456   PluginHID_NoTone              = 0x0000,
00457   PluginHID_Tone                = 0x0010,       // Audio device needs a Tone generator
00458 
00459   PluginHID_GatewayMask         = 0x0020,
00460   PluginHID_NoPSTN              = 0x0000,
00461   PluginHID_PSTN                = 0x0020,       // Audio device with PSTN interoperability
00462 
00463   PluginHID_DeviceTypeMask      = 0x0040,
00464   PluginHID_DevicePOTS          = 0x0000,   // Operate like traditional Phone
00465   PluginHID_DeviceCell          = 0x0040,   // Operate Like a Cell Phone
00466 
00467   PluginHID_DeviceSoundMask     = 0x0080,
00468   PluginHID_DeviceInternal      = 0x0000,
00469   PluginHID_DeviceSound         = 0x0080        // is regular PC sound device
00470 };
00471 
00472 // Key Input Mask
00473 enum PluginHID_Input {
00474         PluginHID_None                          = 0x0000,
00475         PluginHID_KeyPadMask        = 0x0010,
00476         PluginHID_Key0                          = 0x0010,
00477         PluginHID_Key1                          = 0x0011,
00478         PluginHID_Key2                          = 0x0012,
00479         PluginHID_Key3                          = 0x0013,
00480         PluginHID_Key4                          = 0x0014,
00481         PluginHID_Key5                          = 0x0015,
00482         PluginHID_Key6                          = 0x0016,
00483         PluginHID_Key7                          = 0x0017,
00484         PluginHID_Key8                          = 0x0018,
00485         PluginHID_Key9                          = 0x0019,
00486         PluginHID_KeyStar                       = 0x001a,   // '*' character
00487         PluginHID_KeyHash                       = 0x001b,   // '#' character
00488         PluginHID_KeyA                          = 0x001c,   // (USB) Dial Button 
00489         PluginHID_KeyB                          = 0x001d,   // (USB) End Call Button 
00490         PluginHID_KeyC                          = 0x001e,   // (USB) Left Menu Navigator key 
00491         PluginHID_KeyD                          = 0x001f,   // (USB) Right Menu Navigator key 
00492 
00493         PluginHID_HookMask                      = 0x0020,
00494         PluginHID_OffHook                       = 0x0021,   // Hook State (OffHook) N/A for Cell Type
00495         PluginHID_OnHook                        = 0x0022,   // Hook State (OnHook) N/A for Cell Type
00496 
00497         PluginHID_RingMask                      = 0x0030,
00498         PluginHID_StartRing                     = 0x0031,   // Start Ringing the device
00499         PluginHID_StopRing                      = 0x0032,   // Stop Ringing the device
00500 
00501         PluginHID_VolumeMask        = 0x0040,
00502         PluginHID_VolumeUp                      = 0x0040,   // Volume Up Key pressed
00503         PluginHID_VolumeDown            = 0x0041,   // Volume Down key presses
00504         PluginHID_SetRecVol                     = 0x0042,       // Set the Record Volume 
00505         PluginHID_GetRecVol                     = 0x0043,       // Get Record Volume 
00506         PluginHID_SetPlayVol        = 0x0044,   // Set Play Volume
00507         PluginHID_GetPlayVol        = 0x0045,   // Get Play Volume
00508 
00509         PluginHID_StateMask                     = 0x0050,
00510         PluginHID_PluggedIn                     = 0x0050,   // Device is pluggedIn
00511         PluginHID_Unplugged                     = 0x0051,   // Device is unplugged
00512 
00513         PluginHID_FunctionMask      = 0x0060,   // Special Function Mark
00514         PluginHID_ClearDisplay      = 0x0061,   // Clear the digit buffer
00515         PluginHID_Redial                        = 0x0062,       // Redial Button
00516         PluginHID_UpButton                      = 0x0063,       // General Up button
00517         PluginHID_DownButton            = 0x0064,       // General Down button
00518 
00519 };
00520 
00521 struct PluginHID_Definition {
00522   unsigned int version;                                // codec structure version
00523 
00524   // start of version 1 fields
00525   struct PluginHID_information * info;   // license information
00526 
00527   unsigned int flags;                      // PluginHID_Flags,        
00528 
00529   const char * descr;                                  // text decription
00530   const char * sound;                                              // sound device name
00531 
00532   void * (*createHID)(const struct PluginHID_Definition * def);  // create HID 
00533   void (*destroyHID) (const struct PluginHID_Definition * def);  // destroy HID
00534   unsigned int (*HIDFunction) (const struct PluginHID_Definition * def, 
00535           unsigned int * InputMask, unsigned int * newVal);   // do HID function (Polling Function)
00536   void (*displayHID) (const struct PluginHID_Definition * def, const char * display);   // LCD display
00537 
00538 
00539   // end of version 1 fields
00540 };
00541 
00542 typedef struct PluginHID_Definition * (* PluginHID_GetHIDFunction)(unsigned int *, unsigned int);
00543 typedef unsigned (* PluginHID_GetAPIVersionFunction)();
00544 
00545 #endif  // LID Plugins
00546 
00547 #endif

Generated on Wed Feb 6 09:02:44 2008 for OpenH323 by  doxygen 1.5.4