示例#1
0
文件: dot11atx.c 项目: PaulJing/Sora
void Dot11ATxApp(const Config& config)
{
    SampleBufferSize = _M(2);
    SampleBuffer = SoraUAllocBuffer(SampleBufferSize);
	printf("tx buffer: %08x\n", SampleBuffer);
	printf("tx buffer size: %08x\n", SampleBufferSize);
	if (SampleBuffer == NULL) return;

	PreparePacket(config, (PVOID)SampleBuffer, (ULONG)SampleBufferSize);

    HRESULT hr;
	do
	{
		//Generate Signal
		hr = BB11ATxFrameMod(&TxVector, &Packet);
		printf("GenSignal return %08x\n", hr);
		printf("Signal bytes = %d\n", Packet.Reserved3);

        /*{
            PCOMPLEX8 pSampleBuffer = (PCOMPLEX8)SampleBuffer;
            for (i = 0; i < Packet.Reserved3; i++)
                printf("(%5d, %5d)\t", pSampleBuffer[i].re, pSampleBuffer[i].im);
            printf("\n");
        }*/

		hr = SoraURadioTransferEx(TARGET_RADIO, SampleBuffer, Packet.Reserved3, &TxID);
		printf("transfer, hr=%08x, id=%d\n", hr, TxID);
        FAILED_BREAK(hr);

        Monitor monitor;
        TxContext ctx(config, monitor);
        HANDLE hTxThread = AllocStartThread(DoDot11ATx, &ctx);

		if (SUCCEEDED(hr) && hTxThread)
		{
            printf("\n\nPress any key to exit the program\n");			
            time_t start = time(NULL);
	        while(!_kbhit())
            {
                if (config.Interval() != 0 && difftime(time(NULL), start) >= config.Interval()) break;
	        }

            StopFreeThread(hTxThread);
			hr = SoraURadioTxFree(TARGET_RADIO, TxID);
			printf("tx free return %08x\n", hr);
		}
	} while (FALSE);

	SoraUReleaseBuffer((PVOID)SampleBuffer);
	printf("unmap tx buffer ret: %08x\n", hr);

	printf("Tx out.\n");
}
示例#2
0
void Dot11BTxApp(const Config& config)
{
	HRESULT hr;

	if (Dot11BTxInit() < 0)
		return;

	Dot11BPreparePacket(config, (PVOID)SampleBuffer, (ULONG)SampleBufferSize);

	do
	{
		// Generate Signal
		hr = BB11BPMDPacketGenSignal(&Packet, &TxVector, (PUCHAR)TempBuffer, TempBufferSize);
		printf("[dot11b:tx] GenSignal return %08x\n", hr);
        printf("[dot11b:tx] Signal bytes=%d\n", Packet.Reserved3);

		hr = SoraURadioTransferEx(TARGET_RADIO, SampleBuffer, Packet.Reserved3, &TxID);
		printf("[dot11b:tx] transfer, hr=%08x, id=%d\n", hr, TxID);
        FAILED_BREAK(hr);

        Monitor monitor;
        TxContext ctx(config, monitor);
        HANDLE hTxThread = AllocStartThread(DoDot11BTx, &ctx);

		if (SUCCEEDED(hr))
		{
            printf("\n\nPress any key to exit the program\n");
            time_t start = time(NULL);
	        while(!_kbhit())
            {
                if (config.Interval() != 0 && difftime(time(NULL), start) >= config.Interval()) break;
	        }

            StopFreeThread(hTxThread);

			hr = SoraURadioTxFree(TARGET_RADIO, TxID);
			printf("[dot11b:tx] tx free return %08x\n", hr);
		}
	} while(false);

	Dot11BTxClean();

	printf("[dot11b:tx] Tx out.\n");
}
示例#3
0
int Test11A_FB_Demod()
{
	printf ( "Demodulate 11a with Fine Brick!\n" );

	// test usin/ucos

//	int bCnt = LoadSoraDumpFile ( "c:\\11b-1M-1.dmp", (COMPLEX16*)InputBuf, IN_BUF_SIZE );
//	int bCnt = LoadSoraDumpFile ( "d:\\noise.dmp", (COMPLEX16*)InputBuf, IN_BUF_SIZE );
//	int bCnt = LoadSoraDumpFile ( "d:\\test-real.dmp", (COMPLEX16*)InputBuf, IN_BUF_SIZE );
//	int bCnt = LoadSoraDumpFile ( "d:\\test-ideal.dmp", (COMPLEX16*)InputBuf, IN_BUF_SIZE );
	bCnt = LoadSoraDumpFile ( "c:\\a48-40.dmp", (COMPLEX16*)InputBuf, IN_BUF_SIZE );



	printf ( "Load sample %d\n", bCnt );


	BB11aDemodCtx.Init ( (COMPLEX16*)InputBuf, (bCnt)*sizeof(COMPLEX16), OutputBuf, OUT_BUF_SIZE);
	
	CreateDemodGraph11a (ssrc, svit);
	fRunning = true;
	ULONGLONG tts1 = SoraGetCPUTimestamp ( &tsinfo );	
	
	thread2 = AllocStartThread ( ViterbiThread, NULL );
	thread1 = AllocStartThread ( RxThread, NULL );

	while ( fRunning ) {
		Sleep (1);
	}

	StopFreeThread (thread1 );
	StopFreeThread (thread2 );
	
//	printf("Signal data rate:	 %dk\n",BB11bDemodCtx.CF_11bRxVector::data_rate_kbps() ); 
//	printf("Bytes decoded: %d\n",   	BB11bDemodCtx.CF_11bRxVector::frame_length() );
    printf("Time cost average:   %.3fus \n", SoraTimeElapsed (tts2-tts1, &tsinfo) * 1.0 / 1000 / (TEST_NUM-1));
	printf ( "Total symbol %d!\n", BB11aDemodCtx.CF_11aRxVector::total_symbols() );


/*
	if ( pArgs->pcOutFileName != NULL ) {
		FILE* pOut = NULL;
#pragma warning (push)
#pragma warning (disable:4996)
		pOut = fopen(pArgs->pcOutFileName, "w+b");
#pragma warning (pop)
		if (!pOut)
		{
			printf("Cannot create output file.\n");
			return -1;
		}

		fwrite(	OutputBuf, 
				fb11bDemodCtx.CF_MPDU_Info::frame_len(), 
				1, pOut);
		fclose(pOut);
	}
*/

	IReferenceCounting::Release (ssrc);

	return 0;
}