Пример #1
0
        public void handleGeneralPacket(receivedPacket packet)
        {
            //     Console.Out.WriteLine("gp");
            byte[] received = packet.received;
            if (packet.endPoint.Address.Equals(udpBroadcast))
            {
            }
            //old style discovery
            else if (received[4] == 2)
            {
                //discovery
                byte[] response = new byte[60];
                response[0] = 0x0;
                response[1] = 0x0;
                response[2] = 0x0;
                response[3] = 0x0;
                response[4] = 0x02;
                //add mac address - kiss does not like blank one
                response[5]  = 0x00;
                response[6]  = 0x00;
                response[7]  = 0x00;
                response[8]  = 0x00;
                response[9]  = 0x00;
                response[10] = 0x01;

                response[11] = 0x01; //board type
                response[12] = 23;   //code version

                response[20] = 7;
                response[21] = 1;

                status = "Discovered";
                seqNo  = 1;
                generalClient.Client.Send(response, response.Length, packet.endPoint);
                packetsSent++;

                ClientIpEndPoint = packet.endPoint;

                Console.WriteLine("disc");
            }
            else if (received[4] == 0)
            {
                RxSpecificPort = (received[5] << 8) + received[6];
                TxSpecificPort = (received[7] << 8) + received[8];

                HighPriorityFromPCPort = (received[9] << 8) + received[10];
                //   if (highPriorityToPC == null) highPriorityToPC = new UdpClient(HighPriorityToPCPort);

                Rx0Port = (received[17] << 8) + received[18];

                //   usePhaseWord = (received[37] & 8) != 0;

                usePhaseWord     = true;
                ClientIpEndPoint = packet.endPoint;
            }
        }
Пример #2
0
        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;
                }
            }
        }
Пример #3
0
        public void handlePacket(receivedPacket packet)
        {
            byte[] received = packet.received;
            if (received[2] == 2)
            {
                //discovery
                byte[] response = new byte[60];
                response[0] = 0xef;
                response[1] = 0xfe;
                response[2] = 0x02;
                //add mac address - kiss does not like blank one
                response[3] = 0x00;
                response[4] = 0x00;
                response[5] = 0x00;
                response[6] = 0x00;
                response[7] = 0x00;
                response[8] = 0x01;

                response[9]  = hermesCodeVersion; //code version
                response[10] = boardID;           //board type
                status       = "Discovered";
                seqNo        = 1;
                seqNoBs      = 1;
                client.Send(response, response.Length, packet.endPoint);
                packetsSent++;
            }
            else if (received[2] == 4)
            {
                if (received[3] > 0)
                {
                    ClientIpEndPoint = packet.endPoint;

                    int channels = receivers.Count();
                    int stride   = channels * 6 + 2;
                    int nSamples = (512 - 8) / stride;

                    resetTransmission();
                    running = true;
                    if ((received[3] & 0x02) != 0)
                    {
                        bsrunning = true;
                    }
                    else
                    {
                        bsrunning = false;
                    }
                    status = "Running";
                    //             Console.WriteLine("Start "+packet.timeStamp.TotalMilliseconds);
                }
                else
                {
                    running   = false;
                    bsrunning = false;
                    status    = "Off";
                }
            }
            else if (received[2] == 1 && received[3] == 2)
            {
                uint seq = ((uint)received[4] << 24) | ((uint)received[5] << 16) | ((uint)received[6] << 8) | ((uint)received[7]);
                if (seq != txseqNo + 1)
                {
                    seqErrors++;
                }

                txseqNo = seq;
                //standard data packet
                //      Console.WriteLine(packet.timeStamp.TotalMilliseconds);

                handleCommandControl(received[11], received[12], received[13], received[14], received[15]);
                handleCommandControl(received[512 + 11], received[512 + 12], received[512 + 13], received[512 + 14], received[512 + 15]);

                handleTXIQandAudio(received, 16, 63);
                handleTXIQandAudio(received, 512 + 16, 63);
            }
            else if (received[2] == 3)
            {
                if (received[3] == 1)//program
                {
                    byte[] response = new byte[60];
                    response[0] = 0xef;
                    response[1] = 0xfe;
                    response[2] = 0x04;
                    response[3] = 0x00;
                    response[4] = 0x00;
                    response[5] = 0x00;
                    response[6] = 0x00;
                    response[7] = 0x00;
                    response[8] = 0x01;

                    status = "program " + progSeqNo++;
                    Thread.Sleep(50);
                    client.Send(response, response.Length, packet.endPoint);
                    packetsSent++;
                }
                else if (received[3] == 2)//erase
                {
                    byte[] response = new byte[60];
                    response[0] = 0xef;
                    response[1] = 0xfe;
                    response[2] = 0x03;
                    response[3] = 0x00;
                    response[4] = 0x00;
                    response[5] = 0x00;
                    response[6] = 0x00;
                    response[7] = 0x00;
                    response[8] = 0x01;
                    progSeqNo   = 0;
                    status      = "erase";
                    Thread.Sleep(1000);

                    client.Send(response, response.Length, packet.endPoint);
                    packetsSent++;
                }
            }
            else
            {
            }
        }
