PDA

View Full Version : دریافت تماس تلفنی



shahpari
سه شنبه 28 اسفند 1386, 17:26 عصر
سلام و عیدتون مبارک

حدود 3 ماه پیش یه برنامه در مورد یه موسسه فرهنگی نوشتم
که این موسسه قراره با آموزشگاههای مختلف تماس تلفنی داشته باشه
البته تا قسمت برقراری تماس پیش رفتم و مشکلی هم نبود
ولی خوب باید توی برنامه این امکان باشه که اگر طرف مقابل هم تماس گرفت بتونه
اون رو دریافت کنه و چون به نتیجه نرسید همون برقراری تماس رو هم از روی برنامه
برداشتم

حالا فکر کردم فرصت خوبیه که مشکلم رو حل کنم شاید تو برنامه ها دیگه به دردم بخوره

البته اگه دوستان لطف کنن

search هم کردم ولی این تاپیک به نتیجه ای نرسیده

http://barnamenevis.org/forum/showthread.php?t=42402

لطفا اگه اطلاعاتی دارید دریغ نفرمایید.:قلب:

فاطمه وطن دوست
چهارشنبه 29 اسفند 1386, 03:37 صبح
سلام ، با تبریک فرا رسیدن سال نو .

http://barnamenevis.org/forum/showthread.php?t=64406&highlight=%D8%A8%D8%B1%D9%82%D8%B1%D8%A7%D8%B1%DB% 8C+%D8%AA%D9%85%D8%A7%D8%B3

ali_habibi1384
چهارشنبه 29 اسفند 1386, 05:41 صبح
شما بوسیله فرمانهای AT Command خیلی راحت می تونید این کارو انجام بدید .یه نمونه توضح واستون می زارم :
در ابتدا قبل از هر چیز شما باید کار با درگاه ها را یاد بگیرید . برای کار با درگاهها ابتدا باید آن درگاه را باز کنید و سپس با استفاده از یک تایمر مرتبا به آن درگاه مراجعه کرده و اطلاعات وارد شده به آن درگاه را بخوانید .وقتی درگاه باز شد اطلاعات روی بافر قرار می گیرد و کافیست ما به درگاه مراجعه کرده و اطلاعات ورودی به درگاه را بخوانیم . برای باز کردن یک درگاه خاص از دستور port.open=true استفاده می کنیم . وقتی یک در گاه باز باشد برنامه دیگری نمی تواند درگاه را باز کند و با خطا مواجه می شوید . بنابراین شما فقط یکبار در گاه را باز کرده و به تعداد زیاد داده ها را از درگاه می خوانید .برای باز کردن درگاه باید شماره پورت را بدانید . و آن شماره پورتی را که می خواهید با آن کار کنید نام ببرید . برای باز کردن درگاه مودم از کامپوننت mscomm استفاده کنید .با استفاده از properties تنظیمات اولیه کامپوننت را انجام دهید :


Setting=9600,n,8,1


Outputbuffersize=512


Comport=3

در این تنظیمات بیت ریت را تنظیم کردیم و شماره پورت درگاه را 3 انتخاب کردیم .
دستور زیر را ببینید :
x = MSComm1.Input
If x <> "" Then List1.AddItem (x)
این دستور را در تایمری بنویسید با این دستور شما در یک لیست می توانید کلیه اطلاعات ورودی به مودم خود را ببینید در خط اول داده های داخل پورت به متغیر x منتقل می شود . وقتی مقداری از پورت خوانده شود بافر پورت خالی می شود .
در خط بعدی اگر مقدار داده داخل پورت خالی نباشد به لیست اضافه می گردد. به این صورت شما می توانید داده های داخل پورت را بخوانید و نیز داده ها و دستوراتی که درون پورت اجرا می شود را ببینید .
اولین گام برای کار با درگاه مودم شناسایی پورت مورد استفاده مودم است .

