Example #1
0
        public void UpdateRadio(DBRadio radio)
        {
            string       sql = "INSERT INTO radio(id, name, lastseen, lastrssi, samples, totalrssi, minrssi, minrssitime, maxrssi, maxrssitime) VALUES (@id, @name, @lastseen, @lastrssi, @samples, @totalrssi, @minrssi, @minrssitime, @maxrssi, @maxrssitime) ON DUPLICATE KEY UPDATE id=@id, name=@name, lastseen=@lastseen, samples=@samples, totalrssi=@totalrssi, minrssi=@minrssi, minrssitime=@minrssitime, maxrssi=@maxrssi, maxrssitime=@maxrssitime;";
            MySqlCommand cmd = new MySqlCommand(sql, this.conn);

            cmd.Parameters.AddWithValue("@id", radio.RadioId);
            cmd.Parameters.AddWithValue("@name", radio.Name);
            cmd.Parameters.AddWithValue("@lastseen", radio.LastSeen);
            cmd.Parameters.AddWithValue("@lastrssi", radio.LastRSSI);
            cmd.Parameters.AddWithValue("@samples", radio.Samples);
            cmd.Parameters.AddWithValue("@totalrssi", radio.TotalRSSI);
            cmd.Parameters.AddWithValue("@minrssi", radio.MinRSSI);
            cmd.Parameters.AddWithValue("@minrssitime", radio.MinRSSITime);
            cmd.Parameters.AddWithValue("@maxrssi", radio.MaxRSSI);
            cmd.Parameters.AddWithValue("@maxrssitime", radio.MaxRSSITime);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
        }
Example #2
0
        static void HandleUserCall(object sender, CallEventArgs e)
        {
            RadioCall call    = e.Call;
            string    rssiStr = "";

            if (!double.IsNaN(call.RSSI))
            {
                rssiStr = " RSSI " + call.RSSI;
                DBRadio r = db.ReadRadio(call.From);
                if (r == null)
                {
                    r = new DBRadio(call.From.Int, call.RSSI);
                }
                else
                {
                    r.AddReading(call.RSSI);
                }
                db.UpdateRadio(r);
            }
            if (call.IsAudio)
            {
                Console.WriteLine("Audio Call : {0} => {1} " + rssiStr, call.From, call.To);
                AudioCall ac       = (AudioCall)call;
                string    filename = String.Format(@"E:\RadioCalls\{0} - {1} to {2}.mp3", call.Start.ToString("yyyy-MM-ddTHH-mm-ss"), call.From.Int, call.To.Int);
                try
                {
                    ac.SaveToMP3(filename);
                }
                catch (Exception)
                {
                    Console.WriteLine("Unable to decode audio!");
                }
                db.WriteVoiceCall(call.From, call.To, call.Start, call.End, call.RSSI, call.Slot, filename);
                srv.PublishVoiceCall(call);
            }
            else
            {
                DataCall dc = (DataCall)call;
                switch (dc.DataType)
                {
                case CallDataType.TMS:
                    if (dc.TextMessage.Type == MessageType.Ack)
                    {
                        Console.WriteLine("Text Message Ack : {0} => {1}" + rssiStr, call.From, call.To);
                    }
                    else if (dc.TextMessage != null)
                    {
                        Console.WriteLine("Text Message : {0} => {1} \"{2}\"" + rssiStr, call.From, call.To, dc.TextMessage.Message);
                    }
                    else
                    {
                        Console.WriteLine("Text Message : {0} => {1} unable to parse!" + rssiStr, call.From, call.To);
                    }
                    break;

                case CallDataType.LRRP:
                    LRRPPacket pkt = dc.LRRPPacket;
                    if (pkt.Type == LRRPPacketType.ImmediateLocationResponse || pkt.Type == LRRPPacketType.TriggeredLocationData)
                    {
                        Console.WriteLine("Got LRRP Packet from {0} {1} {2}", call.From, pkt, rssiStr);
                    }
                    else
                    {
                        Console.WriteLine("Got LRRP Control Message: {0} => {1}" + rssiStr, call.From, call.To);
                    }
                    break;

                case CallDataType.ICMP:
                    Console.WriteLine("Got ICMP Ping: {0} => {1}" + rssiStr, call.From, call.To);
                    break;

                case CallDataType.RadioCheck:
                    Console.WriteLine("Got Radio Check: {0} => {1}" + rssiStr, call.From, call.To);
                    break;

                case CallDataType.RadioCheckAck:
                    Console.WriteLine("Got Radio Check Ack: {0} => {1}" + rssiStr, call.From, call.To);
                    break;

                case CallDataType.UnknownSmall:
                case CallDataType.IPAck:
                    //Just ignore this
                    break;

                default:
                    Console.WriteLine("Data Call Type is {0}", dc.DataType);
                    Console.WriteLine("Got Unknown radio call: {0} => {1}" + rssiStr, call.From, call.To);
                    Console.WriteLine("    " + BitConverter.ToString(call.Data));
                    break;
                }
            }
        }