Пример #4
0
        private void handleHighPriorityPacket(receivedPacket packet)
        {
            //         Console.Out.WriteLine("hpp");

            byte[] received = packet.received;
            bool   run      = ((received[4] & 0x01) != 0);

            if (run != running)
            {
                if (run)
                {
                    resetTransmission();
                    running = true;
                    status  = "Running";
                }
                else
                {
                    running = false;
                    status  = "Off";
                }
            }
            bool ptt0 = ((received[4] & 0x02) != 0);

            if (ptt0)
            {
                //   Console.Out.WriteLine("ptt");
            }
            int rxi = 9;

            for (int i = 0; i < maxReceivers; i++)
            {
                if (receiversByIdx[i] != null)
                {
                    if (usePhaseWord)
                    {
                        //phase_word[31:0] = 2^32 * frequency(Hz)/DSP clock frequency (Hz)

                        int phaseword = (((int)received[rxi]) << 24) + (((int)received[rxi + 1]) << 16) + (((int)received[rxi + 2]) << 8) + (int)received[rxi + 3];

                        receiversByIdx[i].vfo = (int)(phaseword * clk / 4294967296.0);
                    }
                    else
                    {
                        receiversByIdx[i].vfo = (((int)received[rxi]) << 24) + (((int)received[rxi + 1]) << 16) + (((int)received[rxi + 2]) << 8) + (int)received[rxi + 3];
                    }

                    receiversByIdx[i].generators[0].SetDefaults(receiversByIdx[i].vfo);
                    receiversByIdx[i].generators[1].SetDefaults(receiversByIdx[i].vfo + 10000);
                }
                rxi += 4;
            }
            int txi = 329;

            if (usePhaseWord)
            {
                int phaseword = (((int)received[txi]) << 24) + (((int)received[txi + 1]) << 16) + (((int)received[txi + 2]) << 8) + (int)received[txi + 3];
                txNCO = (int)(phaseword * clk / 4294967296.0);
            }
            else
            {
                txNCO = (((int)received[txi]) << 24) + (((int)received[txi + 1]) << 16) + (((int)received[txi + 2]) << 8) + (int)received[txi + 3];
            }
        }
Пример #5
0
 private void handleTxIQPacket(receivedPacket packet, int adc)
 {
     //             Console.Out.WriteLine("txiq");
 }
Пример #6
0
 private void handleTxSpecificPacket(receivedPacket packet)
 {
     //              Console.Out.WriteLine("txsp");
 }
Пример #7
0
 private void handleRXAudioPacket(receivedPacket packet)
 {
     //            Console.Out.WriteLine("rxap");
 }