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; } }
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; } } }
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 { } }
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]; } }
private void handleTxIQPacket(receivedPacket packet, int adc) { // Console.Out.WriteLine("txiq"); }
private void handleTxSpecificPacket(receivedPacket packet) { // Console.Out.WriteLine("txsp"); }
private void handleRXAudioPacket(receivedPacket packet) { // Console.Out.WriteLine("rxap"); }