1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

روش طراحی یک نرم افزار تلفن گویا ( منشی تلفن ) با KDTele

شروع موضوع توسط hector2141 ‏11/9/12 در انجمن Delphi

  1. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    نکته : این آموزش کامل نیست و در طی گذر زمان تکمیل خواهد شد . حتما" نواقصی در این آموزش هست که ممنون میشم اطلاع بدید . با این آموزش فقط سعی دارم مشکل خیلی از دوستان رو حل کنم . بروز رسانی این آموزش ممکن کمی طول بکشه اونم به خاطر مشغله کاری بنده است پس لطفا" کمی صبر پیشه کنید . این آموزش رو هم روی ویندوز 7 و هم xp تست کردم و از کارش مطمئن هستم . سعی کنید در خوندن مطالب کمی دقت کنید . سعی می کنم شیوا و بلیغ بنویسم .

    خیلی از دوستان هستند که می خوان نرم افزارهای تلفن گویا بسازند و تا بخشهایی هم پیش رفتند اما در مواردی به مشکلاتی خوردند که کار رو رها کردند . می خوام در این بخش آموزش ساخت یه تلفن گویا رو قرار بدم تا همه از ازش استفاده کنند . من برای این آموزش از Delphi 7 ، KDTele 3.6.71 و مودم Intel 3Chip یا Zoltrix 3 chip یا Alfex $chip استفاده کردم این آموزش با هر سه این مودم ها سازگاره . کمی تفاوت هست که اون ها رو هم توضیح می دم . برای شروع به چند تا ابزار نیاز داریم و کمی توضیحات
    1-مطمئن بشید که درایور مودمی که روی سیستم نصب دارید به روز باشه برای بروز رسانی کافیه به سایت سازنده مودم برید و درایور جدید رو دانلود کنید و نصب کنید .

    2-به برنامه Hyper Terminal نیاز هست . اگه از Windows xp استفاده می کنید می تونید از مسیر زیر به Hyper Terminal دسترسی داشته باشید
    Hyper Terminal : Start > All Programs > Accessories > Comunication > Hyper Terminal


    برای اجرای Hyper Terminal یک راه دیگه هم هست . از مسیر زیر هم می تونید Hyper Terminal رو باز کنید
    Hyper Terminal : Start > Run > hypertrm


    اگه از ویندوزی غیر از xp استفاده می کنید این فایل رو دانلود کنید و فقط برنامه رو اجرا کنید
    Hyper Terminal


    نکته : این مطلب رو توجه داشته باشید برای اجرای صحیح Hyper Terminal روی ویندوز 7 و ویستا روی فایل اجرایی راست کلیک کنید و Run as Administrator رو بزنید .

    3-به کامپوننت KDTele هم نیاز دارید . چون توی سایت فعالیت warez ممنوع هست برای همین به این ایمیل درخواست بزنید تا براتون ارسال کنم .

    4-دلفی 7 هم حتما" نصب دارید دیگه و اونو نیازی نیست براتون بذارم .

    5-برای نصب KDTele هم که باید به منوی Component برید . در تصویر زیر این منو نمایش داده شده . بعد از باز کردن منوی Component گزینه Install Packages رو انتخاب کنید . تا پنجره تصویر باز بشه .

    [​IMG]

    7-با زدن Install Component این پنجره باز میشه

    [​IMG]

    8-گزینه Add رو بزنید تا این پنجره باز بشه بعد از باز شدن این پنجره به مسیری برید که KDTele رو اونجا قرار دادید . مثلا" D:\KDTele\lib\Delphi7
    [​IMG]

    9-بعد از این کار فایل KDTeleDelphi7.bpl رو انتخاب کنید و open رو بزنید . به همین راحتی KDTele رو نصب کردید .

    10-دلفی رو ببندید . چون الان باهاش کاری نداریم . می خوایم یکی از مشکلات رو بررسی و حل کنیم . اون مشکل هم چیزی جز Caller ID نیست . برای بررسی و حل این مشکل فارغ از منطقه مخابراتی باید بررسی کنیم که مودم Caller ID رو پشتیبانی می کنه یا نه . برای این که اینو بفهمیم اول Hyper Terminal رو به یکی از روش هایی که گفتم باز کنید .

    [​IMG]



    11-اگه دقت کنید من برای باز کردن Hyper Terminal روی برنامه راست کلیک کردم و Run as Administrator رو زدم . بعد از باز شدن برنامه این پنجره میاد

    [​IMG]

    12-وقتی این پنجره اومد گزینه No رو بزنید تا پنجره بعدی باز بشه .
    [​IMG]

    13-وقتی این پنجره باز شد گزینه Cancel رو بزنید تا بتونید کار کنید .

    a.نکته : الان هر چی شما اینجا تایپ کنید رو نمی بینید . پس به دقت به دستوراتی که در ادامه آوردم دقت کنید . برای بررسی Caller ID از AT Command استفاده می کنیم . این دستورات رو همونطور که نوشتم تو Hyper Terminal تایپ کنید تا پیغام OK بگیرید . اگه بعد از تایپ و زدن Enter براتون Error اومد یعنی مودم شما این دستور رو پشتیبانی نمی کنه البته نگران نباشید اکثر مودم ها این دستورات رو پشتیبانی می کنند .

    14-خب اولین دستور برای آماده سازی مودم هست به ترتیب دستورات زیر را تایپ کنید بعد از تایپ هر دستور Enter رو بزنید تا تایید بشه . دقت کنید که حتما ok بگیرید .
    AT

    AT&F&C1&D2

    AT+FCLASS=?

    AT+GCI=B4

    AT+VCID=1


    می خوام این دستورات رو توضیح بدم که چی هستند و چه می کنند . اگه برای همه این ها OK گرفتید مطمدن باشید مودمتون Caller ID رو پشتیبانی می کنه

    AT : این اولین دستور هست که مودم رو برای دریافت دستورات AT آماده می کنه . اگه بعد از وارد کردن این دستور OK دریافت کردید یعنی مودم شما از AT Command پشتیبانی می کنه .

    AT&F&C1&D2 : این گزینه این امکان رو به شما می ده که تمام اتفاقات توی مودم رو بتونید ببینید حتی کلماتی رو که تایپ می کنید رو هم می تونید با این دستور ببینید .

    AT+FCLASS=? : این دستور وضعیت و امکانات واقعی مودم رو براتون بر می گردونه . اگه توی اعدادی که برگشت داده عدد 8 وجود داشته باشه یعنی مودم شما هم از Caller ID و هم از Voice پشتیبانی می کنه .

    AT+GCI=B4 : این دستور وضعیت جغرافیایی و منطقه ای مودم را فعال می کنه . این گزینه برای فعال سازی Caller ID الزامی هست .

    AT+VCID=1 : این گزینه هم Caller ID رو فعال می کنه . اگه به جای 1 عدد 0 رو بزنید Caller ID غیر فعال میشه و اگه عدد 2 رو بزنید بصورت فرا منطقه ای تنظیم میشه .

    نکته : برای اینکه وضعیت هر کدوم از این دستورات رو ببینید کافیه به جای اون عدد یه علامت ؟ بذارید تا وضعیت رو براتون برگردونه . بعد از اینکه مطمئن شدید که همه دستورات رو ok داده سیم تلفن رو به مودم وصل کنید و با اون شماره ارتباط برقرار کنید اگه همه چی رو درست انجام داده باشید باید یه همچین پیغامی رو روی Hyper Terminal دریافت کنید :
    Ring



    Date=0201

    Time=1520

    NMBR=09123456789



    Ring


    Ring : بهتون می گه که خط داره زنگ می خورم .

    Date : تاریخ تماس رو بر می گردونه .

    Time : زمان تماس رو برمی گردونه .

    NMBR : هم که شماره تماس گیرنده رو بر میگردونه .


    خب کارمون با Hyper Terminal تموم شد . می تونید اونو ببندید . در بخش بعدی ساختن یه تلفن گویا یا همون منشی تلفنی رو شروع می کنیم .
     
  2. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : روش طراحی یک نرم افزار تلفن گویا ( منشی تلفن ) با KDTele

    [FONT=&quot]در بخش اول امکانات مودم رو بررسی کردیم و با چند تا دستور [/FONT]AT[FONT=&quot] تونستیم بفهمیم که آیا مودم ما [/FONT]Caller ID[FONT=&quot] و [/FONT]Voice[FONT=&quot] داره یا نه . در این بخش می خوام شروع به ساخت برنامه بکنم . توجه داشته باشید که من از روش تجربی و تحقیقی خودم برای ایجاد این برنامه استفاده می کنم . البته سعی می کنم عمومیت بیشتری بهش بدم . اما شما می تونید این کدها رو هر جور که صلاح می دونید استفاده کنید . ممنون میشم اگه اشکالات روبهم گوشزد کنید تا این آموزش بهتر و بهتر بشه .[/FONT]​
    [FONT=&quot]ایجاد برنامه :[/FONT]​
    1-[FONT=&quot]دلفی رو باز کنید و یه پروژه جدید ایجاد کنید .[/FONT]​
    2-[FONT=&quot]مانند شکل زیر به [/FONT]KDTele Tab[FONT=&quot] برید و [/FONT]KDSerialPort[FONT=&quot] رو انتخاب کنید و روی فرمتون قرار بدید .[/FONT]
    [​IMG]

    [​IMG]
    3-[FONT=&quot]در مرحله بعد نیاز داریم که [/FONT]KDSerialPort[FONT=&quot] رو تنظیم کنیم . برای این کار [/FONT]KDSerialPort[FONT=&quot]ی که روی فرم گذاشتید انتخاب کنید و به پنجره [/FONT]object inpector[FONT=&quot] برید . در لیست [/FONT]Property[FONT=&quot] های [/FONT]KDSerialPortProperty[FONT=&quot]ی به نام [/FONT]ManualSettings[FONT=&quot] هست . بازش کنید و در قسمت [/FONT]Port[FONT=&quot] عدد 3 رو وارد کنید .[/FONT]​
    [FONT=&quot]نکته : این عدد 3 چی هست ؟ هر مودمی که روی سیستم نصب میشه یک [/FONT]Port[FONT=&quot] رو برای خودش اشغال می کنه . در حالت عادی مودم [/FONT]Port 3[FONT=&quot] یا [/FONT]Com 3[FONT=&quot] رو برای خودش اشغال می کنه که پیش فرض اکثر مودمها هم هست . به همین دلیل من خواستم عدد 3 رو وارد کنید . اما از کجا بفهمیم [/FONT]Port[FONT=&quot] مودم ما چی هست . برای اینکار به مسیر زیر برید :[/FONT]​
    Control Panel > Phone And Modem Option > Modems Tab > ​
    [FONT=&quot]در این پنجره نام مودم های نصب شده بر روی سیستم لیست شده و در مقابلش هم لیست [/FONT]port[FONT=&quot]هایی که مودم اشغال کرده هم لیست شده . از اینجا می تونید بفهمید که مودم روی کدام [/FONT]Port[FONT=&quot] نصب هست . تصاویر زیر مطالب بالا رونشان می دهند .[/FONT]​
    [​IMG]
    [​IMG]
    [​IMG]
    4-[FONT=&quot]خب [/FONT]Port[FONT=&quot] که تنظیم شد . نیاز به نوشتن مقداری کد داریم . از این به بعد تصور من اینه که شما می دونید [/FONT]Property[FONT=&quot] و [/FONT]Event[FONT=&quot] چی هستند و در دلفی کجا قرار دارند . با این تصور من فقط توضیح متنی میذارم .[/FONT] [FONT=&quot] خب اول [/FONT]KDSerialPort[FONT=&quot] رو انتخاب کنید . به [/FONT]object inspector[FONT=&quot] برید و [/FONT]Events[FONT=&quot] رو انتخاب کنید . [/FONT]onPortState[FONT=&quot] رو از بخش [/FONT]Events[FONT=&quot] دوبار کلیک کنید تا محیط کد نویسی دلفی باز بشه . این [/FONT]Event[FONT=&quot] این امکان رو به شما میده که وضعیت[/FONT] port[FONT=&quot] ی که روش کار می کنید رو براتون مانیتور کنه . حالا این دستور رو براش بنویسید :[/FONT]​
    procedure TForm1.KDSerialPort1PortState(Sender: TObject[FONT=&quot];[/FONT]
    PortState: TPortState; Param1: Integer);
    begin
    case PortState of
    psOpened : ShowMessage[FONT=&quot]('پورت باز شد');[/FONT]
    psClosed : ShowMessage[FONT=&quot]('پورت بسته شد');[/FONT]
    psError : ShowMessage[FONT=&quot]('خطا در فعاليت پورت');[/FONT]
    end[FONT=&quot];[/FONT]
    end[FONT=&quot];[/FONT]

    [FONT=&quot]این قطعه کد وضعیت [/FONT]Port[FONT=&quot] رو براتون بر می گردونه من از [/FONT]MessageBox[FONT=&quot] استفاده کردم . شما از هر چی که دوست دارید می تونید استفاده کنید .[/FONT]​
    5-[FONT=&quot]روی فرمتون کلیک کنید . به [/FONT]object inspector[FONT=&quot] برید و از [/FONT]Events[FONT=&quot] های فرمتون [/FONT]OnShow [FONT=&quot] رو انتخاب کنید و دوبار کلیک کنید تا محیط دلفی باز بشه . این کد رو در این بخش بنویسید :[/FONT]​
    procedure TForm1.FormShow(Sender: TObject);
    var
    pORes : Integer;
    begin
    if KDSerialPort1.IsOpened then
    begin
    KDSerialPort1.Close;
    end
    else if not KDSerialPort1.IsOpened then
    begin
    pORes := KDSerialPort1.Open(0);
    if pORes = 0 then
    begin
    KDSerialPort1.SendString('AT' + #13);
    KDSerialPort1.SendString('AT&F*C1&D2' + #13);
    KDSerialPort1.SendString('AT+GCI=B4' + #13);
    KDSerialPort1.SendString('AT+VCID=1' + #13);
    end;
    end;
    end;
    [FONT=&quot]نکته :[/FONT]​
    1-[FONT=&quot]اگر کمی دقت کنید می بینید که این کدها همان دستورات [/FONT]AT[FONT=&quot] هستند که در بخش قبل در [/FONT]Hyper Terminal[FONT=&quot] نوشتیم و اجرا کردیم . پس اگر مودم شما این دستورات را پشتیبانی می کنه این ها رو اینجا بنویسید .[/FONT]​
    2-[FONT=&quot]در این کد من اول بررسی کردم که [/FONT]Port[FONT=&quot] باز هست یا نه . دلیلش هم اینه که ممکنه مودم توسط برنامه دیگه ای در حال اجرا باشه . در اینصورت [/FONT]Port[FONT=&quot] در حالت [/FONT]Busy[FONT=&quot] هست . برای همین اول بررسی می کنم که باز هست یا نه و اگه باز بود با دستور [/FONT]KDSerialPort1.Close;[FONT=&quot] پورت رو می بندم .[/FONT]​
    3-[FONT=&quot]در بخش بعدی بررسی می کنم اگه پورت باز نبود . ابتدا پورت رو با دستور [/FONT]KDSerialPort.Open(0);[FONT=&quot] باز می کنم . و بعد دستورات [/FONT]AT[FONT=&quot] رو توسط [/FONT]KDSerialPort.SendString();[FONT=&quot] به مودم ارسال می کنم تا مودم رو برای فعالیت آماده کنم . [/FONT]​
    [FONT=&quot]نکته : اگر دقت کنید میبینید که قبل از [/FONT]KDSerialPort.Open(0);[FONT=&quot] یک متغیر عددی آوردم . این دستور در صورت موفقیت یا عدم موفقیت یک عدد رو بر می گردونه که با اون عدد میشه در مورد خطاها تصمیم گیری کرد . لیست خطا های مربوط به [/FONT]KDTele[FONT=&quot] رو در پایان این آموزش براتون میارم.[/FONT]​
    i.[FONT=&quot]در آخر اگر مقدار [/FONT]pORes = 0[FONT=&quot] بود دستورات [/FONT]AT[FONT=&quot] رو به مودم ارسال می کنم تا مودم به محض برقراری تماس ورودی بتونه شماره تماس گیرنده رو شناسائی کنه .[/FONT]​
    6-[FONT=&quot]ما دستورات مورد نیاز رو به مودم ارسال کردیم . اما در برنامه چه جوری بفهمیم که مودم در حال زنگ خوردن هست و چه اتفاقی برای مودم داره میفته . برای اینکار ابتدا باید [/FONT]KDSerialPort[FONT=&quot]ی که روی فرم گذاشتید رو انتخاب کنید و به [/FONT] object inspector[FONT=&quot] برید و [/FONT]Events[FONT=&quot] رو انتخاب کنید . در بخش [/FONT]Events[FONT=&quot] یک [/FONT]Event[FONT=&quot] به نام [/FONT]onReciveData[FONT=&quot] وجود داره که اطلاعات روی پورت یا مودم رو براتون می خونه .اما چه جوری باید این اطلاعات رو ببینیم . اول از همه یک [/FONT]Memo[FONT=&quot] از [/FONT]Standard Tab[FONT=&quot] روی فرمتون بذارید . سپس روی [/FONT]onReciveData[FONT=&quot] مربوط به [/FONT]KDSerialPort[FONT=&quot] 2 بار کلیک کنید تا محیط کد نویسی دلفی باز بشه . حالا این کد رو در این بخش بنویسید :[/FONT]​
    procedure TForm1.KDSerialPort1ReceiveData(Sender: TObject;
    DataPtr: Pointer; DataSize: Integer; var DisplayHandle: HWND;
    var IsDisplayUNICODE: Boolean);
    begin
    DisplayHandle := Memo1.Handle;
    KDSerialPort1.BufferIn.FindString(0, '', False);
    end;
    [FONT=&quot]نکته : حتما در بخش [/FONT]Property[FONT=&quot] مربوط به [/FONT]KDSerialPort[FONT=&quot] در [/FONT]object inspector[FONT=&quot] در گزینه [/FONT]Bufferln[FONT=&quot] گزینه [/FONT]Enabled = True[FONT=&quot] باشه . اما در مورد این کد : [/FONT]​
    1-[FONT=&quot]در این [/FONT]Event [FONT=&quot] 2 تا متغیر داریم به نام های [/FONT]DisplayHandle[FONT=&quot] و [/FONT]IsDiplayUNICODE[FONT=&quot] که یکی از نوع [/FONT]HWND[FONT=&quot] هست و یکی از نوع [/FONT]Boolean[FONT=&quot] . [/FONT]​
    DisplayHandle[FONT=&quot] : این امکان رو به شما میده تا اتفاقات روی پورت و یا مودم در یک [/FONT]Memo [FONT=&quot] یا [/FONT]ListBox[FONT=&quot] نمایش بدید و از اتفاقات مطلع بشید . [/FONT]​
    IsDisplayUNICODE[FONT=&quot] : این متغیر برای زمانی هست که روی پورت و یا مودم اطلاعات غیر از کاراکترهای [/FONT]English[FONT=&quot] روی مودم ارسال باشه . با [/FONT]True[FONT=&quot] یا [/FONT]False[FONT=&quot] کردن این گزینه این امکان رو می تونید کنترل کنید . [/FONT]​
    2-DisplayHandle[FONT=&quot] که مشخص هست من به [/FONT]Memo[FONT=&quot] نسبت دادم . اما خط دوم این [/FONT]Event[FONT=&quot] اطلاعات مورد نیاز از روی پورت یا مودم رو می خونه . عدد 0 به نشانه اینه که از [/FONT]Index 0[FONT=&quot] رشته هایی که برگشته اند شروع به خوندن کن . [/FONT]‘’[FONT=&quot] در این بخش شما هر کاراکتری رو می تونید قرار بدید کثلا" اگر دنبال کلماتی که با [/FONT]N[FONT=&quot] شروع می شوند می گردید . اونجا باید [/FONT]‘N’[FONT=&quot] رو وارد کنید . اما گزینه آخر این گزینه برای اینه که مشخص کنید که حساس به کلمات باشه یا نه . یعنی [/FONT]Case Sensetive[FONT=&quot] باشه یا نه من اینجا [/FONT]False[FONT=&quot] گذاشتم تا حساسیتی به بزرگی و کوچکی کلمات نشان نده و همه رو برام لیست کنه . خب از اینجا به بعد می خوام شماره سریال رو پیدا کنم و تو یک [/FONT]MessageBox[FONT=&quot] نمایش بدم . در ادامه همون کد قبلی این کد رو هم اضافه کنید . [/FONT]​
    [FONT=&quot]نکته : این روش اختصاصیه منه . شما از هر روش دیگه که دوست دارید می تونید استفاده کنید .[/FONT]
     
  3. کاربر ارشد

    تاریخ عضویت:
    ‏6/9/12
    ارسال ها:
    14,323
    تشکر شده:
    2,698
    امتیاز دستاورد:
    0
    حرفه:
    daneshjo
    پاسخ : روش طراحی یک نرم افزار تلفن گویا ( منشی تلفن ) با KDTele

    [FONT=&quot]در 2 بخش قبلی یه سری مطالب در مورد مودم و کار با پورت رو براتون نوشتم . اینجا می خوام اون مطالب رو ادامه بدم . به انتهای بخش قبل برگردیم :[/FONT]​
    procedure TForm1.KDSerialPort1ReceiveData(Sender: TObject;
    DataPtr: Pointer; DataSize: Integer; var DisplayHandle: HWND;
    var IsDisplayUNICODE: Boolean);
    var
    TTelNumber : String;
    begin
    DisplayHandle := Memo1.Handle;
    KDSerialPort1.BufferIn.FindString(0, '', False);
    end;
    [FONT=&quot]اینجا ما تونستیم اطلاعات رو نشون بدیم . حالا من از روش اختصاصی خودم برای نمایش Caller ID[FONT=&quot] استفاده می کنم . بعد از کد [/FONT]KDSerialPort1.BufferIn.FindString(0, '', False);[FONT=&quot] این دستور یا هر دستوری که احساس می کنید درست هست رو قرار بدید :[/FONT][/FONT]​
    if Memo1.Lines.Count = 13 then
    begin
    KDSerialPort1.Close;
    //[FONT=&quot]این بخش توضیح دارد[/FONT]
    TTelNumber := Memo1.Lines.ValueFromIndex[12];
    Delete(TTelNumber, 0, 7);
    ShowMessage(TTelNumber);
    end;
    [FONT=&quot]فکر می کنم درک کد ساده باشه !؟ اینجا گفتم اگه تعداد خط های موجود در Memo1[FONT=&quot] به 13 رسید . پورت رو ببند . اینکار باعث میشه که پورت دیگه فعال نباشه .[/FONT][/FONT]​
    [FONT=&quot]نکته ( مهم )[FONT=&quot] : از همون [/FONT]KDTele Tools Tab[FONT=&quot] یک [/FONT]KDPhone[FONT=&quot] روی فرم قرار بدید تا بتونید بعدا" ازش استفاده کنید .[/FONT][/FONT]​
    [FONT=&quot]یک [FONT=&quot]متغیر رشته ای دارم که باید خط مورد نظر رو در اون قرار بدم . حالا از کجا بفهمم این خط کجاست و چیه ! ؟[/FONT][/FONT]​
    [FONT=&quot]وقتی که دستورات AT[FONT=&quot] رو به سمت مودم ارسال می کنید و اونو آماده می کنید بعد از اعلان[/FONT] Ring[FONT=&quot] در [/FONT]Hyper Terminal[FONT=&quot] زمان و تاریخ تماس و یه گزینه دیگه که [/FONT]NMBR = XXXXXXX[FONT=&quot] هست رو نشون می ده . من تصور کردم که این گزینه در خط [/FONT]12[FONT=&quot] هست ممکنه در کد نویسی شما در خط دیگه ای باشه که می تونید اینو به راحتی پیدا کنید . در بخش بعد با دستور [/FONT]DELETE[FONT=&quot] مقداری که نیاز نبود رو حذف کردم و در پایان هم توسط [/FONT]ShowMessage[FONT=&quot] اونو نمایش دادم . براتون یک نمونه از کدی که از اول تا الان در موردش صحبت شده رو می ذارم تا بهتر درک کنید . [/FONT][/FONT]​
    [FONT=&quot]توضیح : سعی میکنم از این به بعد سریعتر این مطالب رو در اختیارتون بذارم تا استفاده کنید .[/FONT]
     
  4. عضو جدید

    تاریخ عضویت:
    ‏6/2/14
    ارسال ها:
    1
    تشکر شده:
    0
    امتیاز دستاورد:
    0
    پاسخ : روش طراحی یک نرم افزار تلفن گویا ( منشی تلفن ) با KDTele

    سلام .من از دستورات زیربرای گرفتن caller-id استفاده کردم . اما متاسفانه فقط زنگ خوردن را تشخیص می دهد(ok RING RING RING)

    AT+FCLASS عدد 8 را شامل نمیشه که البته فکر کنم برای پشتیبانی از voice باید 8 باشه و فقط برای گرفتن caller-id نیازی به آن نیست چون فقط یک بار بصورت اتفاقی caller-id را نمایش داد.

    البته روی مودمی که voice پشتیبانی میکنه هم امتحان کردم اما جواب نگرفتم.برنامه C# است

    serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);

    string port = cbPort.SelectedItem.ToString();

    serialPort1.PortName = port;

    serialPort1.RtsEnable = true;

    serialPort1.BaudRate = 9600;

    serialPort1.DataBits = 8;

    serialPort1.RtsEnable = true;

    serialPort1.Open();

    serialPort1.WriteLine("AT" + System.Environment.NewLine);

    serialPort1.WriteLine("ATZ" + System.Environment.NewLine);

    serialPort1.WriteLine("AT&F&C1&D2" + System.Environment.NewLine);

    serialPort1.WriteLine("AT+FCLASS=?" + "ModemClass" + System.Environment.NewLine);

    serialPort1.WriteLine("AT+GCI=B4" + System.Environment.NewLine);

    serialPort1.WriteLine("AT+VCID=1" + ",EnableModem" + System.Environment.NewLine);


    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
    textBox1.Text += serialPort1.ReadExisting();


    }