1 /* ------------------------------------------------------------------ 2 * Copyright (C) 1998-2009 PacketVideo 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13 * express or implied. 14 * See the License for the specific language governing permissions 15 * and limitations under the License. 16 * ------------------------------------------------------------------- 17 */ 18 /* 19 * ============================================================================== 20 * Name : pv_2way_interface.h 21 * Part of : 22 * Interface : 23 * Description : Interface class and supporting definitions for the PV2Way SDK 24 * Version : (see RELEASE field in copyright header above) 25 * 26 * ============================================================================== 27 */ 28 29 #ifndef PV_2WAY_INTERFACE_H_INCLUDED 30 #define PV_2WAY_INTERFACE_H_INCLUDED 31 32 33 // INCLUDES 34 #ifndef PV_COMMON_TYPES_H_INCLUDED 35 #include "pv_common_types.h" 36 #endif 37 38 #ifndef OSCL_VECTOR_H_INCLUDED 39 #include "oscl_vector.h" 40 #endif 41 42 #ifndef PVT_COMMON_H_INCLUDED 43 #include "pvt_common.h" 44 #endif 45 46 #ifndef PVMF_NODE_INTERFACE_H_INCLUDED 47 #include "pvmf_node_interface.h" 48 #endif 49 50 #ifndef PVLOGGER_ACCESSORIES_H_INCLUDED 51 #include "pvlogger_accessories.h" 52 #endif 53 54 #ifndef PV_ENGINE_TYPES_H_INCLUDED 55 #include "pv_engine_types.h" 56 #endif 57 58 #ifndef PVT_2WAY_BASIC_TYPES_H_INCLUDED 59 #include "pv_2way_basic_types.h" 60 #endif 61 62 #ifndef PV_2WAY_H324M_TYPES_H_INCLUDED 63 #include "pv_2way_h324m_types.h" 64 #endif 65 66 67 // CONSTANTS 68 69 // DATA TYPES 70 71 // CLASS DECLARATION 72 73 /** 74 * CPV2WayInterface Class 75 * 76 * CPV2WayInterface is the interface to the pv2way SDK, which 77 * allows initialization, control, and termination of a two-way (3g-324m, SIP) terminal. 78 * The application is expected to contain and maintain a pointer to the 79 * CPV2WayInterface instance at all times that a call is active. 80 * The CPV2WayFactory factory class is to be used to create and 81 * delete instances of this class 82 **/ 83 class CPV2WayInterface 84 { 85 public: 86 /** 87 * Object destructor function 88 * Releases Resources prior to destruction 89 **/ ~CPV2WayInterface()90 virtual ~CPV2WayInterface() {}; 91 92 /** 93 * Returns version information about the SDK 94 * 95 * @param aSDKInfo 96 * A reference to a PVSDKInfo structure which contains the product label and date 97 * @param aContextData 98 * Optional opaque data that will be passed back to the user with the command response 99 * @leave This method can leave with one of the following error codes 100 * PVMFErrNoMemory if the SDK failed to allocate memory during this operation 101 * @returns A unique command id for asynchronous completion 102 **/ 103 OSCL_IMPORT_REF virtual PVCommandId GetSDKInfo(PVSDKInfo &aSDKInfo, 104 OsclAny* aContextData = NULL) = 0; 105 106 /** 107 * Returns information about all modules currently used by the SDK. 108 * 109 * @param aSDKModuleInfo 110 * A reference to a PVSDKModuleInfo structure which contains the number of modules currently used by 111 * pv2way SDK and the PV UID and description string for each module. The PV UID and description string 112 * for modules will be returned in one string buffer allocated by the client. If the string buffer 113 * is not large enough to hold the all the module's information, the information will be written 114 * up to the length of the buffer and truncated. 115 * @param aContextData 116 * Optional opaque data that will be passed back to the user with the command response 117 * @leave This method can leave with one of the following error codes 118 * PVMFErrNoMemory if the SDK failed to allocate memory during this operation 119 * @returns A unique command id for asynchronous completion 120 **/ 121 OSCL_IMPORT_REF virtual PVCommandId GetSDKModuleInfo(PVSDKModuleInfo &aSDKModuleInfo, 122 OsclAny* aContextData = NULL) = 0; 123 124 125 /** 126 * This function is valid only in the EIdle state. It is a no-op when 127 * invoked in any other state. It causes the pv2way to transition 128 * to the ESetup state. The terminal remains in the EInitializing state during 129 * the transition. 130 * 131 * While initializing, the pv2way tries to allocate system resources needed 132 * for a two-way call. If it fails for some reason, 133 * and the pv2way reverts to the EIdle state. All the resources are de-allocated. 134 * 135 * 136 * @param aInitInfo 137 * A reference to a CPV2WayInitInfo structure which contains the capabilities of the applications sinks 138 * and sources to handle compressed and uncompressed formats. 139 * @param aContextData 140 * Optional opaque data that will be passed back to the user with the command response 141 * @leave This method can leave with one of the following error codes 142 * PVMFErrArgument if more tx and rx codecs are set than engine can handle, or the mandatory codecs are not in the list. 143 * PVMFErrNotSupported if the format of the sources/sinks is incomtible with what the SDK can handle 144 * PVMFErrInvalidState if invoked in the incorrect state 145 * PVMFErrNoMemory if the SDK failed to allocate memory during this operation 146 * @returns A unique command id for asynchronous completion 147 **/ 148 OSCL_IMPORT_REF virtual PVCommandId Init(PV2WayInitInfo& aInitInfo, 149 OsclAny* aContextData = NULL) = 0; 150 151 /** 152 * This function is valid only in the ESetup and EInitializing state. It is a 153 * no-op when invoked in the EIdle state and returns PVMFErrInvalidState 154 * if invoked in any other state. 155 * 156 * It causes the pv2way to transition back to the EIdle state. The 157 * terminal remains in the EResetting state during the transition. 158 * 159 * While resetting, the pv2way de-allocates all resources resources that 160 * had been previously allocated. When it completes, ResetComplete is called 161 * and the pv2way reverts to the EIdle state. 162 * 163 * @param aContextData 164 * Optional opaque data that will be passed back to the user with the command response 165 * @leave This method can leave with one of the following error codes 166 * PVMFErrInvalidState if invoked in the incorrect state 167 * PVMFErrNoMemory if the SDK failed to allocate memory during this operation 168 * @returns A unique command id for asynchronous completion 169 **/ 170 OSCL_IMPORT_REF virtual PVCommandId Reset(OsclAny* aContextData = NULL) = 0; 171 172 /** 173 * This function allows the user to specify the media source for an outgoing track. 174 * Sources should be added after the PVT_INDICATION_OUTGOING_TRACK is received which specifies the format type 175 * and the unique track id. The format type is indicated using the PV2WayTrackInfoInterface extension interface in the 176 * PVAsyncInformationalEvent. 177 * Data sources could be of the following types: 178 * a)raw media sources like camera, microphone etc. 179 * b)sources of compressed data like file, combined capture and encode devices. 180 * 181 * @param aTrackId 182 * The outgoing track id 183 * @param aDataSource 184 * Reference to the data source for this track 185 * @param aContextData 186 * Optional opaque data that will be passed back to the user with the command response 187 * @leave This method can leave with one of the following error codes 188 * PVMFErrNotSupported if the format of the sources/sinks is incomtible with what the SDK can handle 189 * KPVErrInvalidState if invoked in the incorrect state 190 * KErrNoMemory if the SDK failed to allocate memory during this operation 191 * @return A unique command id for asynchronous completion 192 */ 193 OSCL_IMPORT_REF virtual PVCommandId AddDataSource(PVTrackId aTrackId, 194 PVMFNodeInterface& aDataSource, 195 OsclAny* aContextData = NULL) = 0; 196 197 /** 198 * This function unbinds a previously added source. 199 * 200 * @param aDataSource pointer to the media source node 201 * 202 * @param aContextData 203 * Optional opaque data that will be passed back to the user with the command response 204 * @returns A unique command id for asynchronous completion 205 **/ 206 OSCL_IMPORT_REF virtual PVCommandId RemoveDataSource(PVMFNodeInterface& aDataSource, 207 OsclAny* aContextData = NULL) = 0; 208 209 /** 210 * This function allows the user to specify the media sink for an incoming track. 211 * AddDataSinkL can be called only for established incoming tracks identified by a unique 212 * track id. 213 * Incoming tracks are initiated by the peer and their establishment is indicated using the 214 * PVT_INDICATION_INCOMING_TRACK notification which provides the media type and a unique track id. 215 * The format type is indicated using the PV2WayTrackInfoInterface extension interface in the 216 * PVAsyncInformationalEvent. 217 * Data sinks could be of the following types: 218 * a)raw media sinks like video display sinks for RGB and YUV formats, audio rendering sinks for PCM. 219 * b)sources of compressed data like file, combined decode and render devices. 220 * 221 * 222 * @param aTrackId 223 * Indicates the unique track id to be associated with this sink. 224 * @param aDataSink The data sink to be added 225 * @param aContextData 226 * Optional opaque data that will be passed back to the user with the command response 227 * 228 * @return A unique command id for asynchronous completion 229 **/ 230 OSCL_IMPORT_REF virtual PVCommandId AddDataSink(PVTrackId aTrackId, 231 PVMFNodeInterface& aDataSink, 232 OsclAny* aContextData = NULL) = 0; 233 234 /** 235 * This function unbinds a previously added sink. 236 * 237 * @param aDataSink pointer to the media sink node 238 * @param aContextData 239 * Optional opaque data that will be passed back to the user with the command response 240 * 241 * @returns A unique command id for asynchronous completion 242 **/ 243 OSCL_IMPORT_REF virtual PVCommandId RemoveDataSink(PVMFNodeInterface& aDataSink, 244 OsclAny* aContextData = NULL) = 0; 245 246 /** 247 * This function can be invoked only in the ESetup state. The terminal starts connecting with the remote 248 * terminal based on the specified options and capabilities. 249 * Incoming tracks may be opened before ConnectL completes and will be indicated via the 250 * PVT_INDICATION_INCOMING_TRACK event. 251 * 252 * @param aOptions 253 * Optional additional information for call setup. 254 * @param aCommServer 255 * An optional pointer to a comm server to provide comm source and sink end-points. 256 * @param aContextData 257 * Optional opaque data that will be passed back to the user with the command response 258 * 259 * @returns A unique command id for asynchronous completion 260 **/ 261 OSCL_IMPORT_REF virtual PVCommandId Connect(const PV2WayConnectOptions& aOptions, 262 PVMFNodeInterface* aCommServer = NULL, 263 OsclAny* aContextData = NULL) = 0; 264 265 /** 266 * The Disconnect call is valid only when invoked in the EConnecting, and 267 * EConnected states. It causes the terminal to transition to the 268 * EDisconnecting state. All the media tracks both incoming and outgoing 269 * will be closed on invoking Disconnect. On completion, the terminal 270 * goes to the ESetup state. The statistics of the previous call shall 271 * still be available until Connect is invoked again. 272 * 273 * It is a no-op when called in any other state. 274 * 275 * The post disconnect option specifies what this terminal wishes to do 276 * after the data call is terminated, whether it wants to disconnect the line 277 * or continue the call as a voice only call. 278 * 279 * This is an asynchronous request. 280 * 281 * @param aContextData 282 * Optional opaque data that will be passed back to the user with the command response 283 * 284 * @returns A unique command id for asynchronous completion 285 **/ 286 OSCL_IMPORT_REF virtual PVCommandId Disconnect(OsclAny* aContextData = NULL) = 0; 287 288 /** 289 * This function returns the current state of the pv2way. 290 * Application may use this info for updating display or determine if the 291 * pv2way is ready for the next request. 292 * 293 * @param aState 294 * Reflects the state of the PV 2Way engine when the command was received. 295 * @param aContextData 296 * Optional opaque data that will be passed back to the user with the command response 297 * @returns value indicating the current pv2way state 298 **/ 299 OSCL_IMPORT_REF virtual PVCommandId GetState(PV2WayState& aState, 300 OsclAny* aContextData = NULL) = 0; 301 302 /** 303 * For an incoming track this function pauses sending media to the sink (output device) and stops the sink. 304 * 305 * For outgoing, it pauses the sending of media from the source and stops the source. 306 * 307 * @param aDirection Specifies the direction of the track - incoming or outgoing 308 * @param aTrackId Specifies which track is to be paused. 309 * @param aContextData 310 * Optional opaque data that will be passed back to the user with the command response 311 * 312 * @returns A unique command id for asynchronous completion 313 **/ 314 OSCL_IMPORT_REF virtual PVCommandId Pause(PV2WayDirection aDirection, 315 PVTrackId aTrackId, 316 OsclAny* aContextData = NULL) = 0; 317 318 /** 319 * Resume a previously paused incoming or outgoing track. For incoming, 320 * this function starts resumes playing out the media to the appropriate 321 * sink based on the current settings. For outgoing it resumes encoding 322 * and sending media from the source. 323 * 324 * @param aDirection Specifies the direction of the track - incoming or outgoing 325 * @param aTrackId Specifies which track is to be paused. 326 * @param aContextData 327 * Optional opaque data that will be passed back to the user with the command response 328 * 329 * @returns A unique command id for asynchronous completion 330 **/ 331 OSCL_IMPORT_REF virtual PVCommandId Resume(PV2WayDirection aDirection, 332 PVTrackId aTrackId, 333 OsclAny* aContextData = NULL) = 0; 334 335 336 /** 337 * Allows a logging appender to be attached at some point in the 338 * logger tag tree. The location in the tag tree is specified by the 339 * input tag string. A single appender can be attached multiple times in 340 * the tree, but it may result in duplicate copies of log messages if the 341 * appender is not attached in disjoint portions of the tree. 342 * A logging appender is responsible for actually writing the log message 343 * to its final location (e.g., memory, file, network, etc). 344 * This API can be called anytime after creation of the terminal. 345 * 346 * @param aTag Specifies the logger tree tag where the appender should be attached. 347 * @param aAppender The log appender to attach. 348 * @param aContextData 349 * Optional opaque data that will be passed back to the user with the command response 350 * 351 * @exception memory_error leaves on memory allocation error. 352 * 353 * @returns A unique command id for asynchronous completion 354 **/ 355 OSCL_IMPORT_REF virtual PVCommandId SetLogAppender(const char* aTag, 356 OsclSharedPtr<PVLoggerAppender>& aAppender, 357 OsclAny* aContextData = NULL) = 0; 358 359 360 /** 361 * Allows a logging appender to be removed from the logger tree at the 362 * point specified by the input tag. The input tag cannot be NULL. 363 * 364 * @param aTag Specifies the logger tree tag where the appender should be removed. 365 * @param aAppender The log appender to remove. Must be a reference to the same object that was set. 366 * @param aContextData 367 * Optional opaque data that will be passed back to the user with the command response 368 * 369 * @exception memory_error leaves on memory allocation error. 370 * 371 * @returns A unique command id for asynchronous completion 372 **/ 373 OSCL_IMPORT_REF virtual PVCommandId RemoveLogAppender(const char* aTag, 374 OsclSharedPtr<PVLoggerAppender>& aAppender, 375 OsclAny* aContextData = NULL) = 0; 376 377 378 /** 379 * Allows the logging level to be set for the logging node specified by the 380 * tag. A larger log level will result in more messages being logged. A message 381 * will only be logged if its level is LESS THAN or equal to the current log level. 382 * The set_subtree flag will allow an entire subtree, with the specified tag as the root, 383 * to be reset to the specified value. 384 * 385 * @param aTag Specifies the logger tree tag where the log level should be set. 386 * @param aLevel Specifies the log level to set. 387 * @param aSetSubtree Specifies whether the entire subtree with aTag as the root should 388 * be reset to the log level. 389 * @param aContextData 390 * Optional opaque data that will be passed back to the user with the command response 391 * 392 * @exception memory_error leaves on memory allocation error. 393 * 394 * @returns A unique command id for asynchronous completion 395 **/ 396 OSCL_IMPORT_REF virtual PVCommandId SetLogLevel(const char* aTag, 397 int32 aLevel, 398 bool aSetSubtree = false, 399 OsclAny* aContextData = NULL) = 0; 400 401 402 /** 403 * Allows the logging level to be queried for a particular logging tag. 404 * A larger log level will result in more messages being logged. 405 * 406 * In the asynchronous response, this should return the log level along with an 407 * indication of where the level was inherited (i.e., the ancestor tag). 408 * 409 * @param aTag Specifies the logger tree tag where the log level should be retrieved. 410 * @param aLogInfo an output parameter which will be filled in with the log level information. 411 * @param aContextData 412 * Optional opaque data that will be passed back to the user with the command response 413 * @exception memory_error leaves on memory allocation error. 414 * 415 * @returns A unique command id for asynchronous completion 416 **/ 417 OSCL_IMPORT_REF virtual PVCommandId GetLogLevel(const char* aTag, 418 int32& aLogInfo, 419 OsclAny* aContextData = NULL) = 0; 420 421 /** 422 * This API is to allow for extensibility of the pv2way interface. 423 * It allows a caller to ask for all UUIDs associated with a particular MIME type. 424 * If interfaces of the requested MIME type are found within the system, they are added 425 * to the UUIDs array. 426 * 427 * Also added to the UUIDs array will be all interfaces which have the requested MIME 428 * type as a base MIME type. This functionality can be turned off. 429 * 430 * @param aMimeType The MIME type of the desired interfaces 431 * @param aUuids An array to hold the discovered UUIDs 432 * @param aExactUuidsOnly Turns on/off the retrival of UUIDs with aMimeType as a base type 433 * @param aContextData 434 * Optional opaque data that will be passed back to the user with the command response 435 **/ 436 OSCL_IMPORT_REF virtual PVCommandId QueryUUID(const PvmfMimeString& aMimeType, 437 Oscl_Vector<PVUuid, BasicAlloc>& aUuids, 438 bool aExactUuidsOnly = false, 439 OsclAny* aContextData = NULL) = 0; 440 441 /** 442 * This API is to allow for extensibility of the pv2way interface. 443 * It allows a caller to ask for an instance of a particular interface object to be returned. 444 * The mechanism is analogous to the COM IUnknown method. The interfaces are identified with 445 * an interface ID that is a UUID as in DCE and a pointer to the interface object is 446 * returned if it is supported. Otherwise the returned pointer is NULL. 447 * TBD: Define the UIID, InterfacePtr structures 448 * @param aUuid The UUID of the desired interface 449 * @param aInterfacePtr The output pointer to the desired interface 450 * @exception not_supported 451 * leaves if the specified interface id is not supported. 452 **/ 453 OSCL_IMPORT_REF virtual PVCommandId QueryInterface(const PVUuid& aUuid, 454 PVInterface*& aInterfacePtr, 455 OsclAny* aContext = NULL) = 0; 456 457 /** 458 * This API is to allow the user to cancel all pending requests. The current request being 459 * processed, if any, will also be aborted. 460 * @param aContextData 461 * Optional opaque data that will be passed back to the user with the command response 462 * @returns A unique command id for asynchronous completion 463 **/ 464 OSCL_IMPORT_REF virtual PVCommandId CancelAllCommands(OsclAny* aContextData = NULL) = 0; 465 }; 466 467 468 469 #endif // 470 471 472