Esempio n. 1
0
void InitSoraTx(BlinkParams *params)
{
	writeSoraCtx *ctx = (writeSoraCtx *)inmem_malloc(sizeof(writeSoraCtx));
	params->TXBuffer = (PVOID)ctx;

	ctx->prepareBuf = 0;
	ctx->transferBuf = 0;

	ctx->firstTx = 0;
	ctx->lastTx = 0;

	ctx->idleTXDetected = 0;
	ctx->TXBufferSize = params->radioParams.TXBufferSize;

	printf("TX-sora-tx-buffer-size=%ld, cmd-fifo-queue-size=%d, no-tx-bufs=%d\n", 
		ctx->TXBufferSize, cmd_fifo_queue_size, no_tx_bufs);
	for (int i = 0; i < no_tx_bufs; i++)
	{
		ctx->TXBuffers[i] = SoraUAllocBuffer(ctx->TXBufferSize * sizeof(complex16));		// alloc tx sample buffers
		if (ctx->TXBuffers[i] == NULL)
		{
			fprintf(stderr, "Error: Fail to allocate Sora Tx buffer memory!\n");
			exit(1);
		}

		// Set to 0 as it is not expensive in init and can be useful for gaps between packets
		memset(ctx->TXBuffers[i], 0, params->radioParams.TXBufferSize * sizeof(complex16));
	}

}
Esempio n. 2
0
void InitSoraTx(BlinkParams *params)
{
	params->TXBuffer = SoraUAllocBuffer(params->radioParams.TXBufferSize);					// alloc tx sample buffer
	if (params->TXBuffer == NULL) 
	{
		fprintf (stderr, "Error: Fail to allocate Sora Tx buffer memory!\n" );
		exit(1);
	}
	// Set to 0 as it is not expensive in init and can be useful for gaps between packets
	memset(params->TXBuffer, 0, params->radioParams.TXBufferSize);
}
Esempio n. 3
0
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");
}
Esempio n. 4
0
static int Dot11BTxInit()
{
    SampleBufferSize = _M(2);
    SampleBuffer = SoraUAllocBuffer(SampleBufferSize);
	printf("[dot11b:tx] tx buffer: %08x\n", SampleBuffer);
	printf("[dot11b:tx] tx buffer size: %08x\n", SampleBufferSize);
	if (SampleBuffer == NULL) return -1;

	HRESULT hr;
	if (SampleBufferSize < BB11B_MAX_SYMBOL_LENGTH)
	{
		printf("[dot11b:tx] Buffer size not enough.\n");
		return -1;
	}
	
	return 0;
}
Esempio n. 5
0
int __cdecl main(int argc, const char *argv[])
{
    HRESULT hr;

	if ( ParseCmdLine (argc, argv) == false )
	{
		usage();
		return 0;
	}

	// init DebugPlot library
	DebugPlotInit();

    // init sora timestamp library
	InitializeTimestampInfo ( &tsinfo, false );

    do {
    	// begin receive or transmit packets
    	if (!SoraUInitUserExtension("\\\\.\\HWTest")) {
    		printf ( "Error: fail to find the hwtest driver!\n" );
    		break;
    	}

        // start UMX
        // Map Rx Sample Buffer
        hr = SoraURadioMapRxSampleBuf(TARGET_RADIO, &RxBuffer, &RxBufferSize);
        if (FAILED(hr)) {
            printf ( "Fail to map rx buffer!\n" );
       		break;
        }   
    
        // Alloc Tx Sample Buffer
        SampleBuffer = SoraUAllocBuffer(SampleSize);
        if (!SampleBuffer) {
            printf ( "Fail to allocate Tx buffer!\n" );
            break;
        }   
    
        hr = SoraURadioAllocRxStream(&RxStream, TARGET_RADIO, (PUCHAR)RxBuffer, RxBufferSize);
        if (FAILED(hr)) {
            printf ( "Fail to allocate a RX stream!\n" );
            break;
        }

        printf ( "Configure radio...\n" );
        
        // configure radio parameters properly
        ConfigureRadio ();

		if ( sine.Create ( SampleBuffer, SampleSize ) ) {
			printf ("Sine source starts...\n" );
			sine.Start ();
		}
      
        // enter the message loop
        process_kb (); 
        
    }    while (false);

    
    sine.Stop ();
        
    SoraURadioReleaseRxStream(&RxStream, TARGET_RADIO);
    
    if (SampleBuffer) {
        SoraUReleaseBuffer(SampleBuffer);
        SampleBuffer = NULL;
    }
    
    if (RxBuffer) {
        hr = SoraURadioUnmapRxSampleBuf(TARGET_RADIO, RxBuffer);
    }
    
	SoraUCleanUserExtension();
	DebugPlotDeinit();

    return 0;
}