یه کلاس ساده نوشتم برای کا با مودم باستفاده از ATCommand که این کارها رو میکنه:
1.پرت همه مودم های فعال رو بر میگردونه
2.یه شماره پرت میگیره و مدل مودم رو بر میگردونه
3.شماره گیری - توقف شماره گیری - redial
4.یه تابع که دستوارت AT رو اجرا میکنه.
اینم از این کلاس:
/*
*
* http://open-source.blogfa.com
*
*/
using System;
using System.Collections.Generic;
using System.Text;
/////
using System.IO.Ports;
using System.Threading;
using System.Collections;
namespace Tele
{
class AmirOpenSourceModemClass
{
private SerialPort serialPort = new SerialPort();
//************************************************** ******************************** لیست همه مودم ها
/// <summary>
/// Return List Of Modems With AT Command Support in ArrayList DataType
/// </summary>
/// <returns></returns>
public ArrayList List_Of_Modem_Port()
{
Array comPorts = SerialPort.GetPortNames();//Get Active Ports
ArrayList modemPorts = new ArrayList();
SerialPort sp = new SerialPort();
foreach (string portName in comPorts)
{
try
{
if (sp.IsOpen) sp.Close();
sp.PortName = portName;
sp.Open();
sp.Write("AT\r\n");
Thread.Sleep(200);
if (sp.ReadExisting().ToUpper().Contains("OK"))
modemPorts.Add(sp.PortName);
}
catch { }
}
return modemPorts;
}
//************************************************** ******************************** گرفتن نام پرت و برگرداندن مدل مودم
/// <summary>
/// Get PortName And Return Device Model
/// </summary>
/// <param name="portName"></param>
/// <returns></returns>
public string Get_ModemName_By_PortName(string portName)
{
SerialPort sp = new SerialPort();
string result = "";
sp.PortName = portName;
if (!sp.IsOpen)
sp.Open();
sp.Write("ATI4" + "\r\n");
Thread.Sleep(200);
result = sp.ReadLine();//Command
result = sp.ReadLine();//Empty Line
result = sp.ReadLine();//Model
//result = sp.ReadExisting();
sp.Close();
return result;
}
//************************************************** ******************************** گرفتن یک شماره
/// <summary>
/// Get an Number And Dial It and Return True or False
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public void Dial_A_Number(string number, string portName)
{
if (serialPort.IsOpen) serialPort.Close();
serialPort.PortName = portName;
serialPort.Open();
serialPort.Write("ATDT" + number + "\r\n");
Thread.Sleep(200);
}
//************************************************** ******************************** کنسل کردن شماره گیری
/// <summary>
/// Cancel Dialing
/// </summary>
/// <param name="portName"></param>
public void Cancel_Dial(string portName)
{
if (serialPort.PortName == portName && serialPort.IsOpen)
{
serialPort.Write("ATH" + "\r\n");
Thread.Sleep(200);
}
else
{
if (serialPort.IsOpen) serialPort.Close();
}
}
//************************************************** ******************************** گرفتن مجدد آخرین شماره
/// <summary>
/// Redial Last Number And If Redial Is Success Return True Else Return False
/// </summary>
/// <param name="portName"></param>
/// <returns></returns>
public bool Redial_Last_Number(string portName)
{
bool bl = false;
if (serialPort.PortName == portName && serialPort.IsOpen)
{
serialPort.Write("ATDL" + "\r\n");
Thread.Sleep(200);
if (serialPort.ReadExisting().ToUpper().Contains("ATD T"))
bl = true;
}
return bl;
}
//************************************************** ******************************** اجرای یک ATCommand
/// <summary>
/// Get an ATCommand And Run It and Return ATCommand Result
/// </summary>
/// <param name="atCommand"></param>
/// <param name="portName"></param>
/// <returns></returns>
public string Run_An_ATCommand(string atCommand, string portName)
{
string result = "";
if (serialPort.PortName == portName && serialPort.IsOpen)
{
serialPort.Write(atCommand + "\r\n");
Thread.Sleep(200);
}
else
{
if (serialPort.IsOpen) serialPort.Close();
serialPort.PortName = portName;
serialPort.Open();
serialPort.Write(atCommand + "\r\n");
Thread.Sleep(200);
}
result = serialPort.ReadExisting();
return result;
}
//************************************************** ********************************
}
}
اینم یه Sample