2013-09-07 00:55:42 +02:00
// Copyright (c) 2013- PPSSPP Project.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 2.0 or later versions.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official git repository and contact information can be found at
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
# pragma once
2020-08-18 02:01:30 +07:00
# include <deque>
2019-12-24 00:04:03 +07:00
# include "Core/HLE/proAdhoc.h"
2019-12-25 22:30:39 +07:00
# ifdef _MSC_VER
# pragma pack(push,1)
# endif
2019-11-13 12:56:29 +07:00
typedef struct MatchingArgs {
2022-01-05 12:13:11 +07:00
u32_le data [ 6 ] ; // ContextID, EventID, bufAddr[ to MAC], OptLen, OptAddr[, EntryPoint]
2019-12-25 22:30:39 +07:00
} PACK MatchingArgs ;
2021-09-29 06:19:26 +07:00
typedef struct SceNetAdhocDiscoverParam {
u32_le unknown1 ; // SleepMode? (ie. 0 on on Legend Of The Dragon, 1 on Dissidia 012)
char groupName [ ADHOCCTL_GROUPNAME_LEN ] ;
u32_le unknown2 ; // size of something? (ie. 0x3c on Legend Of The Dragon, 0x14 on Dissidia 012) // Note: the param size is 0x14 may be it can contains extra data too?
u32_le result ; // inited to 0?
} PACK SceNetAdhocDiscoverParam ;
2019-12-25 22:30:39 +07:00
# ifdef _MSC_VER
# pragma pack(pop)
# endif
2019-11-13 12:56:29 +07:00
2020-08-26 17:17:31 +07:00
struct AdhocctlRequest {
u8 opcode ;
SceNetAdhocctlGroupName group ;
} ;
2020-08-18 02:01:30 +07:00
struct AdhocSendTarget {
u32 ip ;
u16 port ; // original port
2022-03-15 05:06:15 +07:00
u16 portOffset ; // port offset specific for this target IP
2020-08-18 02:01:30 +07:00
} ;
struct AdhocSendTargets {
int length ;
std : : deque < AdhocSendTarget > peers ;
bool isBroadcast ;
} ;
struct AdhocSocketRequest {
int type ;
int id ; // PDP/PTP socket id
void * buffer ;
s32_le * length ;
u32 timeout ;
u64 startTime ;
2020-08-26 17:17:31 +07:00
SceNetEtherAddr * remoteMAC ;
2020-08-18 02:01:30 +07:00
u16_le * remotePort ;
} ;
enum AdhocSocketRequestType : int
{
PTP_CONNECT = 0 ,
PTP_ACCEPT = 1 ,
PTP_SEND = 2 ,
PTP_RECV = 3 ,
2020-09-08 19:16:44 +07:00
PTP_FLUSH = 4 ,
PDP_SEND = 5 ,
PDP_RECV = 6 ,
ADHOC_POLL_SOCKET = 7 ,
2020-08-18 02:01:30 +07:00
} ;
2021-09-29 06:19:26 +07:00
enum AdhocDiscoverStatus : int
{
NET_ADHOC_DISCOVER_STATUS_NONE = 0 ,
NET_ADHOC_DISCOVER_STATUS_IN_PROGRESS = 1 ,
NET_ADHOC_DISCOVER_STATUS_COMPLETED = 2 ,
} ;
enum AdhocDiscoverResult : int
{
NET_ADHOC_DISCOVER_RESULT_NO_PEER_FOUND = 0 , // Initial value
NET_ADHOC_DISCOVER_RESULT_CANCELED = 1 , // CANCELED or STOPPED?
NET_ADHOC_DISCOVER_RESULT_PEER_FOUND = 2 ,
NET_ADHOC_DISCOVER_RESULT_ABORTED = 3 , // Internal Error occured?
} ;
2014-03-15 11:32:57 -07:00
class PointerWrap ;
2013-09-07 00:55:42 +02:00
void Register_sceNetAdhoc ( ) ;
2019-12-24 00:04:03 +07:00
u32_le __CreateHLELoop ( u32_le * loopAddr , const char * sceFuncName , const char * hleFuncName , const char * tagName = NULL ) ;
2013-09-07 00:55:42 +02:00
void __NetAdhocInit ( ) ;
void __NetAdhocShutdown ( ) ;
void __NetAdhocDoState ( PointerWrap & p ) ;
2015-01-04 14:07:44 +01:00
void __UpdateAdhocctlHandlers ( u32 flags , u32 error ) ;
2019-11-13 12:56:29 +07:00
void __UpdateMatchingHandler ( MatchingArgs params ) ;
2013-10-26 23:08:21 +01:00
// I have to call this from netdialog
2020-08-18 00:39:46 +07:00
int sceNetAdhocctlGetState ( u32 ptrToStatus ) ;
2013-10-26 23:08:21 +01:00
int sceNetAdhocctlCreate ( const char * groupName ) ;
2020-08-18 00:39:46 +07:00
int sceNetAdhocctlConnect ( const char * groupName ) ;
int sceNetAdhocctlJoin ( u32 scanInfoAddr ) ;
int sceNetAdhocctlScan ( ) ;
int sceNetAdhocctlGetScanInfo ( u32 sizeAddr , u32 bufAddr ) ;
int NetAdhocMatching_Term ( ) ;
int NetAdhocctl_Term ( ) ;
int NetAdhocctl_GetState ( ) ;
int NetAdhocctl_Create ( const char * groupName ) ;
int NetAdhoc_Term ( ) ;
2014-06-24 23:43:03 +07:00
// May need to use these from sceNet.cpp
extern bool netAdhocInited ;
extern bool netAdhocctlInited ;
2020-07-12 08:04:55 +07:00
extern bool networkInited ;
2020-10-23 00:58:56 +07:00
extern bool netAdhocGameModeEntered ;
2020-10-29 05:48:55 +07:00
extern int netAdhocEnterGameModeTimeout ;
2020-10-09 23:37:35 +07:00
extern int adhocDefaultTimeout ; //3000000 usec
extern int adhocDefaultDelay ; //10000
extern int adhocExtraDelay ; //20000
extern int adhocEventPollDelay ; //100000; // Seems to be the same with PSP_ADHOCCTL_RECV_TIMEOUT
extern int adhocMatchingEventDelay ; //30000
extern int adhocEventDelay ; //1000000
2019-12-24 00:04:03 +07:00
extern std : : recursive_mutex adhocEvtMtx ;
extern int IsAdhocctlInCB ;
2020-08-02 08:49:58 +07:00
extern u32 dummyThreadHackAddr ;
extern u32_le dummyThreadCode [ 3 ] ;
extern u32 matchingThreadHackAddr ;
extern u32_le matchingThreadCode [ 3 ] ;