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)); } }
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); }
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"); }
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; }
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; }