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

153 lines
6.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*H********************************************************************************/
/*!
\File testercomm.h
\Description
This module provides a communication layer between the host and the client.
Typical operations are SendLine() and GetLine(), which send and receive
lines of text, commands, debug output, etc. Each platform will implement
its own way of communicating through files, debugger API calls, etc.
\Copyright
Copyright (c) 2005 Electronic Arts Inc.
\Version 03/23/2005 (jfrank) First Version
*/
/********************************************************************************H*/
#ifndef _testercomm_h
#define _testercomm_h
/*** Include files ****************************************************************/
#include "DirtySDK/dirtysock.h"
#include "libsample/zlist.h"
/*** Defines **********************************************************************/
#define TESTER_MSGTYPE_NONE (0) //!< no message type
#define TESTER_MSGTYPE_CONTROL (1) //!< control message - for communication between host/client
#define TESTER_MSGTYPE_COMMAND (2) //!< command message - execute host command
#define TESTER_MSGTYPE_STATUS (3) //!< status message - for status updates between host/client
#define TESTER_MSGTYPE_CONSOLE (4) //!< console output - for display on-screen
#define TESTER_MSGTYPE_MAX (8) //!< max number of message types
#define TESTERCOMM_NUMCOMMANDS_MAX (512) //!< number of possible input/output commands outstanding
#define TESTERCOMM_COMMANDSIZE_MAX (256*1024) //!< max size of each command line
#define TESTERCOMM_ARGNUM_MAX (16) //!< max number of arguments for each command line
//! FILE-SPECIFIC defines
#define TESTERCOMM_CLIENTINPUTFILE ("clientinput.txt")
#define TESTERCOMM_CLIENTOUTPUTFILE ("clientoutput.txt")
#define TESTERCOMM_HOSTINPUTFILE (TESTERCOMM_CLIENTOUTPUTFILE)
#define TESTERCOMM_HOSTOUTPUTFILE (TESTERCOMM_CLIENTINPUTFILE)
//! MSDM-SPECIFIC defines
/*** Macros ***********************************************************************/
/*** Type Definitions *************************************************************/
// the comm module itself
typedef struct TesterCommT TesterCommT;
// message type callback
// Callback prototype used for status updates, if enabled
typedef void (TesterCommMsgCbT)(TesterCommT *pState, const char *pMsg, void *pParam);
// data container for messages to send between host and client
typedef struct TesterCommDataT
{
int32_t iType; //!< message type
char strBuffer[TESTERCOMM_COMMANDSIZE_MAX]; //!< command data pointer
} TesterCommDataT;
// interface pointers - filled in by a particular interface adapter function
typedef struct TesterCommInterfaceT
{
//! connection function
int32_t (*CommConnectFunc) (TesterCommT *pState, const char *pParams, uint32_t bIsHost);
//! update function
int32_t (*CommUpdateFunc) (TesterCommT *pState);
//! disconnection function
int32_t (*CommDisconnectFunc)(TesterCommT *pState);
void *pData; //!< interface-specific data
} TesterCommInterfaceT;
// module state
struct TesterCommT
{
// function calls and interface specific stuff
TesterCommInterfaceT *pInterface; //!< interface-specific functions
// communication stuff
uint32_t uLastConnectTime; //!< the last time a connect was attempted
uint32_t uLastSendTime; //!< last time an output message was sent
TesterCommMsgCbT *MessageMap[TESTER_MSGTYPE_MAX]; //!< message map array
void *pMessageMapUserData[TESTER_MSGTYPE_MAX]; //!< user-supplied data to call back with
uint8_t uSuspended; //!< 1=suspended, 0=awake
uint8_t bGotInput; //!< TRUE=got input from the other side, else FALSE
uint8_t uPad[2]; //!< pad data
char strCommand[TESTERCOMM_COMMANDSIZE_MAX]; //!< temporary command processing buffer
char strResponse[TESTERCOMM_COMMANDSIZE_MAX]; //!< temporary response processing buffer (XENON only)
TesterCommDataT LineData; //!< temporary line data buffer
TesterCommDataT Message; //!< temporary message buffer
// data lists
ZListT *pInputData; //!< input commands
ZListT *pOutputData; //!< output commands
};
/*** Variables ********************************************************************/
/*** Functions ********************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
// create a tester host client communication module
TesterCommT *TesterCommCreate(void);
// connect the host client communication module
int32_t TesterCommConnect(TesterCommT *pState, const char *pParams, uint32_t bIsHost);
// give the host/client interface some processing time (call this once in a while)
int32_t TesterCommUpdate(TesterCommT *pState);
// send a message to the other side
int32_t TesterCommMessage(TesterCommT *pState, int32_t iMsgType, const char *pMsgText);
// register a callback with a particular message type
int32_t TesterCommRegister(TesterCommT *pState, int32_t iMsgType, TesterCommMsgCbT *pCallback, void *pParam);
// get module status
int32_t TesterCommStatus(TesterCommT *pState, int32_t iSelect, int32_t iValue);
// suspend the comm module, active until a wake call is issued
void TesterCommSuspend(TesterCommT *pState);
// wake the comm module from a suspend
void TesterCommWake(TesterCommT *pState);
// disconnect the host client communication module
int32_t TesterCommDisconnect(TesterCommT *pState);
// destroy a tester host client communication module
void TesterCommDestroy(TesterCommT *pState);
// testercomm_file method to attach to host
void TesterCommAttachFile(TesterCommT *pState);
// testercomm_socket method to attach to host
void TesterCommAttachSocket(TesterCommT *pState);
#ifdef __cplusplus
};
#endif
#endif // _testercomm_h