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"); }
void RadioStop(BlinkParams *params) { if (params->TXBuffer != NULL) { SoraUReleaseBuffer((PVOID)params->TXBuffer); } if (params->pRxBuf != NULL) { HRESULT hr; SoraURadioReleaseRxStream(¶ms->radioParams.dev->RxStream, params->radioParams.radioId); hr = SoraURadioUnmapRxSampleBuf(params->radioParams.radioId, params->pRxBuf); } SoraUCleanUserExtension(); }
void RadioStop(BlinkParams *params) { writeSoraCtx *ctx = (writeSoraCtx *)params->TXBuffer; for (int i = 0; i < no_tx_bufs; i++) { if (ctx->TXBuffers[i] != NULL) { SoraUReleaseBuffer((PVOID)params->TXBuffer); } } free(ctx); if (params->pRxBuf != NULL) { HRESULT hr; SoraURadioReleaseRxStream(¶ms->radioParams.dev->RxStream, params->radioParams.radioId); hr = SoraURadioUnmapRxSampleBuf(params->radioParams.radioId, params->pRxBuf); } }
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; }
static void Dot11BTxClean() { SoraUReleaseBuffer((PVOID)SampleBuffer); }