Пример #1
0
int adhocSync(void)
{
	int size = 0;
	int retry = 60;

	if (Server)
	{
		while (retry--)
		{
			adhocSend(adhoc_work, 1, ADHOC_DATATYPE_SYNC);

			if (adhocRecv(adhoc_work, 1000000, ADHOC_DATATYPE_SYNC) == 1)
				goto check_packet;
		}
	}
	else
	{
		while (retry--)
		{
			if (adhocRecv(adhoc_work, 1000000, ADHOC_DATATYPE_SYNC) == 1)
			{
				adhocSend(adhoc_work, 1, ADHOC_DATATYPE_SYNC);
				goto check_packet;
			}
		}
	}

	return -1;

check_packet:
	while (1)
	{
		pdpStatStruct pdpStat;

		size = sizeof(pdpStat);

		if (sceNetAdhocGetPdpStat(&size, &pdpStat) >= 0)
		{
			// 余分なパケットを破棄
			if (pdpStat.rcvdData == ADHOC_DATASIZE_SYNC)
				adhocRecv(adhoc_work, 0, ADHOC_DATATYPE_SYNC);
			else
				break;
		}

		if (Loop != LOOP_EXEC) return 0;

		sceKernelDelayThread(100);
	}

	return 0;
}
Пример #2
0
int adhocRecv(void *buffer, unsigned int *length)
{
	int err=0;
	int pdpStatLength=20;
	unsigned int pdpRecvLength=0;
	int port=0;
	char mac[20];
	pdpStatStruct pspStat;

	err = sceNetAdhocGetPdpStat(&pdpStatLength, &pspStat);
	if(err<0)
	{
		pspDebugScreenInit();
		printf("error calling GetPdpStat, err=%x\n", err);
		return err;
	}

	if (pspStat.rcvdData > 0)
	{		
		pdpRecvLength = pspStat.rcvdData;
		err = sceNetAdhocPdpRecv(pdpId,
					mac,
					&port,
					buffer,
					&length,
					0,	// 0 in lumines
					1);	// 1 in lumines
		if(err<0)
		{
			pspDebugScreenInit();
			printf("err=%x\n", err);
			return err;
		}
		else	
		{
			return 1;
		}
	}

	return 0;
}
Пример #3
0
void adhocWait(int data_size)
{
	pdpStatStruct pdpStat;
	int size = sizeof(pdpStat);

	if (data_size > ADHOC_BUFFER_SIZE)
		data_size = ADHOC_BUFFER_SIZE;

	while (1)
	{
		if (sceNetAdhocGetPdpStat(&size, &pdpStat) >= 0)
		{
			if (pdpStat.rcvdData == 0 || (int)pdpStat.rcvdData == data_size)
				break;
			else
				adhocRecv(adhoc_work, 0, ADHOC_DATATYPE_ANY);
		}

		if (Loop != LOOP_EXEC) break;

		sceKernelDelayThread(100);
	}
}