mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
DirtySDK (EA's Dirty Sockets library) will be used for the LiveAPI implementation, and depends on: EABase, EAThread.
329 lines
11 KiB
C
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)
|
|
{
|
|
}
|