示例#1
0
 unsafe internal int StreamCallback(libhackrf.hackrf_transfer *transfer)
 {
     if (disposed || transfer == null)
     {
         return(0);
     }
     if (device.mode == NetHackrf.transceiver_mode_t.RX)
     {
         buffer_semaphore.WaitOne();
         for (int i = 0; i < transfer->valid_length; i++)
         {
             stream_buffer[write_pos] = transfer->buffer[i];
             write_pos++;
             if (write_pos >= stream_buffer.Length)
             {
                 write_pos = 0;
             }
             if (write_pos == read_pos)
             {
                 SetOverrunError();
             }
         }
         buffer_semaphore.Release();
         set_event();
     }
     else if (device.mode == NetHackrf.transceiver_mode_t.TX)
     {
         buffer_semaphore.WaitOne();
         for (int i = 0; i < transfer->valid_length; i++)
         {
             //transfer->buffer[i] = stream_buffer[read_pos];
             transfer->buffer[i] = stream_buffer[read_pos];
             read_pos++;
             if (read_pos >= stream_buffer.Length)
             {
                 read_pos = 0;
             }
             if (read_pos == write_pos)
             {
                 SetOverrunError();
                 break;
             }
         }
         buffer_semaphore.Release();
         set_event();
     }
     return(0);
 }
示例#2
0
 unsafe internal int StreamCallback(libhackrf.hackrf_transfer *transfer) // hackrf.dll calls this method to exchange data with device
 {
     if (disposed || transfer == null)                                   // this method should be immedeately ended if stream is closed
     {
         return(0);
     }
     if (device.mode == NetHackrf.transceiver_mode_t.RX)
     {
         buffer_semaphore.WaitOne();
         for (int i = 0; i < transfer->valid_length; i++)
         {
             stream_buffer[write_pos] = transfer->buffer[i];
             write_pos++;
             if (write_pos >= stream_buffer.Length)
             {
                 write_pos = 0;
             }
             if (write_pos == read_pos)
             {
                 SetOverrunError();
             }
         }
         buffer_semaphore.Release();
         set_event();
     }
     else if (device.mode == NetHackrf.transceiver_mode_t.TX)
     {
         buffer_semaphore.WaitOne();
         for (int i = 0; i < transfer->valid_length; i++)
         {
             transfer->buffer[i] = stream_buffer[read_pos];
             read_pos++;
             if (read_pos >= stream_buffer.Length)
             {
                 read_pos = 0;
             }
             if (read_pos == write_pos)
             {
                 SetOverrunError();
                 break;
             }
         }
         buffer_semaphore.Release();
         set_event();
     }
     return(0);
 }