ali_habibi1384
چهارشنبه 29 اسفند 1386, 05:57 صبح
بعد از تنظیمات اولیه و دانستن شماره درگاه مودم باید به کار با دستورات مودم Commandبپردازیم .
مودمها چهار قبلیت دارند که برای کار ما فقط سه قابلیت کافیست :
مود صفر یا مود فاکس
مود یک یا مود دیتا
مود هشت یا مود ویس
روشی که در این برنامه برای دریافت شماره تماس و کلیه کارها مودم انجام گرفته توسط دستور AT Command استاندارد استفاده شده است .
هر مودم دستورات AT مربوط به خود را دارد و نیز از یکسری قابلیتهای مخصوص به خودش بهره می برد بعنوان مثال قابلیت ویس و یا فکس و از انواع آنها نوع V90 و V92 را می توان نام برد . مودمی که در این برنامه استفاده شده است مودم intel v92 voice modem است .
در کلیه دستورات ما از علامت "؟" برای چک کردن قابلیتهای اجرای یک دستور استفاده می کنیم . برای نمونه ما برای اینکه به مود Voice وارد شویم باید بدانیم که مودم ما آن مود را پشتیبانی می کند یا نه برای این منظور دستور AT+FCLASS=? را اجرا می کنیم ؛ اگر خروجی بصورت 0,1,8 بود برنامه ما هر سه قابلیت فاکس، دیتا و ویس را خوهد داشت و برای رفتن به مود Voice از فرمان AT+FCLASS=8استفاده می کنیم .
در این برنامه علاوه بر مودم سخت افزاری اینتل از یک مدار واسط برای ارسال صدا روی خط تلفن نیاز بود که مکمل مدار مودم ما بود زیرا صدای خروجی از کارت صوت مستقیما به مودم نمی رفت .
مزیت این کار استفاده راحت از برنامه در حالت پخش صوت بود . زیرا در هنگام پخش صوت بصورت معمول ما مجبور بودیم اطلاعات را بیت به بیت به مودم ارسال کنیم و به این صورت علاوه بر نویزی که روی صدا ایجاد میشد ما باید از مود ویس خارج می شدیم و در اینجا اگر DTMF به برنامه وارد می شد برنامه آنرا بعنوان یک بیت از داده های صوتی تلقی می نمود و DTMF فرستاده شده از دست می رفت
برنامه علاوه بر این دستگاه برای تبادل داده های صوتی (به همان دلیلی که قبلا بحث شد ) نیاز به یکسری تنظیمات دیگر نیز دارد که آن نیز ارتباط ورودی کارت صوت به خروجی مودم است که به این صورت داده های خارج شده از مودم به کارت صوت وارد شده و صدای طرف دیگر شنیده می شود و صدای ما نیز توسط مدار مکمل رابطی که گفته شد تامین می شود ؛ بدین صورت ما داده های صوتی خود را پشتیبانی می کنیم
برای تلفظ شماره ها و صوت از چند ماژول استفاده شده است این ماژولها حاوی دستوراتی هستند که بترتیب فایلهای صوتی مورد نیاز را اجرا کرده و اهداف ما را تامین می کنند .
فایلهای صوتی در پوشه های مخصوص به خود هستند که قبلا تهیه شده است و ما بدون توجه به حجم آنها می توانیم فایلهای جدیدی را جایگزین فایلهای قدیمی صوتی بکنیم . باید در نظر داشت که ما باید این فایلها را بصورت پیش فرض در کنار فایلهای دیگر داشته باشیم زیرا ما فقط مسیر آنها را در پایگاه داده خود داریم .
اکنون به مثالهایی عملی در زبان برنامه نویسی VB6 توجه کنید
برای اینکه ما مودم را در یک مود نگه داریم از دستور FCLASS+8 به همراه شماره مود استفاده می کنیم . همانطور که قبلا گفته شد برای اینکه بدانیم یک مودم کدام مودها را پشتیبانی می کند از دستور AT+FCLASS=? استفاده می کنیم . اگر خروجی 0,1,8آمد یعنی هر سه مود را پشتیبانی می کند
برای کار با هر مود یکسری دستورات مخصوص به آن مود مورد نیاز می باشد که هر مود دستورات خاص خود را دارد :[/
برای نمونه فرض کنید کاربر می خواهد بداند که تلفن کی زنگ می خورد . وقتی زنگ خورد شماره تماس را نمایش دهد و سپس گوشی را بر دارد

ali_habibi1384
چهارشنبه 29 اسفند 1386, 06:18 صبح
تمام این قابلیتها در مود ویس امکان پذیر است پس به ترتیب زیر عمل می کنیم :
1- باز کردن پورت: Mscomm1.portopen=True
2- رفتن به مود ویس : Mscomm1.output="AT+FCLASS=8"+Chr(13)
به این نکتع توجه کنید که برای اجرای دستورات باید حتما کاراکتر اینتر را بعد از ارسال دستور به پورت بفرستید
3- کنترل درگاه و خواندن از آن
4- اگر خط تلفن ما دیجیتالی باشد قبل از آمدن Ringشماره تماس به درگاه ارسال می گردد و شما بعد از تشخیص دادن خوردن زنگ باید گوشی تلفن را بر دارید
Mscomm1.output="AT+VLS=1" + Chr(13)
هم اکنون با انجام دستورات بالا به یک مکالمه پاسخ دادیم

shahpari
چهارشنبه 29 اسفند 1386, 10:52 صبح
شما گفتید من باید از Mscomm استفاده کنم

من اصلا نمیدونم تفاوت TAPI با mscomm تو چیه؟؟

ولی قسمت برقراری تماس رو اگه اشتباه نکنم با TApi نوشتم با این کدها


Private Declare Function tapiRequestMakeCall Lib "TAPI32.DLL" (ByVal Dest As String, ByVal AppName As String, ByVal CalledParty As String, ByVal Comment As String) As Long


Private Sub PhoneCall(sNumber As String, sName As String)
Dim lRetVal As Long
lRetVal = tapiRequestMakeCall(Trim$(sNumber), App.Title, Trim$(sName), "")
If lRetVal <> 0 Then
End If
End Sub


Private Sub tell_Click()
Call PhoneCall(Text3.Text + Text6.Text, Text2.Text)
End Sub

ali_habibi1384
شنبه 03 فروردین 1387, 00:42 صبح
وقتی Ctrt+T رو توی vb می زنین لیستی از کامپوننتهای اضافی برای شما نمایان خواهد شد. منظورم اونجاست . وقتی اونو تیک زدید بیاریدش رو صفحه بزارید و بقیه اش هم که هست.

shahpari
یک شنبه 04 فروردین 1387, 10:49 صبح
تشکر من با کد هایی که شما لطف کردید و برام نوشتید تا یه جاهایی از برنامه رو رفتم

و یه نمونه برنامه هم پیدا کردم که خیلی کمک کرد

ولی آقای حبیبی منظورم این بود که چطوری از tapi استفاده کنم

چون توی یکی از تاپیک ها بحث سر این موضوع بود که این کنترل با هر مودمی سازگار نیست

شما هم این مسئله رو تایید می کنید؟؟؟؟؟؟؟؟؟؟؟؟؟

ali_habibi1384
شنبه 10 فروردین 1387, 13:28 عصر
دقیقا همینطوره .
همونطور که هر مودم نیاز به درایور خاص خودش رو داره هر مودم هم نیاز به کار با دستورات خودش رو داره . شما می تونید با جستجوی command های اون مارک از مودمتون دستورات خاص خودش رو دانلود کرده و اونها رو بکار بگیرید .
امیدوارم توضیحاتم کامل و گویای پاسخ شما بوده بشه. موفق باشید

shahpari
یک شنبه 11 فروردین 1387, 15:33 عصر
دقیقا همینطوره .
همونطور که هر مودم نیاز به درایور خاص خودش رو داره هر مودم هم نیاز به کار با دستورات خودش رو داره . شما می تونید با جستجوی command های اون مارک از مودمتون دستورات خاص خودش رو دانلود کرده و اونها رو بکار بگیرید .
امیدوارم توضیحاتم کامل و گویای پاسخ شما بوده بشه. موفق باشید


راستش متوجه نشدم :گیج:
چطوری باید جستجو کنم که چه مودمی چه دستوری رو قبول میکنه؟؟؟

البته شرمنده ها:خجالت:

ali_habibi1384
یک شنبه 11 فروردین 1387, 20:09 عصر
برید توی سایت Google و مثلا برای مودم اینتل مدل v92 بزنید : AT Command Modem v92
متوجه شدید؟

shahpari
یک شنبه 11 فروردین 1387, 23:06 عصر
برید توی سایت Google و مثلا برای مودم اینتل مدل v92 بزنید : AT Command Modem v92
متوجه شدید؟

با تشکر
از روشی که فرمودید سرچ کردم برای مثال این سایت یه سری مطالب هست که فکر
میکنم کدهای مربوط به مودمی که در موردش جستجو کردم(v90)
http://www.restartoffice.com/init.htm#version

ولی من اصلا متوجه نمیشم که کدوم یکی از این کلیدها قراره چه کاری انجام بدن ؛
چه برسه به این که بخوام باهاش برنامه هم بنویسم.

اگه فکر میکنید راه یا کامپوننت ساده تر هم هست که با بیشتر مودم ها سازگاره لطفا
راهنمایی کنید
ممنون

hamed_arfaee
سه شنبه 13 فروردین 1387, 19:00 عصر
با سلام
من چند تا مقاله در مورد TAPI و کار با فرامین AT و کلا مودم پیدا کردم
بهتره یک نگاهی بهشون بندازین :

ali_habibi1384
چهارشنبه 14 فروردین 1387, 10:26 صبح
شما باید اونا رو ترجمه کنید تا ازشون سر در بیارید!

shahpari
چهارشنبه 14 فروردین 1387, 10:57 صبح
شما باید اونا رو ترجمه کنید تا ازشون سر در بیارید!

تشکر
ببخشید یعنی هر بار که من بخوام یه همچین برنامهای بنویسم باید حتما نوع مودم رو از قبل بدونم

اومدیم و این برنامه قرار بود به چند جای مختلف داده بشه من که نمی تونم براشون محدودیت بزارم که حتما باید از فلان مودم استفاده کنید؛ یا اینکه بخوام برای هر کدوم کدها رو تغییر بدم

راه دیگه ای نیست؟

shahpari
چهارشنبه 14 فروردین 1387, 11:01 صبح
با سلام
من چند تا مقاله در مورد TAPI و کار با فرامین AT و کلا مودم پیدا کردم
بهتره یک نگاهی بهشون بندازین :

از مقاله هاتون ممنون خیلی مفید بود
البته در موارد دیگه مشکلاتم رو کمتر کرد ولی متاسفانه راجع به انواع مودم ها بحثی نشده

بازم ممنون

emperor_vb6
جمعه 15 آذر 1387, 12:26 عصر
ممنون از توضیحات کاملتون ولی اگه یه نمونه برنامه هم اینجا قرار می دادید خیلی عالی میشد .