Kawe Mazidjatari b3a68ed095 Add EABase, EAThread and DirtySDK to R5sdk
DirtySDK (EA's Dirty Sockets library) will be used for the LiveAPI implementation, and depends on: EABase, EAThread.
2024-04-05 18:29:03 +02:00

329 lines
11 KiB
C

/*H********************************************************************************/
/*!
\File voipheadsetstub.c
\Description
Stubbed VoIP headset manager. To be used on platform where voip connectivity
is to be exercised but not voice acquisition/playback. Typically needed
for stress testing voip connectivity with dummy voip traffic.
\Copyright
Copyright Electronic Arts 2017.
\Version 12/06/2017 (mclouatre)
*/
/********************************************************************************H*/
/*** Include files ****************************************************************/
#include "DirtySDK/platform.h"
#include "DirtySDK/dirtysock.h"
#include "DirtySDK/dirtysock/dirtymem.h"
#include "DirtySDK/voip/voipdef.h"
#include "voippriv.h"
#include "voipcommon.h"
#include "voipconnection.h"
#include "voipheadset.h"
/*** Defines **********************************************************************/
/*** Macros ************************************************************************/
/*** Type Definitions **************************************************************/
//! VOIP module state data
struct VoipHeadsetRefT
{
int32_t bParticipating; //!< local user is now in "participating" state
// speaker callback data
VoipSpkrCallbackT *pSpkrDataCb;
void *pSpkrCbUserData;
};
/*** Function Prototypes **********************************************************/
/*** Variables ********************************************************************/
// Public Variables
// Private Variables
/*** Private Functions ************************************************************/
/*** Public functions *************************************************************/
/*F********************************************************************************/
/*!
\Function VoipHeadsetCreate
\Description
Create the headset manager.
\Input iMaxConduits - max number of conduits
\Input *pMicDataCb - pointer to user callback to trigger when mic data is ready
\Input *pTextDataCb - pointer to user callback to trigger when transcribed text is ready
\Input *pOpaqueDataCb - pointer to user callback to trigger when opaque data is ready
\Input *pStatusCb - pointer to user callback to trigger when headset status changes
\Input *pCbUserData - pointer to user callback data
\Input iData - platform-specific - unused for PC
\Output
VoipHeadsetRefT * - pointer to module state, or NULL if an error occured
\Version 06/12/2017 (mclouatre)
*/
/********************************************************************************F*/
VoipHeadsetRefT *VoipHeadsetCreate(int32_t iMaxConduits, VoipHeadsetMicDataCbT *pMicDataCb, VoipHeadsetTextDataCbT *pTextDataCb, VoipHeadsetOpaqueDataCbT *pOpaqueDataCb, VoipHeadsetStatusCbT *pStatusCb, void *pCbUserData, int32_t iData)
{
VoipHeadsetRefT *pHeadset;
int32_t iMemGroup;
void *pMemGroupUserData;
// Query mem group data
VoipCommonMemGroupQuery(&iMemGroup, &pMemGroupUserData);
// make sure we don't exceed maxconduits
if (iMaxConduits > VOIP_MAXCONNECT)
{
NetPrintf(("voipheadsetstub: request for %d conduits exceeds max\n", iMaxConduits));
return(NULL);
}
// allocate and clear module state
if ((pHeadset = DirtyMemAlloc(sizeof(*pHeadset), VOIP_MEMID, iMemGroup, pMemGroupUserData)) == NULL)
{
return(NULL);
}
ds_memclr(pHeadset, sizeof(*pHeadset));
// return module ref to caller
return(pHeadset);
}
/*F********************************************************************************/
/*!
\Function VoipHeadsetDestroy
\Description
Destroy the headset manager.
\Input *pHeadset - pointer to headset state
\Version 06/12/2017 (mclouatre)
*/
/********************************************************************************F*/
void VoipHeadsetDestroy(VoipHeadsetRefT *pHeadset)
{
int32_t iMemGroup;
void *pMemGroupUserData;
// dispose of module memory
VoipCommonMemGroupQuery(&iMemGroup, &pMemGroupUserData);
DirtyMemFree(pHeadset, VOIP_MEMID, iMemGroup, pMemGroupUserData);
}
/*F********************************************************************************/
/*!
\Function VoipHeadsetReceiveVoiceDataCb
\Description
Connectionlist callback to handle receiving a voice packet from a remote peer.
\Input *pRemoteUsers - user we're receiving the voice data from
\Input iRemoteUserSize - pRemoteUsers array size
\Input iConsoleId - generic identifier for the console to which the users belong
\Input *pMicrInfo - micr info from inbound packet
\Input *pPacketData - pointer to beginning of data in packet payload
\Input *pUserData - VoipHeadsetT ref
\Version 06/12/2017 (mclouatre)
*/
/********************************************************************************F*/
void VoipHeadsetReceiveVoiceDataCb(VoipUserT *pRemoteUsers, int32_t iRemoteUserSize, int32_t iConsoleId, VoipMicrInfoT *pMicrInfo, uint8_t *pPacketData, void *pUserData)
{
}
/*F********************************************************************************/
/*!
\Function VoipHeadsetRegisterUserCb
\Description
Connectionlist callback to register/unregister a new user with the
VoipConduit module.
\Input *pRemoteUser - user to register
\Input iConsoleId - generic identifier for the console to which the user belongs (ignored)
\Input bRegister - true=register, false=unregister
\Input *pUserData - voipheadset module ref
\Version 06/12/2017 (mclouatre)
*/
/********************************************************************************F*/
void VoipHeadsetRegisterUserCb(VoipUserT *pRemoteUser, int32_t iConsoleId, uint32_t bRegister, void *pUserData)
{
}
/*F********************************************************************************/
/*!
\Function VoipHeadsetProcess
\Description
Headset process function.
\Input *pHeadset - pointer to headset state
\Input uFrameCount - process iteration counter
\Version 06/12/2017 (mclouatre)
*/
/********************************************************************************F*/
void VoipHeadsetProcess(VoipHeadsetRefT *pHeadset, uint32_t uFrameCount)
{
}
/*F********************************************************************************/
/*!
\Function VoipHeadsetSetVolume
\Description
Sets play and record volume.
\Input *pHeadset - pointer to headset state
\Input iPlayVol - play volume to set
\Input iRecVol - record volume to set
\Notes
To not set a value, specify it as -1.
\Version 06/12/2017 (mclouatre)
*/
/********************************************************************************F*/
void VoipHeadsetSetVolume(VoipHeadsetRefT *pHeadset, int32_t iPlayVol, uint32_t iRecVol)
{
}
/*F********************************************************************************/
/*!
\Function VoipHeadsetControl
\Description
Control function.
\Input *pHeadset - headset module state
\Input iControl - control selector
\Input iValue - control value
\Input iValue2 - control value
\Input *pValue - control value
\Output
int32_t - selector specific, or -1 if no such selector
\Notes
iControl can be one of the following:
\verbatim
'aloc' - promote/demote to/from participating state
'cide' - close voip input device
'code' - close voip output device
'edev' - enumerate voip input/output devices
'idev' - select voip input device
'loop' - enable/disable loopback
'micr' - enable/disable recording
'odev' - select voip output device
'play' - enable/disable playing
'svol' - changes speaker volume
\endverbatim
\Version 06/12/2017 (mclouatre)
*/
/********************************************************************************F*/
int32_t VoipHeadsetControl(VoipHeadsetRefT *pHeadset, int32_t iControl, int32_t iValue, int32_t iValue2, void *pValue)
{
if (iControl == 'aloc')
{
pHeadset->bParticipating = ((iValue2 == 0) ? FALSE : TRUE);
NetPrintf(("voipheadsetstub: %s participating state\n", pHeadset->bParticipating ? "entering" : "exiting"));
return(0);
}
return(0);
}
/*F********************************************************************************/
/*!
\Function VoipHeadsetStatus
\Description
Status function.
\Input *pHeadset - headset module state
\Input iSelect - control selector
\Input iValue - selector specific
\Input *pBuf - buffer pointer
\Input iBufSize - buffer size
\Output
int32_t - selector specific, or -1 if no such selector
\Notes
iSelect can be one of the following:
\verbatim
'ruvu' - always return TRUE because MLU is not supported on unix
\endverbatim
\Version 06/12/2017 (mclouatre)
*/
/********************************************************************************F*/
int32_t VoipHeadsetStatus(VoipHeadsetRefT *pHeadset, int32_t iSelect, int32_t iValue, void *pBuf, int32_t iBufSize)
{
if (iSelect == 'ruvu')
{
return (TRUE);
}
// unhandled result
return(-1);
}
/*F********************************************************************************/
/*!
\Function VoipHeadsetSpkrCallback
\Description
Set speaker output callback.
\Input *pHeadset - headset module state
\Input *pCallback - what to call when output data is available
\Input *pUserData - user data for callback
\Version 06/12/2017 (mclouatre)
*/
/********************************************************************************F*/
void VoipHeadsetSpkrCallback(VoipHeadsetRefT *pHeadset, VoipSpkrCallbackT *pCallback, void *pUserData)
{
pHeadset->pSpkrDataCb = pCallback;
pHeadset->pSpkrCbUserData = pUserData;
}
/*F********************************************************************************/
/*!
\Function VoipHeadsetSetFirstPartyIdCallback
\Description
Callback to tell dirtysdk what the first party id is for this user
\Input *pHeadset - headset module state
\Input *pCallback - what to call when transcribed text is received from remote player
\Input *pUserData - user data for callback
\Version 04/28/2020 (eesponda)
*/
/********************************************************************************F*/
void VoipHeadsetSetFirstPartyIdCallback(VoipHeadsetRefT *pHeadset, VoipFirstPartyIdCallbackCbT *pCallback, void *pUserData)
{
}