00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 #ifndef OPAL_LIDS_LIDPLUGIN_H
00033 #define OPAL_LIDS_LIDPLUGIN_H
00034 
00035 #ifdef __cplusplus
00036 extern "C" {
00037 #endif
00038 
00039 #include <time.h>
00040 
00041 #ifdef _WIN32
00042 #  ifdef PLUGIN_DLL_EXPORTS
00043 #    define PLUGIN_DLL_API __declspec(dllexport)
00044 #  else
00045 #    define PLUGIN_DLL_API __declspec(dllimport)
00046 #  endif
00047 
00048 #else
00049 
00050 #define PLUGIN_DLL_API
00051 
00052 #endif
00053 
00054 #ifdef PWLIB_PLUGIN_API_VERSION
00055 #undef PWLIB_PLUGIN_API_VERSION
00056 #endif
00057 #define PWLIB_PLUGIN_API_VERSION 1
00058 
00060 
00061 
00062 
00063 #define PLUGIN_LID_VERSION 1    // initial version
00064 
00065 typedef int PluginLID_Boolean;
00066 
00067 #ifndef FALSE
00068 #define FALSE 0
00069 #endif
00070 #ifndef TRUE
00071 #define TRUE 1
00072 #endif
00073 
00074 
00075 typedef enum PluginLID_Errors {
00076   PluginLID_NoError = 0,
00077   PluginLID_UnimplementedFunction,
00078   PluginLID_BadContext,
00079   PluginLID_InvalidParameter,
00080   PluginLID_NoSuchDevice,
00081   PluginLID_DeviceOpenFailed,
00082   PluginLID_UsesSoundChannel,
00083   PluginLID_DeviceNotOpen,
00084   PluginLID_NoSuchLine,
00085   PluginLID_OperationNotAllowed,
00086   PluginLID_NoMoreNames,
00087   PluginLID_BufferTooSmall,
00088   PluginLID_UnsupportedMediaFormat,
00089   PluginLID_NoDialTone,
00090   PluginLID_LineBusy,
00091   PluginLID_NoAnswer,
00092   PluginLID_Aborted,
00093   PluginLID_InternalError,
00094   PluginLID_NumErrors
00095 } PluginLID_Errors;
00096 
00097 
00098 enum PluginLID_CallProgressTones {
00099   PluginLID_NoTone       = 0x00,   
00100   PluginLID_DialTone     = 0x01,   
00101   PluginLID_RingTone     = 0x02,   
00102   PluginLID_BusyTone     = 0x04,   
00103   PluginLID_FastBusyTone = 0x08,   
00104   PluginLID_ClearTone    = 0x10,   
00105   PluginLID_CNGTone      = 0x20,   
00106   PluginLID_MwiTone      = 0x40,   
00107   PluginLID_AllTones     = 0x4f
00108 };
00109 
00110 
00111 typedef struct PluginLID_DialParams
00112 {
00113   bool     m_requireTones;      
00114   unsigned m_dialToneTimeout;   
00115   unsigned m_dialStartDelay;    
00116   unsigned m_progressTimeout;   
00117   unsigned m_commaDelay;        
00118 } PluginLID_DialParams;
00119 
00120 
00121 typedef struct PluginLID_Definition
00122 {
00123   unsigned int apiVersion;  
00124 
00125   
00126   time_t timestamp;                 
00127 
00128   const char * name;                
00129   const char * description;         
00130   const char * manufacturer;        
00131   const char * model;               
00132   const char * revision;            
00133   const char * manufacturerEmail;   
00134   const char * manufacturerURL;     
00135 
00136   const char * author;              
00137   const char * authorEmail;         
00138   const char * authorURL;           
00139   const char * copyright;           
00140   const char * license;             
00141   const char * version;             
00142 
00143   const void * userData;            
00144 
00145   void * (*Create)(const struct PluginLID_Definition * definition);
00146   void (*Destroy)(const struct PluginLID_Definition * definition,  void * context);
00147 
00148   PluginLID_Errors (*GetDeviceName)(void * context, unsigned index, char * name, unsigned size);
00149   PluginLID_Errors (*Open)(void * context, const char * device);
00150   PluginLID_Errors (*Close)(void * context);
00151 
00152   PluginLID_Errors (*GetLineCount)(void * context, unsigned * count);
00153   PluginLID_Errors (*IsLineTerminal)(void * context, unsigned line, PluginLID_Boolean * isTerminal);
00154   PluginLID_Errors (*IsLinePresent)(void * context, unsigned line, PluginLID_Boolean forceTest, PluginLID_Boolean * present);
00155   PluginLID_Errors (*IsLineOffHook)(void * context, unsigned line, PluginLID_Boolean * offHook);
00156   PluginLID_Errors (*SetLineOffHook)(void * context, unsigned line, PluginLID_Boolean newState);
00157   PluginLID_Errors (*HookFlash)(void * context, unsigned line, unsigned flashTime);
00158   PluginLID_Errors (*HasHookFlash)(void * context, unsigned line, PluginLID_Boolean * flashed);
00159   PluginLID_Errors (*IsLineRinging)(void * context, unsigned line, unsigned long * cadence);
00160   PluginLID_Errors (*RingLine)(void * context, unsigned line, unsigned nCadence, const unsigned * pattern, unsigned frequency);
00161   PluginLID_Errors (*IsLineDisconnected)(void * context, unsigned line, PluginLID_Boolean checkForWink, PluginLID_Boolean * disconnected);
00162   PluginLID_Errors (*SetLineToLineDirect)(void * context, unsigned line1, unsigned line2, PluginLID_Boolean connect);
00163   PluginLID_Errors (*IsLineToLineDirect)(void * context, unsigned line1, unsigned line2, PluginLID_Boolean * connected);
00164 
00165   PluginLID_Errors (*GetSupportedFormat)(void * context, unsigned index, char * mediaFormat, unsigned size);
00166   PluginLID_Errors (*SetReadFormat)(void * context, unsigned line, const char * mediaFormat);
00167   PluginLID_Errors (*SetWriteFormat)(void * context, unsigned line, const char * mediaFormat);
00168   PluginLID_Errors (*GetReadFormat)(void * context, unsigned line, char * mediaFormat, unsigned size);
00169   PluginLID_Errors (*GetWriteFormat)(void * context, unsigned line, char * mediaFormat, unsigned size);
00170   PluginLID_Errors (*StopReading)(void * context, unsigned line);
00171   PluginLID_Errors (*StopWriting)(void * context, unsigned line);
00172   PluginLID_Errors (*SetReadFrameSize)(void * context, unsigned line, unsigned frameSize);
00173   PluginLID_Errors (*SetWriteFrameSize)(void * context, unsigned line, unsigned frameSize);
00174   PluginLID_Errors (*GetReadFrameSize)(void * context, unsigned line, unsigned * frameSize);
00175   PluginLID_Errors (*GetWriteFrameSize)(void * context, unsigned line, unsigned * frameSize);
00176   PluginLID_Errors (*ReadFrame)(void * context, unsigned line, void * buffer, unsigned * count);
00177   PluginLID_Errors (*WriteFrame)(void * context, unsigned line, const void * buffer, unsigned count, unsigned * written);
00178 
00179   PluginLID_Errors (*GetAverageSignalLevel)(void * context, unsigned line, PluginLID_Boolean playback, unsigned * signal);
00180 
00181   PluginLID_Errors (*EnableAudio)(void * context, unsigned line, PluginLID_Boolean enable);
00182   PluginLID_Errors (*IsAudioEnabled)(void * context, unsigned line, PluginLID_Boolean * enable);
00183   PluginLID_Errors (*SetRecordVolume)(void * context, unsigned line, unsigned volume);
00184   PluginLID_Errors (*SetPlayVolume)(void * context, unsigned line, unsigned volume);
00185   PluginLID_Errors (*GetRecordVolume)(void * context, unsigned line, unsigned * volume);
00186   PluginLID_Errors (*GetPlayVolume)(void * context, unsigned line, unsigned * volume);
00187 
00188   PluginLID_Errors (*GetAEC)(void * context, unsigned line, unsigned * level);
00189   PluginLID_Errors (*SetAEC)(void * context, unsigned line, unsigned level);
00190 
00191   PluginLID_Errors (*GetVAD)(void * context, unsigned line, PluginLID_Boolean * enable);
00192   PluginLID_Errors (*SetVAD)(void * context, unsigned line, PluginLID_Boolean enable);
00193 
00194   PluginLID_Errors (*GetCallerID)(void * context, unsigned line, char * idString, unsigned size, PluginLID_Boolean full);
00195   PluginLID_Errors (*SetCallerID)(void * context, unsigned line, const char * idString);
00196   PluginLID_Errors (*SendVisualMessageWaitingIndicator)(void * context, unsigned line, PluginLID_Boolean on);
00197 
00198   PluginLID_Errors (*PlayDTMF)(void * context, unsigned line, const char * digits, unsigned onTime, unsigned offTime);
00199   PluginLID_Errors (*ReadDTMF)(void * context, unsigned line, char * digit);
00200   PluginLID_Errors (*GetRemoveDTMF)(void * context, unsigned line, PluginLID_Boolean * removeTones);
00201   PluginLID_Errors (*SetRemoveDTMF)(void * context, unsigned line, PluginLID_Boolean removeTones);
00202 
00203   PluginLID_Errors (*IsToneDetected)(void * context, unsigned line, int * tone);
00204   PluginLID_Errors (*WaitForToneDetect)(void * context, unsigned line, unsigned timeout, int * tone);
00205   PluginLID_Errors (*WaitForTone)(void * context, unsigned line, int tone, unsigned timeout);
00206 
00207   PluginLID_Errors (*SetToneParameters)(void * context, unsigned line,
00208                                         unsigned tone,
00209                                         unsigned lowFrequency,
00210                                         unsigned highFrequency,
00211                                         unsigned mixingMode,
00212                                         unsigned numCadences,
00213                                         const unsigned * onTimes,
00214                                         const unsigned * offTimes);
00215   PluginLID_Errors (*PlayTone)(void * context, unsigned line, unsigned tone);
00216   PluginLID_Errors (*IsTonePlaying)(void * context, unsigned line, PluginLID_Boolean * playing);
00217   PluginLID_Errors (*StopTone)(void * context, unsigned line);
00218 
00219   PluginLID_Errors (*DialOut)(void * context, unsigned line, const char * number, struct PluginLID_DialParams * params);
00220 
00221   PluginLID_Errors (*GetWinkDuration)(void * context, unsigned line, unsigned * winkDuration);
00222   PluginLID_Errors (*SetWinkDuration)(void * context, unsigned line, unsigned winkDuration);
00223 
00224   PluginLID_Errors (*SetCountryCode)(void * context, unsigned country);
00225 
00226   PluginLID_Errors (*GetSupportedCountry)(void * context, unsigned index, unsigned * countryCode);
00227   
00228 
00229   PluginLID_Errors (*SetLineConnected)(void * context, unsigned line);
00230   PluginLID_Errors (*IsLineConnected)(void * context, unsigned line, PluginLID_Boolean * connected);
00231 
00232 } PluginLID_Definition;
00233 
00234 
00235 #ifdef __cplusplus
00236 
00237 #define PLUGIN_LID_CTOR() \
00238     static void * Create(const struct PluginLID_Definition * definition) { return new Context; } \
00239     Context()
00240 
00241 #define PLUGIN_LID_DTOR() \
00242     static void Destroy(const struct PluginLID_Definition * definition,  void * context) { delete (Context *)context; } \
00243     ~Context()
00244 
00245 #define PLUGIN_FUNCTION_ARG0(fn) \
00246      static PluginLID_Errors fn(void * context) { return context == NULL ? PluginLID_BadContext : ((Context *)context)->fn(); } \
00247             PluginLID_Errors fn(              )
00248 
00249 #define PLUGIN_FUNCTION_ARG0(fn) \
00250      static PluginLID_Errors fn(void * context) { return context == NULL ? PluginLID_BadContext : ((Context *)context)->fn(); } \
00251             PluginLID_Errors fn(              )
00252 
00253 #define PLUGIN_FUNCTION_ARG1(fn,                type1,var1) \
00254      static PluginLID_Errors fn(void * context, type1 var1) { return context == NULL ? PluginLID_BadContext : ((Context *)context)->fn(var1); } \
00255             PluginLID_Errors fn(                type1 var1)
00256 
00257 #define PLUGIN_FUNCTION_ARG2(fn,                type1,var1, type2,var2) \
00258      static PluginLID_Errors fn(void * context, type1 var1, type2 var2) { return context == NULL ? PluginLID_BadContext : ((Context *)context)->fn(var1, var2); } \
00259             PluginLID_Errors fn(                type1 var1, type2 var2)
00260 
00261 #define PLUGIN_FUNCTION_ARG3(fn,                type1,var1, type2,var2, type3,var3) \
00262      static PluginLID_Errors fn(void * context, type1 var1, type2 var2, type3 var3) { return context == NULL ? PluginLID_BadContext : ((Context *)context)->fn(var1, var2, var3); } \
00263             PluginLID_Errors fn(                type1 var1, type2 var2, type3 var3)
00264 
00265 #define PLUGIN_FUNCTION_ARG4(fn,                type1,var1, type2,var2, type3,var3, type4,var4) \
00266      static PluginLID_Errors fn(void * context, type1 var1, type2 var2, type3 var3, type4 var4) { return context == NULL ? PluginLID_BadContext : ((Context *)context)->fn(var1, var2, var3, var4); } \
00267             PluginLID_Errors fn(                type1 var1, type2 var2, type3 var3, type4 var4)
00268 
00269 #define PLUGIN_FUNCTION_ARG8(fn,                type1,var1, type2,var2, type3,var3, type4,var4, type5,var5, type6,var6, type7,var7, type8,var8) \
00270      static PluginLID_Errors fn(void * context, type1 var1, type2 var2, type3 var3, type4 var4, type5 var5, type6 var6, type7 var7, type8 var8) { return context == NULL ? PluginLID_BadContext : ((Context *)context)->fn(var1, var2, var3, var4, var5, var6, var7, var8); } \
00271             PluginLID_Errors fn(                type1 var1, type2 var2, type3 var3, type4 var4, type5 var5, type6 var6, type7 var7, type8 var8)
00272 
00273 #endif // __cplusplus
00274 
00275 
00276 #define PLUGIN_LID_API_VER_FN       PWLibPlugin_GetAPIVersion
00277 #define PLUGIN_LID_API_VER_FN_STR   "PWLibPlugin_GetAPIVersion"
00278 
00279 #define PLUGIN_LID_GET_LIDS_FN     OpalPluginLID_GetDefinitions
00280 #define PLUGIN_LID_GET_LIDS_FN_STR "OpalPluginLID_GetDefinitions"
00281 
00282 
00283 typedef struct PluginLID_Definition * (* PluginLID_GetDefinitionsFunction)(unsigned * , unsigned );
00284 
00285 
00286 #define PLUGIN_LID_IMPLEMENTATION(defs) \
00287   extern "C" { \
00288     PLUGIN_DLL_API unsigned int PLUGIN_LID_API_VER_FN() { return PWLIB_PLUGIN_API_VERSION; } \
00289     PLUGIN_DLL_API PluginLID_Definition * PLUGIN_LID_GET_LIDS_FN(unsigned * count, unsigned version) \
00290       { *count = sizeof(defs)/sizeof(defs[0]); return defs; } \
00291   }
00292 
00293 
00294 #ifdef __cplusplus
00295 };
00296 #endif
00297 
00298 #endif // OPAL_LIDS_LIDPLUGIN_H