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;
                }
            }
        }
Example #2
0
        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;
        }