private void handleRxSpecificPacket(receivedPacket packet) { // Console.Out.WriteLine("rxsp"); int nReceivers = 0; byte[] received = packet.received; int adcs = received[4]; for (int f = 0; f < 10; f++) { int mask = 1; for (int i = 0; i < 8; i++) { int idx = f * 8 + i; if ((received[7 + f] & mask) != 0) { nReceivers++; if (receiversByIdx[idx] == null) { receiversByIdx[idx] = new receiver("RX" + idx); lock (_receiversLock) { receivers.Add(receiversByIdx[idx]); } rxClients.Add(receiversByIdx[idx], new UdpClient(Rx0Port + idx)); } } else { if (receiversByIdx[idx] != null) { lock (_receiversLock) { var rx = receiversByIdx[idx]; receivers.Remove(rx); rxClients[rx].Close(); rxClients.Remove(rx); receiversByIdx[idx] = null; } } } if (receiversByIdx[idx] != null) { int srate = (received[18 + idx * 6] << 8) + received[19 + idx * 6]; receiversByIdx[idx].bandwidth = srate * 1000; } mask <<= 1; } } }
void GenerateSignal(byte[] outputbuf, int startOffset, int stride, int nSamples, double timebase, double timestep, receiver rx) { double[] mixbuf = new double[nSamples * 2];//auto cleared to 0 // combine all signal generatiors rx.GenerateSignal(mixbuf, nSamples, timebase, timestep); //convert to formatted 24 bit int idx = 0; for (int i = 0; i < nSamples * stride; i += stride) { int iamp = (int)Math.Round(mixbuf[idx++] * 0x7fffff); if (iamp > max24int) { iamp = max24int; adc1clip = true; } else if (iamp < min24int) { iamp = min24int; adc1clip = true; } databuf[startOffset + i] = (byte)(iamp >> 16); databuf[startOffset + i + 1] = (byte)((iamp >> 8) & 0xff); databuf[startOffset + i + 2] = (byte)((iamp) & 0xff); iamp = (int)Math.Round(mixbuf[idx++] * 0x7fffff); if (iamp > max24int) { iamp = max24int; adc1clip = true; } else if (iamp < min24int) { iamp = min24int; adc1clip = true; } databuf[startOffset + i + 3] = (byte)(iamp >> 16); databuf[startOffset + i + 4] = (byte)((iamp >> 8) & 0xff); databuf[startOffset + i + 5] = (byte)(iamp & 0xff); } timebase += nSamples * timestep; }