コード例 #1
0
ファイル: SendSms.cs プロジェクト: harmschnakenberg/MelBox
        /// <summary>
        /// Abarbeiten der zu sendeneden SMSen
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void SendSmsQueue(object sender, ElapsedEventArgs e)
        {
            if (currentSendSms != null)
            {
                return;                          //Wenn noch etwas in Bearbeitung ist, Abbruch; wird durch Timer erneut gestartet.
            }
            currentSendSms = SendList.Dequeue(); //Ersten aus der Schlange nehmen + andere SMS senden blockieren

            if (SendList.Count == 0)
            {
                sendTimer.Enabled = false; //Timer beenden, wenn Liste leer
            }

            Gsm.Write("AT+CMGS=\"" + currentSendSms.Item1 + "\"\r");
            Gsm.Write(currentSendSms.Item2 + ctrlz);

            Console.WriteLine("SendSmsQueue(): Versende SMS an {1}\r\n{2}", currentSendSms.Item1, currentSendSms.Item2);
        }
コード例 #2
0
 public static void Ask_SmsRead(string status = "REC UNREAD")
 {
     Gsm.Write(string.Format("AT+CMGL=\"{0}\"", status));
 }
コード例 #3
0
 public void SetPhone(string strPhone)
 {
     Phone = Gsm.StrToPhone(strPhone);
 }
コード例 #4
0
        public static void ModemSetup(string serialPort = "", int baudRate = 0)
        {
            string[] ports = System.IO.Ports.SerialPort.GetPortNames();

            if (Array.Exists(ports, p => p == serialPort))
            {
                Gsm.SerialPortName = serialPort;
            }

            if (baudRate > 0)
            {
                Gsm.SerialPortBaudRate = baudRate;
            }

            if (Connect())
            {
                //Modem Type; Gewinnt Zeit, falls Modem noch nicht bereit.
                Write("AT+CGMM");

                //extended error reports
                Write("AT+CMEE=1");

                //Textmode
                Write("AT+CMGF=1");
                Write("AT+CMGF?");
                //Write("AT+CSCS=\"UCS2\""); //böse! kein UCS2-Decoding implementiert!

                //Signalqualität
                Ask_SignalQuality();

                //Eigene Telefonnumer-Nummer der SIM-Karte auslesen
                Write("AT+CNUM");

                //Im Netzwerk Registriert?
                Ask_NetworkRegistration();

                //Modem meldet Registrierungsänderungänderung mit +CREG: <stat>
                Write("AT+CREG=1");

                //ProviderName?
                Write("AT+COPS?");

                //SMS-Service-Center Adresse
                Write("AT+CSCA?");

                //Alle Speicher nutzen
                Write("AT+CPMS=\"MT\",\"MT\",\"MT\"");

                //Sendeempfangsbestätigungen abonieren
                //Quelle: https://www.codeproject.com/questions/271002/delivery-reports-in-at-commands
                //Quelle: https://www.smssolutions.net/tutorials/gsm/sendsmsat/
                //AT+CSMP=<fo> [,  <vp> / <scts> [,  <pid> [,  <dcs> ]]]
                // <fo> First Octet:
                // <vp> Validity-Period: 0 - 143 (vp+1 x 5min), 144 - 167 (12 Hours + ((VP-143) x 30 minutes)), [...]
                Write("AT+CSMP=49,1,0,0");

                Write("AT+CNMI=2,1,2,2,1");
                //erfolgreich getestet: AT+CNMI=2,1,2,2,1

                //Statusänderung SIM-Schubfach melden
                Write("AT^SCKS=1");

                //SIM-Karte gesperrt?
                Write("AT+CPIN?");

                #region Regelmäßige Anfragen an das Modem
                askingTimer.Elapsed  += new ElapsedEventHandler(Ask_RegularQueue);
                askingTimer.AutoReset = true;
                askingTimer.Start();
                #endregion

                //Sprachanrufe:
                //Display unsolicited result codes
                Write("AT+CLIP=1");

                //Abfrage Rufweiterleitung aktiv?
                Write("AT+CCFC=0,2");

                Gsm.Ask_RelayIncomingCalls(Gsm.RelayCallsToPhone);
            }
        }