اطلاعیه

Collapse
No announcement yet.

تحلیل کد فرستاده شده از sim900

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    تحلیل کد فرستاده شده از sim900

    سلام دوستان خسته نباشد :bye

    میخوام دیتای فرستاده شده از sim900 تو میکرو تحلیلش کنم با یمشکل برخوردم

    sim900 تمام پاسخ های at هاشو بایه فرمت خاص میفرسته


    بعضی از دستورات شامل چند خط خروجی میباشه که به شکل بالا هستش چطور میشه تشخیص داد که ماژول تمام دیتا رو فرستاده

    پایه های ri ,cts ,dtr, ....

    تست کردم اصلا واکنشی نشون نمیدن؟ :cry2:

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

    با زبان c کار میکنم

    #2
    پاسخ : تحلیل کد فرستاده شده از sim900

    من یه عمره با این ماژول کار میکنم
    اما تابحال این فرمتی که شما نوشتی رو ندیدم
    مدت زمانی که صرف ایجاد تاپیک و منتظر پاسخ هستید را صرف سرچ کنید...

    دیدگاه


      #3
      پاسخ : تحلیل کد فرستاده شده از sim900

      نوشته اصلی توسط NimaAryamehr
      من یه عمره با این ماژول کار میکنم
      اما تابحال این فرمتی که شما نوشتی رو ندیدم
      دوست عزیز اینارو که از خودم در نیاوردم تو دیتا شید هست

      CR وLF تو جدول ASCII هم هست میتونی ببینید

      شما با بیسیک کارمیکنید؟

      دیدگاه


        #4
        پاسخ : تحلیل کد فرستاده شده از sim900

        دوستان یکمکی بکنید موندم چیکارکنم :cry2:

        از این پایه های dcr و ri و dcd .......

        چطور باید استفاده کرد اصلا هیج تغیری رو ولتازشون ایجاد نمیشه چه دیتا بفرستم به ماژول چه بگیرم؟؟؟؟

        این flow controler هم فعال کردم فایده نداشت

        دیدگاه


          #5
          پاسخ : تحلیل کد فرستاده شده از sim900

          سلام دوست عزیز شما بهترین کار و انجام میدین که طبق اصولش میرین جلو این اصل کد نویسی هستش
          شما جهت دریافت صحیح اطلاعات ارسالی توسط ماژول ابتدا دو کارکتر cr و cf را درافت کنید بعد اطلاعات دریافتی رو توی بافر قرار بدید
          همه این کد ها رو درون تابع اینتراپت دریافت سریال میکرو تون بنویسید.
          مثلا مثل کد زیر
          [code=c]
          if (rxdata=='\r' && flagbit_rx_cr==1)
          flagbit_rx_cr=0;

          else if (rxdata=='\n' && flagbit_rx_cf==1)
          flagbit_rx_cf=0;

          if (flagbit_rx_cr==0 && flagbit_rx_cf==0)
          {

          buffer_data[index++]=rxdata;


          }

          [/code]

          اگر مشکلی داشتین در خدمتیم

          دیدگاه


            #6
            پاسخ : تحلیل کد فرستاده شده از sim900

            نوشته اصلی توسط mh1762
            سلام دوست عزیز شما بهترین کار و انجام میدین که طبق اصولش میرین جلو این اصل کد نویسی هستش
            شما جهت دریافت صحیح اطلاعات ارسالی توسط ماژول ابتدا دو کارکتر cr و cf را درافت کنید بعد اطلاعات دریافتی رو توی بافر قرار بدید
            همه این کد ها رو درون تابع اینتراپت دریافت سریال میکرو تون بنویسید.
            مثلا مثل کد زیر
            [code=c]
            if (rxdata=='\r' && flagbit_rx_cr==1)
            flagbit_rx_cr=0;

            else if (rxdata=='\n' && flagbit_rx_cf==1)
            flagbit_rx_cf=0;

            if (flagbit_rx_cr==0 && flagbit_rx_cf==0)
            {

            buffer_data[index++]=rxdata;


            }

            [/code]

            اگر مشکلی داشتین در خدمتیم
            دوست عزیز ممنون که پاسخ دادید
            اولین سوال این عبارت
            flagbit_rx_cr
            چی هست دقیقهکدوم فاگ منظورتون
            فلگ RXC هست؟

            دوم

            با این روش چطور تشخیص میدید که تمام دیتا دریافت کردید؟

            دیدگاه


              #7
              پاسخ : تحلیل کد فرستاده شده از sim900

              سلام دوست عزیز flag bit_Rx فلگ بیتی هستش که ما خودمون تعریف میکنیم که اگر کارکتر cr رو دریافت کردیم حالا نوبت کارکتر cf که دریافت میکنیم تازه پس از دریافت این دو کارکتر اطلاعات دریافتی رو درون بافر میریزیم پس این شد شروع دریافت اطلاعات. حالا چون دیتای ارسالی توسط ماژول پیوسته نیست منظورم اینه که تاما دستورات at command رو به ماژول ارسال نکنیم ماژول دیتایی رو به ما ارسال نمیکنه پس دوست عزیز شما وقتی دستوری رو به ماژول ارسال کردی و با دو کارکتر. بالا شروع اطلاعات رو پیدا کردی راحتریین کار برای شما اینه که بعد از همه این کارها یه تاخیر دو ثانیه کل اطلاعات ارسالی از ماژول توی بافر میکروته راستی پس از دریافت و تحلیل دیتای دریافتی از ماژول index بافر رو برابر صفر کن. و با استفاده از یه حلقه بافر رو خالی کن تا دیتای بعدی رو هم درست دریافت کنی راستی فلگ ها رو هم یک کن. برادر مشکلی داشتین در خدمتیم یا علی مدد

              دیدگاه


                #8
                پاسخ : تحلیل کد فرستاده شده از sim900

                سلام ممنونم که جواب دادید

                این تاخیر کجا بزارم ؟!

                با توجه به اینکه. بعضی اوقات ماژول خودش یک سری اطلاعات میفرسته مثلا
                در یافت پیام . تماس ورودی. و......

                با این روش که گفتید وقتی خودم ی at به ماژول میفرستم چون میدونم چی پس میده جواب میده و در مواردی مثل موارد بالا که ماژول خودش ی دیتا میفرسته
                برا اون چیکار باید کرد؟

                دیدگاه


                  #9
                  پاسخ : تحلیل کد فرستاده شده از sim900

                  سلام
                  با تعداد enter که میزنه : 0xd0 هارو بشمر
                  این ماژول رو کامپیوتر وصل کن با ft تو codevision رو حالت Hex بزار جای ascii نشون میده فرمت دقیق اطلاعات با 0x0d مشخص میشه
                  اصولا فرمت اینه :
                  0x0d
                  اظلاعات
                  0x0d
                  اطلاعات
                  0x0d
                  0x0d
                  2 تا 0x0d پشت سر هم یعنی انتقال تموم شده همه اظلاعات رو بریز تو یه ارایه بعد که 2 تا 0x0d گرفتی پشت سر هم یعتی وقتشه بری سراغ ارایه و اطلاعات رو تحلیل کنی
                  این فایل رو نگاه کنید شاید کمک کرد
                  CALL رو فیلتر میکنه SMS با متغلقاتشو برمیگردونه به میکرو بعد دلیت میکنه که پر نشه INBox
                  زیرشم یه مثال از طرز استفادشه
                  http://www.mediafire.com/view/1vsqjogooy3dxcj/sim.h
                  اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
                  هيتلر

                  دیدگاه


                    #10
                    پاسخ : تحلیل کد فرستاده شده از sim900

                    راهکاری که خود من انجامش دادم اینه:
                    معمولا بین پاسخهای ماژول یک فاصله زمانی وجود داره . بزرگترین فاصله زمانی را پیدا کن و در 1.5 ضرب کن.
                    حالا یه اینتراپت سرریز تایمر را به این کار اختصاص بده :
                    هر بار که داده ای در اینتراپت سریال دریافت کردی مقدار تایمر را 0 کن.
                    در صورت بروز سرریز در تایمر، یک بایت دلخواه را به عنوان پرچم ، یک کن.
                    در متن برنامه ات چک کن که آیا این پرچم ، یک شده یا نه. هر زمان که یک شده باشه یعنی به اندازی اون زمانی که در نظر گرفته ای از آخرین بایت دریافتی میگذره. و این یعنی یک بسته کامل با هر چندتا اینتری که داره دریافت شده.
                    قبل از خواندن این بسته ، مقدار پرچم و ایندکس آرایه مورد استفاده در اینتراپت سریال را صفر کن.
                    اگر این روش خوب بود آن را منتشر کنید تا ایده های جدیدتری شکل بگیره.

                    دیدگاه


                      #11
                      پاسخ : تحلیل کد فرستاده شده از sim900

                      نوشته اصلی توسط Saeed Saeb
                      2 تا 0x0d پشت سر هم یعنی انتقال تموم شده
                      سلام دوست عزیز ممنون که جواب دادید این کاری که شما میگید رو انجام دادم
                      فرم اطلاعات خروجی رو در حالت hex دیدم ولی تا اونجا که یادمه برای پایان اطلاعات 2تا 0x0d پشت سرهم نشون نمیده

                      میشه بگید شما چیکار کردید که این خروجی رو به شما نشون داده؟؟؟؟

                      دیدگاه


                        #12
                        پاسخ : تحلیل کد فرستاده شده از sim900

                        نوشته اصلی توسط Saeed Saeb
                        سلام
                        با تعداد enter که میزنه : 0xd0 هارو بشمر
                        این ماژول رو کامپیوتر وصل کن با ft تو codevision رو حالت Hex بزار جای ascii نشون میده فرمت دقیق اطلاعات با 0x0d مشخص میشه
                        اصولا فرمت اینه :
                        0x0d
                        اظلاعات
                        0x0d
                        اطلاعات
                        0x0d
                        0x0d
                        2 تا 0x0d پشت سر هم یعنی انتقال تموم شده همه اظلاعات رو بریز تو یه ارایه بعد که 2 تا 0x0d گرفتی پشت سر هم یعتی وقتشه بری سراغ ارایه و اطلاعات رو تحلیل کنی
                        این فایل رو نگاه کنید شاید کمک کرد
                        CALL رو فیلتر میکنه SMS با متغلقاتشو برمیگردونه به میکرو بعد دلیت میکنه که پر نشه INBox
                        زیرشم یه مثال از طرز استفادشه
                        http://www.mediafire.com/view/1vsqjogooy3dxcj/sim.h
                        ببینید بعنوان نمونه اومدم دستور
                        AT رو فرستادم و ماژول هم پاسخ OK فرستاده (در حالت HEX جواب رو میبینید)

                        در انتها دستور OK
                        0D 0A میفرسته؟؟؟

                        این برا همه داده ها صادق نیست مثلا برا SMS فرق میکنه ...

                        در اولین پستس که فرستادم فرمت پاسخ دادن SIM900 نشون دادم (باتوجه به گقته دیتاشید)
                        الانم که میبینید به همون شکل خروجی داده

                        دیدگاه


                          #13
                          پاسخ : تحلیل کد فرستاده شده از sim900

                          سلام دوست عزیز شما جهت دریافت اطلاعات تماس و اس ام اس یه فلگ تعریف کن و پایه riماژول رو به پایه اینتراپت میکروت که حساس به سطح فعال کردید نصب کنید و تو تابع اینتراپتت این فلگ رو یک کن و تو حلقه while برنامت این فلگ رو چک کن اگه برابر یک بود تو بافرت مثلا برای تماس کلمه ring رو جستجو کن اگه وجود داشت تحلیلت رو انجام بده بعد همه این کارا این فلگ رو دوباره صفرش کن

                          دیدگاه


                            #14
                            پاسخ : تحلیل کد فرستاده شده از sim900

                            این لینکم یه نگاه کنید



                            http://www.eca.ir/forum2/index.php?topic=107519.0

                            دیدگاه


                              #15
                              پاسخ : پاسخ : تحلیل کد فرستاده شده از sim900

                              نوشته اصلی توسط h.torabi
                              ببینید بعنوان نمونه اومدم دستور
                              AT رو فرستادم و ماژول هم پاسخ OK فرستاده (در حالت HEX جواب رو میبینید)

                              در انتها دستور OK
                              0D 0A میفرسته؟؟؟

                              این برا همه داده ها صادق نیست مثلا برا SMS فرق میکنه ...

                              در اولین پستس که فرستادم فرمت پاسخ دادن SIM900 نشون دادم (باتوجه به گقته دیتاشید)
                              الانم که میبینید به همون شکل خروجی داده
                              سلام مهندس جان ببین این کد رو
                              کد:
                              data=getchr();
                                if((data!=32)&&(data!=0x0A)) //FILTER INTER AND SPACE
                                {    
                                  if(data!=13)       //NL CHAR FILTER
                                  {
                                    int_sim[__SIM_CHR_C]=data;
                                    __SIM_CHR_C++;
                                  }
                                  else if(data==13)     //NL CHAR ++ 2 NL MEANS TRANSMIT OVER
                                  { 
                                    __SIM_NL_C++;     //NL++ - COUNT NL
                                    if(__SIM_NL_C>=2)   //IF>2 TRANSMIT OVER
                                    {
                              کد رو میگیره اگه 33 یا 10 باشه حدف میکنه . کد اسکی رو یه نگاه بندازید معلومه من الان دقیق یادم نیست . اسپیس رو حدف میکنیم یعنی داخل ارایه نمیفرستیمش بعدش میریم سراغ اینتر که میشه 0x0d 0x0a اینجا بنده 0x0a ها رو حدف کردم 0x0d رو شمردم که میشه 13 با متغییر sim_nl_c وقتی بیشتر یا مساوی 2 میشه یعنی تمومه . الان کد خودتون رو که ببینید یه 0a داده یه ok داد بعد یه 0a دیگه داده . این دستور برای همه دساوهای اولیه صادقه . ببین رفیق برای اینکه اعلام کنه کدهای ضروری رو مثل ok error یا اومدن sms یه 0a کد 0a میده ولی وقتی میخوایی sms رو بخونی ممکنه تعداد 0a فرق کنه برای این کار از فلگ استفاده کن ببین به فرض الان sms میاد این کدشه . اول که میخواد بگه sms اومده میشه با 2 تا 0d یا 0a کارو راه انداخت و کد رو تحلیل کرد اما وقتی فهمیدی sms اومده دیگه این کد کارایی نداره باید یه فلگ رو 1 کنی بعد بری تو مد sms که اونجا تعداد 0a ها و غیره متفاوته . رو کامپیوتر ببینی فرمت دستت میاد و این تابع بالا واسه فهمیدن اینکه مد کاری چیه اما هر مد واسه خودش یه سیستم جدا گانه داره مثلا واسه فرستادن sms از < استفاده میشه

                              کد:
                              for(i=0;int_sim[i];i++) //SMS
                                      {
                                        if(int_sim[i]=='+')
                                          if(int_sim[i+1]=='C')
                                            if(int_sim[i+2]=='M')
                                              if(int_sim[i+3]=='T')
                                              {
                                                ret=__SIM_SMS;   //SET THE FLAG
                                                for(e=0;e<=2;e++) //EMPTY SMS ARRAY
                                                smss[e]='\0'; 
                                                for(i=0;int_sim[i];i++) //SMS STORAGE NUMBER ON SIM
                                                {
                                                  if(int_sim[i]=='"')
                                                    if(int_sim[i+1]==',')
                                                    {
                                                      for(i=i+2;int_sim[i];i++)
                                                        smss[si]=int_sim[i];
                                                    }
                                                }
                                              }
                              تو این کد وقتی میفهمیم sms اومده حالا یه فلگ ریترن میشه ret=__SIM_SMS; با این کار میری تو مد sms تو مد sms دوباره با این نرم افزاریا کد ویژین ببین چندتا 0a میده رو کاغذ بنویس حالا شمارنده nl رو روی این تعداد قرار بده مثلا اگه 4 تاس رو این تعداد قرار بده
                              واسه سیم مد درست کنید . تمامی امکانات sim روی کامپیوتر تست کنید فرمت همه روی کاغذ بنویسید . مد نرمال ماله وقتی اراده مد زنگ مد اس ام اس ریسیو . مد اس ام اس سند این جوری تعداد اینترها تو هر مد فرق میکنه
                              من 2 سال پیش کار کردم حافظم یاری نمیکنه . سیم رو به کامپیوتر ببندید واسه هر مد تعداد 0a یا 0d رو بشمرید به همون نسبت شمارنده بزارید
                              اون فایلی هم که بالا دادم میتونه کمک کنه یه نگاه بهش بندازیرد مخصوصا اخرایش که یا رنگ سبزه . این روش 100 در صد جواب میده .
                              تو قسمت اول که فرستادید ریسپوند بین یه کد اینتر و یه کد اینتر دیگست .
                              اشکهايي که پس از هر شکست ميريزيم همان عرقيست که براي پيروزي نريخته ايم.
                              هيتلر

                              دیدگاه

                              لطفا صبر کنید...
                              X