PDA

View Full Version : PDU Encoding And Decoding



صفحه : [1] 2

noorsoft
سه شنبه 14 خرداد 1387, 09:31 صبح
تو این تاپیک توضیحات کامل کد کردن و خواندن PDU را توضیح میدم
امیدوارم دوستان هم همکاری کنند تا یک منبع کامل تو این زمینه آماده کنیم.

مهران رسا
سه شنبه 14 خرداد 1387, 09:54 صبح
سلام .

تاپیک خیلی مفیدی هست . فقط اگر امکان داره از مباحث پایه شروع کنید . یعنی از صفر !

مرسی ...

raravaice
سه شنبه 14 خرداد 1387, 13:39 عصر
قسمت اول:Encode شماره مرکز پیام

http://xvay.net/barnamenevis.org/sms/part1.png

همانطور که میدونید برای ارسال پیام کوتاه به فرمت PDU نیاز به قسمتهای تفکیک شده اطلاعات هست.

قسمت اول همانطور که در عکس هم وجود داره از سمت چپ تصویر شروع میشه تعداد جفت کاراکتری است که این رقم بر مبنای تعداد کاراکتر های بعدی تعیین میشه پس توضیح و مثال اونو میزاریم در انتها.

قسمت دوم نوع شماره هست که آیا این شماره از نوع بین الملل هست ("یعنی با + شروع شده یا خیر")
اگر شماره با + شروع شده باشه عدد 91 و در غیر این صورت عدد 81 جایگزین میشه و این جفت کاراکتری 1 واحد به تعداد شماره اضافه میکنه.


قسمت سوم اصل شماره است که میبایست 2 تا،2تا جدا و معکوس بشه و هر جفت 1 واحد به تعداد خانه اول اضافه میکنه و همینطور اگر تعداد اعداد فرد باشه باید عدد آخر با مقدار F0 جمع بشه.

مثال:
1) برای یک شماره بین المللی که با + شروع شده.
+98-912-1234567

ما میام این شماره رو بر حسب نیاز خودمون تفکیک میکنیم تا مفهوم بهتر درک بشه.
+98-91-21-23-45-67

چون با + شروع شده پس عددی که باید در خانه دوم قرار بگیره 91 هست.

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

+89-19-12-32-54-76

تکلیف + با جایگزاری عدد 91 در خانه دوم مشخص شده پس حذف میشه.نتیجه:

89-19-12-32-54-76


پس کدی که تا اینجا تولید شده بدون در نظر گرفته خانه اول که تعداد هست شده:

91-89-19-12-32-54-76

با شمارش جفت دوتایی به عدد 7 میرسی پس این عدد را باید به عنوان شمارش گر در مبنای HEX در خانه اول جایگزاری نماییم و این نکته هم در یاد داشته باشید که چون عدد ما یک رقمی است و در اینجا با جفت کاراکتری اعداد سروکار داریم مقدار بی ارزش 0 سمت چپ عدد را جایگزاری میکنیم یعنی 07.

پس کدی که در انتها داریم :

07-91-89-19-12-32-54-76

و کدی که با ید ارسال بشه:
0791891912325476

این شده شماره مرکز پیام به صورت PDU در قالب یه شماره بین الملل.

2) برای یک شماره معمولی.
0098-912-1234567

ما میام این شماره رو بر حسب نیاز خودمون تفکیک میکنیم تا مفهوم بهتر درک بشه.
00-98-91-21-23-45-67

چون با + شروع نشده پس عددی که باید در خانه دوم قرار بگیره 81 هست.

در این نوع خواندن شماره همیشه اولین رقم از سمت چپ حذف میشه یعنی وقی شماره با 0098 وارد میشه سمت چپ ترین عدد حذف شده و عدد 098 برای ما باقی میمونه.پس تا اینجا نتیجه شده:

0-09-89-12-12-34-56-7

که صفر سمت چپ حذف میشه پس داریم:


09-89-12-12-34-56-7


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

90-98-21-21-43-65-7

و چون تعداد ارقام ما فرد هست پس سمت راست ترین عدد با F0 جمع میشه پس داریم:

90-98-21-21-43-65-F7


پس کدی که تا اینجا تولید شده بدون در نظر گرفته خانه اول که تعداد هست شده:

81-90-98-21-21-43-65-F7

با شمارش جفت دوتایی به عدد 8 میرسی پس این عدد را باید به عنوان شمارش گر در مبنای HEX در خانه اول جایگزاری نماییم و این نکته هم در یاد داشته باشید که چون عدد ما یک رقمی است و در اینجا با جفت کاراکتری اعداد سروکار داریم مقدار بی ارزش 0 سمت چپ عدد را جایگزاری میکنیم یعنی 08.

پس کدی که در انتها داریم :

08-81-90-98-21-21-43-65-F7

و کدی که با ید ارسال بشه:
0881909821214365F7

این شده شماره مرکز پیام به صورت PDU در قالب یه شماره معمولی.

تصویر بالا هم تو ضمیمه اضافه کردم تا اگر احیانا تصویر رو از هاست برداشتم ضمیمه این پست باشه.

موفق باشید

raravaice
سه شنبه 14 خرداد 1387, 13:55 عصر
قسمت دوم :Status Report یا درخواست گزارش از مرکز پیام

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

اگر نیاز دارید عدد :31
اگر نیاز ندارید عدد:11

با ید به رشته بالا و دقیقا بعد از شماره مرکز پیام اضافه بشه.

موفق باشید

raravaice
سه شنبه 14 خرداد 1387, 14:37 عصر
قسمت سوم : Message Refrence

وقتی شما با دستوری مثل AT+CMGW پیامی رو داخل سیم کارت ذخیره میکنی اون پیام یه شماره Index داره که در پاسخ دستور به شما بر میگرده، این شماره همون شمارست که در اصل شما میگی اونو بفرسته.

که اصطلاحا بهش میگن SMS SUBMIT

ما اینجا 00 رو برای این مورد در نظر میگیریم بدین معنا که پیام در این کد ارسال میشه و هیچ رفرنسی نداره.

موفق باشید

raravaice
سه شنبه 14 خرداد 1387, 14:50 عصر
قسمت چهارم : شماره مقصد

http://xvay.net/barnamenevis.org/sms/part3.png
همانطور که در عکس مشاهده میکنید این قسمت تفاوتهای کمی با تعیین شماره مرکز پیام تو قسمت اول داره که شامل:

1.کد بین المللی بودن شماره در شمارش لحاظ نمیشود.
2.شماره به صورت جفت شمارش نمیشود و هر عدد نماینده 1 واحد در شما رش میباشد البته اگر تعداد اعداد فرد باشد باز هم همانند شماره مرکز پیام با F0 جمع میشود ولی مقدار F در تعداد شمارش محاسبه نمیشود.
3.مقدار سمت چپ ترین عدد حفظ میشود.

مثال برای نوع بین المللی:

شماره مقصد :
+989121234567

پس داریم:
تعداد ارقام بدون احتساب + برابر با 12 که چون با مبنای 16 سروکار داریم معادل آن یعنی C را جایگزین میکنیم.یعنی خانه اول شمارش کارکتر میشود :

0C

این شماره با + نماینده یک شماره بین الملل شروع شده پس در خانه دوم عدد 91 جایگزین میشود پس تا اینجا داریم:

0C-91

شماره همانند شماره مرکز پیام به جفت دوتایی تفکیک و معکوس میشه یعنی:

شماره اصلی شامل:
98-91-21-23-45-67

شماره بعد از معکوس شدن و حذف + :
89-19-12-32-54-76

ادغام نهایی:

0C-91-89-19-12-32-54-76

0C91891912325476

مثال برای نوع معمولی:

شماره مقصد :
09121234567

پس داریم:
تعداد ارقام برابر با 11 که چون با مبنای 16 سروکار داریم معادل آن یعنی B را جایگزین میکنیم.یعنی خانه اول شمارش کارکتر میشود :

0B

این شماره یک شماره معمولی است پس در خانه دوم عدد 91 جایگزین میشود پس تا اینجا داریم:

0B-81

شماره همانند شماره مرکز پیام به جفت دوتایی تفکیک و معکوس میشه یعنی:

شماره اصلی شامل:
09-12-12-34-56-7

شماره بعد از معکوس شدن :
90-21-21-43-65-F7

ادغام نهایی:

0B-81-90-21-21-43-65-F7

0B819021214365F7


موفق باشید

raravaice
سه شنبه 14 خرداد 1387, 15:00 عصر
این قسمت از کد ما یه یه حالت رزرو شده داره مخصوص پروتکل های پیام هست که دارای یه مبحث جدا و چه بسا طولانی هست که برای اجتناب و جلوگیری از هر گونه سر در گمی از کد 00 استفاده میکنیم.

پس قسمت پنجم کد خودمون رو با :00
پر میکنیم

موفق باشید

raravaice
سه شنبه 14 خرداد 1387, 15:07 عصر
قسمت ششم: نوع کاراکترها

منظور اینه که شما به BTS میگی متنی که داری میفرستی یه متن معمولی هست یه از کاراکتر های 2 بایتی توش استفاده شده که در این حالت :

متن معمولی = DefaultAlphabet = شامل 160 کاراکتر برای هر پارت = برابر با کد 00

کاراکترهای 2 بایتی = UCS2 = شامل 70 کاراکتر برای هر پارت = برابر با کد 08


موفق باشید

raravaice
سه شنبه 14 خرداد 1387, 15:15 عصر
قسمت هفتم : طول عمر پیام

این قسمت از کد ما شامل طول عمر و مدت زمانی که یک پیام میتونه تو شبکه سردر گم بمونه تا به مقصد برسه هست.

که برابر است با:

1 ساعت = 0B
3 ساعت = 1D
6 ساعت = 47
12 ساعت = 8F
1 روز = A7
1 هفته = C4
حداکثر = FF

موفق باشید

raravaice
سه شنبه 14 خرداد 1387, 15:28 عصر
قسمت هشتم : ارسال یک پیام بدون محتوا

تا اینجا به آزمایش دستاورد آموزشی میرسیم که یه پیام خالی رو به شماره ای ارسال کنیم.

مثال 1:

مشخصات:
شماره مرکز پیام = 989350001400+
گزارش=بدون گزارش
شماره Index=متن فعلی
شماره مقصد = 09351234567
پروتکل=00
نوع محتوا = DefaultAlphabet
مدت زمان نگهداری = حداکثر
متن = خالی



079189390500410011000B819053214365F70000FF


موفق باشید

مهران موسوی
سه شنبه 14 خرداد 1387, 15:36 عصر
توي اين پست تصميم دارم يكي از كامل ترين و منعطف ترين نمونه هايي رو كه توي نت ديدم رو بزارم .. اين نمونه به زبان VB.NET پياده سازي شده و واقعا در اين زمينه محشر هست ..

اينم يك رفرنس جامع براي كار با SMS در C#

يك نمونه براي vb كارها در زمينه ي كار با SMS

اينم يكي ديگه براي كار با SMS در VB

اينم براي دريافت SMS در VB

اينم يك نمونه براي ارسال SMS در VB

يك نمونه براي C# كارها ... :لبخندساده:

خوب فعلا كافيه .. چيز بهتري در اين زمينه ندارم ديگه .. منتظر ياري گرم مدير اين بخش كه قرار بود با هم همكاري كنيم تا يك كتابخانه كامل در اين زمينه بسازيم هستم ...

با تشكر از زحمات raravaice عزيز ... خيلي ممنون ... :تشویق:

يا حق ...

raravaice
سه شنبه 14 خرداد 1387, 17:47 عصر
قسمت نهم : تهیه محتوای پیام برای 1 پارت پیام در مود DefaultAlphabet

http://xvay.net/barnamenevis.org/sms/part9.gif

با در نظر گرفتن مقدار اسکی هر کاراکتر و حذف سمت چپ ترین بیت از 8 بیت میتونیم به علامت 7 بیتی اون کاراکتر برسیم:

مثلا برای کاراکتر a داریم

HEX=61
Binary 8 bit= 01100001
Binary 7 bit = 1100001


و همینطور برای کاراکتر ® داریم


HEX=AE
Binary 8 bit = 10101110
Binary 7 bit = 0101110


یک استثناء
نکته مهم برای کاراکتر @ داریم :


HEX=64
Binary 8 bit = 01000000
Binary 7 bit = 1000000


ولی به دلیل اینکه از تداخل این کاراکتر با À پرهیز کنیم چون برای À داریم:


HEX=C0
Binary 8 bit = 11000000
Binary 7 bit = 1000000


به جای علامت 7 بیتی @ که در اینجا مشابه هست مقدار 0 رو در نظر میگیریم و چو ما به هفت بیت نیاز داریم معادل 0000000 رو به کد خودمون پیوست میدیم.

------------------------------------------------------------
در مطالب بالا ماتونستیم هر کاراکتر رو به مقدار 7 بیتی خودش تبدیل کنیم.
حالا باید این مقادیر باینری رو به صورت پشت سر هم به معادل HEX در مبنی 8 بیتی تبدیل کنیم که با ذکر یک مثال مسئله رو براتون روشن میکنم.

مثلا برای کلمه @©Book داریم.


B
HEX=42
Binary 8 bit = 01000010
Binary 7 bit = 1000010

o
HEX=6F
Binary 8 bit = 01101111
Binary 7 bit = 1101111

o
HEX=6F
Binary 8 bit = 01101111
Binary 7 bit = 1101111
k
HEX=6B
Binary 8 bit = 01101011
Binary 7 bit = 1101011

©
HEX=A9
Binary 8 bit = 10101001
Binary 7 bit = 0101001

@
Binary 7 bit = 0000000


پس تا اینجا داریم :


1000010-1101111-1101111-1101011-0101001-0000000
حالا باید همه نتیجه رو بر عکس کنیم یعنی :



0000000-0101001-1101011-1101111-1101111-1000010
اگر دقت کنید در کد بالا ما 42 بیت داریم که بر 8 تقسیم نمیشه پس تا جایی که کد باینری ما بر 8 بخش پذیر باشه از سمت چپ به اون 0 اضافه میکنیم یعنی:



000000-0000000-0101001-1101011-1101111-1101111-1000010
حالا 8 بیت 8 بیت جدا سازی میکنیم تا کد ما بیاد رو مد 8 بیتی یعنی :



00000000-00000010-10011101-01111011-11110111-11000010
حالا این کد رو به معادل HEX اون بر میگردونیم یعنی :



00-02-9D-7B-F7-C2
اگر یادتون باشه یه بار باینری هارو برعکس کردیم حالا دوباره این کارو روی HEX انجام میدیم یعنی:


C2-F7-7B-9D-02-00
کلمه ما آماده ارسال هست ولی هنوز تعداد اون معلوم نیست.
این عدد تعداد کاراکتر های وارد شده ما در مبنای 16 هست که در اینجا 6 کاراکتر داریم.دقت کنید چون داریم 1 بیت از هر کاراکتر کم میکنیم امکان داره تعداد جفت کد هگز ما این عدد نشه پس باید محاسبه این عدد رو از روی مجموع کل کاراکتر های وارد شده انجام بدیم.

پس کد نهایی ما میشه:



06-C2-F7-7B-9D-02-00
وچیزی که باید ارسال بشه


06C2F77B9D0200
مبارکه;)

موفق باشید

raravaice
سه شنبه 14 خرداد 1387, 18:29 عصر
قسمت دهم : تهیه محتوای پیام برای 1 پارت پیام در مود UCS2 ("کلمات فارسی و UTF-8")

خوشبختانه کار ما برای این مورد خیلی راحت تره!
اما چرا؟! :)

توی این مد بر خلاف DefaultAlphabet (که برای هر کاراکتر با 1 بایت سرو کار داریم) با 2 بایت سرو کار داریم.

یعنی توی DefaultAlphabet برای کاراکتر a معادل هگز داشتیم برابر با 61 ولی اینجا معادل هگز اون میشه 0061

علت اونم که خودتون بهتر از من میدونید چون کاراکتر ها در مد UTF-8 در 2 بایت ذخیره میشن.

ومیتونم بهتون اینو بگم که هیچکدوم از مراحل پیچیده حالت DefaultAlphabet در اینجا انجام نمیشه.

و فقط کافیه که معادل اسکی 2 بایتی هر کاراکتر رو پشت سر هم ردیف کنیم.

فقط به یه نکته باید توجه کنید که هم تو این مد و هم تو مد DefaultAlphabet باید رعایت بشه اونم اینکه توی مد DefaultAlphabet صفر بی ارزش یعنی 0 در سمت چپ عدد درسته که از لحاظ ریاضی بی ارزش هست ولی اینجا ما لازمش داریم.

مثلا معادل اسکی در پایه HEX برای حرف م عدد 645 هست ولی چون برای هر کاراکتر در این مد 4 تا صفر رزرو شده حتما باید صفر سمت چپ گذاشته بشه یعنی برای حرف م داریم 0645

با یه مثال مسئله رو روشن میکنم:

پیام رو با جمله زیر کد میکنیم.

داش مهران شیطونی نکن.

د = 06F2
ا = 0627
ش = 0634
Space = 0020
م = 0645
ه = 0647
ر = 0631
ا = 0627
ن = 0646
Space = 0020
ش = 0634
ی = 06CC
ط = 0637
و = 0648
ن = 0646
ی = 06CC
Space = 0020
ن = 0646
ک = 06A9
ن = 0646
. = 002E


پس کدی که باید ارسال بشه :



062F062706340020064506470631062706460020063406CC06 370648064606CC0020064606A90646002E
تعداد کاراکتر های ما در این مثال 21 عدد است که چون داره توی 2 بایت ذخیره میشه پس در اصل داره 42 بایت ارسال میشه که عدد 42 در مبنای 16 برابر میشه با 2A که باید قبل از متن قرار بگیره یعنی:


2A062F062706340020064506470631062706460020063406CC 06370648064606CC0020064606A90646002E
خیلی راحت بود مگه نه.;)

مخلص داش مهران و بقیه دوستان هم هستیم.;)

موفق باشید

مهران موسوی
سه شنبه 14 خرداد 1387, 19:02 عصر
raravaice عزير من اسم كوچيكتون رو نميدونم پس تا موقع اي كه اسمت رو نگي به نام كاربريت صدات ميزنم ..

اقا زحمت كشيدي اين رفرنس رو ارائه دادي .. اگه كاملش كني عالي ميشه .. همون طور كه ديدي من نمونه هايي رو گذاشتم كه هر كدوم براي خودشون يك سري مشكلاتي رو داشتن ...

ايا شما نمونه ي خوبي براي اين كار سراغ دارين كه از انعطاف بالايي برخوردار باشه ؟؟ :متفکر:

دارم روي اين موضوع كار ميكنم و دارم تركيبي از بهترين نمونه ها رو بازنويسي ميكنم .. اگه شما هم چيز خوبي دارين در اختيار بزارين ... اگه كارم با موفقيت رو به رو شد همين جا ميزارمش .. :چشمک:

raravaice
سه شنبه 14 خرداد 1387, 19:18 عصر
به خدا توکل کن و مابقی بحث رو که درباره ارسال در 2 یا چند پارت پیام دنبال هم هست رو گوش کن.;)
من کلا یه دوره زیاد سر به سر موبایل و سیم کارت و BTS هاش میزاشتم هر چی هست اطلاعات اون دورست.
کامل و بدون نقص و همینطور تست شدست حالا از روی مطالب شما به هر زبانی که دوست داشتی بشین سورس بنویس.

موفق باشید

مهران موسوی
سه شنبه 14 خرداد 1387, 19:55 عصر
مشتاقانه منتظر اس ام اس پارتي هستم :لبخند: من توي زبان برنامه نويسي محدوديتي ندارم ... بعد از تكميل شدن رفرنست رندوم ميزنم به يه زبان ترجمش ميكنم :بامزه:

بعد از اين بحث ميپريم روي AT ها كه بايد سه نفري روش بحث كنيم ... من و تو و noorsoft .. نميدونم چرا اصلا پيداش نيست !!! ؟ به اميد خداوند تبارك يك چيز توپ سه تايي جمع و جور ميكنيم ... :لبخند:

راستي اسم شريف رو نگفتي ... !!

يا حق ...

raravaice
سه شنبه 14 خرداد 1387, 21:06 عصر
همانطور که در قسمت های قبل به صورت بخش به بخش گفتم برای تهیه یک کد PDU قابل ارسال ما به چند قسمت تفکیک شده نیاز داریم که به ترتیب شامل :

1.تعداد ارقام شماره مرکز پیام
2.نوع شماره مرکز پیام "81,91"
3.خود شماره مرکز پیام به صورت برعکس دوتایی
4.کد درخواست گزارش از مرکز پیام"31،11"
5.Message Refrence
6.تعداد ارقام شماره مقصد
7.نوع شماره مقصد"91,81"
8.خود شماره مقصد به صورت برعکس دوتایی
9.نوع پروتکل که شما برای SMS همیشه 00 رو جایگزین کنید.
10.نوع فرمت که :08 برای UTF و 00 برای معمولی که در حالت 08 هر پارت شامل حداکثر 70 کاراکتر و در حالت 00 هر پارت شامل حداکثر 160 کاراکتر میباشد.
11.طول عمر پیام
12.تعداد بایتهای محتوای پیام
13.محتوای پیام

حالا برای ایجاد پارت های بعدی همه اون کارها باید انجام بشه فقط یه چیزایی این وسط اضافه میشه یا تغییر میکنه.

1.وقتی پیام شما بیشتر از 1 پارت هست("حالا بر حسب نوع میشه یک پارت رو به 160 یا 70 کاراکتر تقسیم کرد اشاره من به صورت کلی مسئله هست") کد درخواست در هر حالتی که هست با 40H جمع میشه.
یعنی برای عدم ارسال گزارش داریم51H و برای ارسال گزارش داریم 71H

2.عدد ثابت 060804 دقیقا بعد از مرحله 12 و قبل از مرحله 13 جاگزاری میشه که کارش اینه که به مرکز پیام میگه این پیام ادامه دارد.

3.بعد از این عدد ثابت 32 بیت رزرو شده داریم که حاوی یه عدد تصادفی برای شماره گزاری پیامهای ماست یعنی چی؟
پیامی که ما در چند پارت میفرستیم بعد از این که مرکز پیام با کد 060804 متوجه شد ادامه داره و بتونه با دقت رد یابی کنه به یه کد احتیاج داره که در این قسمت قرار میگیره و میتونه یه عدد تصادفی بین 0000 و FFFF باشه و این عدد در سرآیند همه قسمتهای این پیام قرار میگیره.

4.بعد از این عدد تصادفی که در اصل کد پیام ما هست باید به مرکز پیام بفهمونیم که منتظر چند قسمت باید باشه پس 16 بیت بعد از اون رو به این کار اختصاص دادن یعنی از 02 تا FF که میشه : 02 پیام من 2 قسمت داره و FF پیام من 255 قسمت داره.

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

6.محتوای پیام رو بدون هیچ تغییری وارد میکنیم.

یه نکته که باید بهش خوب دقت کنید اینه که:

060804-0000-02-01

خودش شامل 7 بایت هست که دقیقا بعد از طول بایتهای محتوی قرار گرفته پس این 7 بایت هم سرباریه برای محتوای پیام و در نتیجه در حالتی که پیام ما از 1 پارت بیشتر هست باید 7 بایت رو از محتوی اول کم کنیم و اینارو جا بدیم و اون 7 بایتی رو که کم کردیم بعلاوه 1 بایت ناقص ما که توی پاورقی بهش اشاره شده به اول پیام بعد اضافه کنیم.

مسئله یه کم پیچیده است ولی خیلی مهم و جالبه.
یه مثال میزنم که موضوع مشخص بشه:

شماره مرکز پیام = 989350001400+
شماره مقصد = 09351234567
فرمت و محتوی پیام = فارسی شامل 200 کاراکتر "م"
تمایل به دریافت گزارش دارم=71 چو در چند پارت داره ارسال میشه
طول عمر پیا حداکثر باشه=FF

خوب ، یه حساب کتاب میکنیم ببینیم متن ما قرار هست توی چند پارت ارسال بشه.
از اونجایی که فرمت ما UTF هست پس در هر پارت حداکثر باید 70 کاراکتر جا بگیره یعنی :

همانطور که گفتم ما 7 بایت سر بار اضافه داریم پس باید بشه.


200 / 66 = 3.03


یعنی 3 قسمت کامل و یه جزء کوچک که توی قسمت 4 قرار میگیره.
پس پیام ما در حقیقت 4 پارت داره.

پس کدی که باید برای قسمت اول تولید بشه به ترتیب میشه :

1.تعداد بایتهای شماره مرکز پیام + کد نوع شماره = 07
2.نوع شماره مرکز پیام که اینجا با "+" شروع شده= 91
3.شماره مرکز پیام به صورت معکوس شده= 893905004100
4.درخواست گزارش = 71
5. رفرنس پیام = 00
6.تعداد ارقام شماره مقصد = 0B
7.نوع شماره مقصد چون معمولی هست = 81
8. بر عکس شده شماره مقصد = 9053214365F7 "چون تعداد 11 فرد هست رقم آخر با F0 جمع شده"
9.نوع پروتکل = 00
10.نوع فرمت چون UTF هست پس = 08
11.مدت زمان انتظار در شبکه حداکثر = FF
12. تعداد بایتهای پیام اول = 8B ("توضیح در پاورقی ")
13.عدد ثابت = 060804
14.کد تصادفی پیام = 661D
15.تعداد کل قسمتها = 04
16.شماره ردیف پارت قسمت اول = 01
17.محتوی پیام شامل = [66 بار تکرار (0645) که معادل کد اسکی حرف "م" هست و با یه ضرب ساده در 2 بایت میشه همون 132 بایتی که نیاز داشتیم]

همونطور که حساب کردیم ما اینجا 3 تا پارت کامل داری و یه پارت نصفه پس پارت دوم و سوم فقط در شماره ردیف پیام تغییر میکنن یعنی:

پارت دوم:
تمامیه مراحل در پارت اول مشترک است غیر از مرحله :

16.شماره ردیف پارت قسمت دوم = 02

پارت سوم:
تمامیه مراحل در پارت اول مشترک است غیر از مرحله :

16.شماره ردیف پارت قسمت سوم = 03

در پارت چهارم
تمامیه مراحل در پارت اول مشترک است غیر از مرحله :

12. تعداد بایتهای پیام چهارم =0B "ا 3 بایت عدد ثابت + 2 بایت عدد تصادفی + 1 بایت تعداد کل قسمتها + 1 بایت شماره ردیف پیام + 4 بایت محتوای پیام که شامل 2 تا "م" باقیمانده هست"


16.شماره ردیف پارت قسمت چهارم = 04

17.محتوی پیام = 2 بار تکرار (0645)


در نتیجه محتوای پارت اول چیزی شبیه به کد زیر میشه :



079189390500410071000B819053214365F70008FF8B060804 661D0401064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 4506450645064506450645
پارت دوم


079189390500410071000B819053214365F70008FF8B060804 661D0402064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 4506450645064506450645
پارت سوم


079189390500410071000B819053214365F70008FF8B060804 661D0403064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 4506450645064506450645
پارت چهارم


079189390500410071000B819053214365F70008FF0B060804 661D040406450645
یه نکته برای دوستانی که از AT Command استفاده میکنن اینکه لازم نیست این کدها حتما در یک بار ارسال و یا پشت سر هم ارسال بشه.

شما میتونید این کد ها رو در فواصل زما حتی 1 دقیقه و به صورت کاملا نا مرتب هم بفرستید یعنی اول پارت 2 بعد 3 بعد 1 و بعد 4 رو بفرستید البته مدت زمان وقفه به BTS شما بستگی داره که معمولا روی BTS های ایران تا 30 ثانیه به من جواب داده.
پس عجله نکنید;)

مهم
پ.و: همانطور که تا الان باید متوجه شده باشید ما بدون احتساب شماره مرکز،شماره گیرنده و بقیه علائم برای متن و محتوای 1 پارت پیام حداکثر 140 بایت جا داریم که شمارش اون دقیقا از بعد از بایت شمارشگر محتوی شروع میشه.

یعنی اگر بر مبنای 8 بیت حساب کنیم 140 کاراکتر داریم و چون در مد DefaultAlphabet برای هر کاراکتر 7 بیت داریم پس کلا میتونیم 160 کاراکتر ارسال داشته باشیم و همچنین به دلیل اینکه در مد UCS2 برای هر کاراکتر 16 بیت داریم یعنی هر کاراکتر 2 بایت پس کلا میتونیم 70 کاراکتر رو ارسال کنیم.

حالا توی مد UCS2 وقتی پیام از 1 پارت بیشتر میشه ما مجبور 7 بایت هدر شامل :(3 بایت کد ثابت، 2 بایت شماره تصادفی ،1 بایت تعداد کل پیامها ،1 بایت شماره پیام فعلی) رو در محتوی پیام بگنجونیم
پس در نتیجه 140 بایت منهای 7 بایت برابر میشه با 133 بایت.
یعنی ما میتونیم 133 بایت از محتوی متن پیام شماره 1 رو اینجا بزاریم اما تو مد UCS2 یه ولی داریم:
توی حالت UCS2 همانطور که گفتم هر کاراکتر 2 بایت داره پس با احتساب 133 بایت فضای خالی که موجود داریم میتونیم 66 کاراکتر و 1 بایت بفرستیم و چون این بایت باقیمانده نیاز به بایت مکمل داره تا تفهیم باشه و اون بایت مکمل بلاجبار توی پارت بعدی قرار گرفته این بایت هم از اینجا حذف میکنیم و به پارت بعدی اضافه میکنیم یعنی ما توی هر پارت پیام UCS2 به صورت مولتی پارت 132 بایت رو جا میدیم که میشه 66 کاراکتر و بیشتر از این امکان نداره.
----------------------------------------

موفق باشید

raravaice
سه شنبه 14 خرداد 1387, 21:23 عصر
قسمت دوازدهم : نکته آخر برای ارسال پیام کوتاه طول دستور AT شما

اگر شما قصد داشته باشید با AT به مودم پیام ارسال کنید اول از همه باید طول دستور رو بهش بگید و بعد از زدن کلید Enter محتوی دستور رو وارد کنید.

این عدد برابر میشه با : تعداد کل بایتهای ایجاد برای هر پارت - بایت شمارش شماره مرکز منهی بایت نوع منهی تعداد بایتهایی که شماره مرکز پیام رو تشکیل میده.

مثلا برای مثالی که تو قسمت بالا گفتم طول پارت 1 و 2 و 3 برابر میشه با 153 و طول پارت 4 برابر میشه با 25

موفق باشید

raravaice
سه شنبه 14 خرداد 1387, 21:25 عصر
اگر خدا قبول کنه فردا به نحوه Decode کردن پیامهای رسیده به صورت PDU میپردازیم.

موفق باشید

مهران موسوی
سه شنبه 14 خرداد 1387, 21:26 عصر
اين قسمت اخرش بود ... يا بازم ادامه داره ؟؟؟

خوب پس منتظر ديكدش هستيم ...

raravaice
سه شنبه 14 خرداد 1387, 21:30 عصر
اين قسمت اخرش بود ... يا بازم ادامه داره ؟؟؟

تمومه دیگه ! دیگه چجوری میخوای SMS بفرستی که من نگفتم؟

فقط دریافت و Decode میمونه که اونم باشه برای فردا یا چند روز دیگه.
تا اینجاش ظریف کاری زیاد داره شایدم یه جاهایی سوتی داده باشم همه رو چک کن ببین چیزی از قلم نیافتاده و کار میکنه.

تا بعد;)

موفق باشید

مهران موسوی
چهارشنبه 15 خرداد 1387, 05:28 صبح
این عدد برابر میشه با : تعداد کل بایتهای ایجاد برای هر پارت - بایت شمارش شماره مرکز منهی بایت نوع منهی تعداد بایتهایی که شماره مرکز پیام رو تشکیل میده.

مثلا برای مثالی که تو قسمت بالا گفتم طول پارت 1 و 2 و 3 برابر میشه با 153 و طول پارت 4 برابر میشه با 25raravaice جان در رابطه با اين قسمت يكم مفصل تر توضيح بده ( مثل قسمتهاي قبلي ) اگه يك مثال عملي هم ازش بزاري كه محشر ميشه ..

raravaice
چهارشنبه 15 خرداد 1387, 10:46 صبح
در رابطه با اين قسمت يكم مفصل تر توضيح بده ( مثل قسمتهاي قبلي ) اگه يك مثال عملي هم ازش بزاري كه محشر ميشه .

شما بیا تعداد کل کاراکتر های ایجاد شده برای هر پارت پیام رو بشمار بعد تقسیم بر 2 کن که تعداد بایتهای بسته پیامت مشخص بشه ("هر جفت دوتایی ما یک بایت بود دیگه") حالا از اول پیام رو تا اونجایی که شماره مرکز پیام تموم میشه بشمار و تعداد بایتها رو از این کم کن.

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



079189390500410071000B819053214365F70008FF0B060804 8F1C040406450645


اینجا تعداد کل کاراکتر هامون شده 66 که تقسیم بر 2 یعنی 33 بایت داریم اگر دقت کنی 8 بایت رو شماره مرکز پیام به خودش تخصیص داده "دقت کن بایت" پس 33 منهی 8 برابر میشه با 25 که این 25 همون طول دستور AT ما هست.

موفق باشید

noorsoft
چهارشنبه 15 خرداد 1387, 10:51 صبح
دوستان از زحمات همه ممنون من یکسری برنامه مفید آماده کردم در حال ترجمه یک منبع بسیار کامل و جامع PDf هستم که تو این تاپیک بزارم

همینطور که همه دوستان میدونن شما در PDU میتونین خیلی از قسمتها را وارد نکنین پس شناسایی و از کد درآوردن اینگونه پیامها بسیار مشکه برای همین داشتن یک منبع همراه با سورس کد های اون قسمت با زبانهای VB6 .nte c# فکر کنم مفید باشد

برای توضیح بشتر این را بگم که ممکنه شما شماره مرکز فرسنتده یا زمان طول عمر پیام و ... دیگه را در PDU نداشته باشین

باز هم از همکاری دوستان سپاسکزارم

مهران رسا
چهارشنبه 15 خرداد 1387, 12:10 عصر
بچه ها یه چیزی بگم ؟!!

من 40% مطالب رو بیشتر نگرفتم ...

چرا از پایه توضیح نمیدین ؟!!! هنوز هیچی نشده مبحث پرید روی Codeing و Decoding !

raravaice
چهارشنبه 15 خرداد 1387, 13:54 عصر
بچه ها یه چیزی بگم ؟!!

من 40% مطالب رو بیشتر نگرفتم ...

چرا از پایه توضیح نمیدین ؟!!! هنوز هیچی نشده مبحث پرید روی Codeing و Decoding !

پایه یعنی از کجا!؟

من سورس این کار رو با vb.net دارم و توی 2 یا 3 تا از تاپیک های همین سایت هم گزاشتم ، من برای این قسمت به قسمتش کردم که فکر کردم منظور noorsoft عزیز همینه ولی ظاهرا منظور ایشون سورس بوده که اگر تمایل داشته باشید اونو میزارم و دیگه مبحث Decode کردن رو بازش نمیکنم.

موفق باشید

مهران رسا
چهارشنبه 15 خرداد 1387, 16:17 عصر
سلام .

ببخشید مثل طلبکار ها حرف زدم :خجالت:

دستتون درد نکنه واقعاً کارتون حرف نداشت . وای که چقدر این مبحث جالبه .

من یک برداشت کلی از ارسال sms از طریق کامپیوتر داشتم :
ممنون میشم صحیح بودن برداشت من رو اعلام کنین .

این عملیات از دو بخش اصلی تشکیل میشه :

تبدیل اطلاعات به دستورات قابل فهم برای گوشی ...
ارسال اطلاعات تبدیل شده از طریق پورت COM به گوشی تلفن همراه (در VB از طریق کنترل MsCom )
اون قسمت اول رو به خوبی متوجه شدم (Coding و Decoding) .
منتها هنوز نحوه ارسال اطلاعات کد شده به گوشی رو نمی دونم ... (در VB) .

ممنون میشم یه توضیح مفصل در این مورد بدید .

باز هم ممنونم . :لبخندساده:

مهران رسا
چهارشنبه 15 خرداد 1387, 16:27 عصر
ببخشید سوالی که برای من پیش اومده اینه که چرا شماره تلفن مرکز پیام باید نوشته بشه ؟!!
مگه دستورات به گوشی ارسال نمیشن ؟! پس چه نیازی به این کار هست ؟

مهران موسوی
چهارشنبه 15 خرداد 1387, 16:32 عصر
نه بابا ... سورس به چه دردي ميخوره ... من خودم اون رو گذاشتم ... صفحه ي قبل رو نگاه كن من هزار تا سورس گذاشتم ... ولي ادم خودش بفهمه و خودش از روي اصول بنويسه بدون شك بهتره .... noorsoft عزيزهمه ي اونا رو جمع كرده توي يك پست كه توي صفحه ي قبل هست ... اوني كه با VB.NET هست رو هم گذاشتم ...

raravaice جان لطفا بحث ديكدينگ هم بگو كه يك مرجع كامل باشه ... در كنار اون سورسها رو هم رد و بدل ميكنيم ... بي صبرانه منتظرم ...

.M8SPY. جان از اين پايه تر نميشه ... شما هرچقدر هم با پورت كار كني توي اين قسمتش كه اصل موضوع هست گير ميكني ... پس دندون روي جيگر بزار و اين قسمت رو خوب گوش كن بعدا به پورت هم ميرسيم و از raravaice عزيز ممنون ميشي كه اين مبحث رو جلوتر گفت ....


يا حق ...

مهران موسوی
چهارشنبه 15 خرداد 1387, 16:35 عصر
ببخشید سوالی که برای من پیش اومده اینه که چرا شماره تلفن مرکز پیام باید نوشته بشه ؟!!
مگه دستورات به گوشی ارسال نمیشن ؟! پس چه نیازی به این کار هست ؟ما از گوشي به عنوان GSM استفاده ميكنيم و داريم مستقيما با GSM اون كار ميكنيم .. پس ربطي به گوشي نداره و ما بايد همه ي ريزه كاري ها رو در PDU بيان كنيم ...


اون قسمت اول رو به خوبی متوجه شدم (Coding و Decoding)Decoding رو كه هنوز نگفته و منتظريم ... چه جوري متوجه شدي ؟؟؟؟ :متفکر:

noorsoft
چهارشنبه 15 خرداد 1387, 17:20 عصر
ببخشید سوالی که برای من پیش اومده اینه که چرا شماره تلفن مرکز پیام باید نوشته بشه ؟!!
مگه دستورات به گوشی ارسال نمیشن ؟! پس چه نیازی به این کار هست ؟

شما مجبور نیستید شماره مرکز را در PDU قرار بدید میتونین به جای اون 00 را وارد کنید

مهران موسوی
چهارشنبه 15 خرداد 1387, 17:26 عصر
خوب اگه 00 قرار بديم چي ميشه ؟؟؟ خودش جايگزين ميكنه ؟؟

noorsoft
چهارشنبه 15 خرداد 1387, 17:27 عصر
نه بابا ... سورس به چه دردي ميخوره ... من خودم اون رو گذاشتم ... صفحه ي قبل رو نگاه كن من هزار تا سورس گذاشتم ... ولي ادم خودش بفهمه و خودش از روي اصول بنويسه بدون شك بهتره .... noorsoft عزيزهمه ي اونا رو جمع كرده توي يك پست كه توي صفحه ي قبل هست ... اوني كه با VB.NET هست رو هم گذاشتم ...

raravaice جان لطفا بحث ديكدينگ هم بگو كه يك مرجع كامل باشه ... در كنار اون سورسها رو هم رد و بدل ميكنيم ... بي صبرانه منتظرم ...

.M8SPY. جان از اين پايه تر نميشه ... شما هرچقدر هم با پورت كار كني توي اين قسمتش كه اصل موضوع هست گير ميكني ... پس دندون روي جيگر بزار و اين قسمت رو خوب گوش كن بعدا به پورت هم ميرسيم و از raravaice عزيز ممنون ميشي كه اين مبحث رو جلوتر گفت ....


يا حق ...

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

چند مثال : ما در GSM 9 کارکتر داریم که کدهاشون با کد اصلیشون فرق میکنه
یا توضیحاتی در مورد User Data Header (UDH) و..... بیان نشده

در ضمن هدف اصلی من گذاشتن سورس نیست در واقع قسمتهایی را که توضیح دادم برنامه نویسی شو هم گفتم

مهران موسوی
چهارشنبه 15 خرداد 1387, 17:45 عصر
اقا مهران سورسهایی که من دارم ازش حرف میزنم با سورسهایی که شما از Codeproject دانلود کردی فرق دارهnoorsoft جون ازون حرفا زدي ها ... مشكل اينه كه هيچ كدوم كامل نبودن .. من يك چيزي كامل ميخواستم كه ظاهرا هر چي گشتم وجود نداشت .. البته خدوم چند تا از بهترين هاش رو انتخاب كردم و دارم سه تا رو يكي ميكنم و ضعفهاشون رو ميگيرم تا هيچ مشكلي نداشته باشه ... اين كه خودم ننوشتم اين بود كه اطلاعات كامل نداشتم وگرنه در زبان برنامه نويسي مشكلي ندارم و حتي اگه با اسمبلي هم باشه براي من فرقي نداره ....

منتظر گفته هاي شما هم هستيم .. انشاالله كه اين رفرنست واقعا به مرحله ي اجرا برسه و ما ببينيمش ... تا كي اماده ميشه به نظرت ؟؟؟

مهران موسوی
چهارشنبه 15 خرداد 1387, 19:04 عصر
يك سورس كد مربوط به ويندوز موبايل رو با هزار تا زور و زحمت گير اوردم ... قابليت ارسال پيام فارسي رو به گوشي هايي كه فارسي قبول نميكردند اظافه ميكرد .... خوب مطالعه كردمش ... noorsoft راست ميگفت اصلا اونجا كد اسكي نيست كه ... اصلا بعضي كاراكرتها كدهاي عجيب غريبي دارن .. يك قسمت از اون سورس فقط قسمت ثابتهاي كاراكترهاش بود .... يك قسمت براي خوندن زمان ارسال بود ... خيلي پيچيده تر از اوني بود كه به نظر ميرسيد ... دارم به C++ ترجمش ميكنم ... بلاخره يك چيز كامل پيدا كردم خيالم راحت شد ... بعد به صورت DLL درش ميارم و ازش توي كارم استفاده ميكنم ... جالبرتين قسمتش اينجاست كه پيامهاي چند پارتي هم توليد ميكنه ... همين الان باهاش يك پيام 4 پارتي توليد كردم و فرستادم ... درست كار ميكرد ....

noorsoft
چهارشنبه 15 خرداد 1387, 23:03 عصر
noorsoft جون ازون حرفا زدي ها ... مشكل اينه كه هيچ كدوم كامل نبودن .. من يك چيزي كامل ميخواستم كه ظاهرا هر چي گشتم وجود نداشت .. البته خدوم چند تا از بهترين هاش رو انتخاب كردم و دارم سه تا رو يكي ميكنم و ضعفهاشون رو ميگيرم تا هيچ مشكلي نداشته باشه ... اين كه خودم ننوشتم اين بود كه اطلاعات كامل نداشتم وگرنه در زبان برنامه نويسي مشكلي ندارم و حتي اگه با اسمبلي هم باشه براي من فرقي نداره ....

منتظر گفته هاي شما هم هستيم .. انشاالله كه اين رفرنست واقعا به مرحله ي اجرا برسه و ما ببينيمش ... تا كي اماده ميشه به نظرت ؟؟؟

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

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

noorsoft
چهارشنبه 15 خرداد 1387, 23:07 عصر
خوب اگه 00 قرار بديم چي ميشه ؟؟؟ خودش جايگزين ميكنه ؟؟


دقیقا یکی از ظرافتهای PDU تو همینه که اگر قرار باشه شما با دستورات AT شماره مرکز را بدست بیاری و بعد دوباره در PDU وارد کنی میتونی 00 را وارد کنی که بصورت خودکار کامل میشه
این روش چند حسن داره اولیش اینکه کد کردن سریع تر و راحتتره دوم اگه شما سیم کارت را عوض کنید دیگه مهم نیست از چه اپراتوری استفاده کنید (همراه اول - ایرانسل - تالیا و ...)

مهران موسوی
پنج شنبه 16 خرداد 1387, 02:09 صبح
بچه ها من كار گرد اوريم تموم شد و از تركيب بهترين نمونه ها بهترين چيز رو براي خودم نوشتم ...

فقط به چند تا نكته برخورد كردم كه لازم دونستم ذكر كنم ... اون چيزهايي كه دوست خوبمون اقاي raravaice ذكر كردن براي Encode كردن كافي بوده .. و تقريبا كامل بود ... يعني همين مطالب براي ارسال كفايت ميكنه ولي بر Decode كردن ماجرا فرق داره و يك قسمت هم براي زمان دريافت وجود داره كه بايد ذكر بشه .. همچنين چند تكنيك هم وجود داره كه بايد ذكر بشه ...

از raravaice عزيز ميخوام كه حرفاي گفته شده رو به دل نگيره و به چشم برادري ببينه ...

همچنين از raravaice جان ميخوام به بحث ادامه بده و Decode رو هم ذكر كنه تا يك لطفي به دوستاني كرده باشه كه در اينده نياز به يك منبع دارن ... بدون يقين گفته هاي ايشون بعد ها بدرد افرادي ميخورن ...

noorsoft
پنج شنبه 16 خرداد 1387, 06:32 صبح
برای انکدینگ ابتدا شما باید نوع پیام را تشخیص بدین که میتونه یکی از انواع زیر باشه
SMS RECEIVED
SMS STATUS_REPORT
SMS SUBMIT
EMS RECEIVED
EMS SUBMIT
بعد از تشخیص شروع به خواندن پیام با پارامترهای موجود در نوع پیام میکنیم
برای تشخیص نوع پیام FirstOctet پیام را که در واقع همون دو بایت بعد از شماره مرکز تلفن هستند را بخونید
دو بیت آخر برای ما مهمه که در واقع همهون عدد 3 میشه 00000011
به اضافه بیت 7 تم که 64 میشه 01000000
اگه بیت اول و دوم و هفتم 1 باشن 010000011 نوع پیام ما EMS SUBMIT میشه در غیر این صورت شما
عدد دو بیت آول و بیت هفتم را با هم جمع کنید تا نوع پیام مشخص بشه
که با این حساب
SMS RECEIVED = 0
SMS STATUS REPORT = 2
SMS SUBMIT = 1
EMS RECEIVED = 64
EMS SUBMIT = 65
بدست میاد

مهران رسا
پنج شنبه 16 خرداد 1387, 11:06 صبح
Decoding رو كه هنوز نگفته و منتظريم ... چه جوري متوجه شدي ؟؟؟؟ :متفکر:

منظورم روش کلی کار بود :لبخندساده:

من بی صبرنامه منتظر ادامه آموزش این مبحث هستم .

raravaice
پنج شنبه 16 خرداد 1387, 11:24 صبح
از raravaice عزيز ميخوام كه حرفاي گفته شده رو به دل نگيره و به چشم برادري ببينه ...

نه برادر تریپ نیامدم دیروز داشتم مشغله عقب افتاده 2 روز پیش رو انجام میدادم.;)

در مورد اینکه گفته های من هم کامل نیست تماما حق با برادر Noorsoft هست ولی نکته ای که اینجا اهمیت داره اینه که این داستان PDU و GSM سر دراز داره و نمیشه با 2 یا 3 تا پست کامل توضیحش بدی.این مسئله جاش تو کتاباست.
مثلا توی اون بخشی که راجع به پروتکلها بود و من فقط گفتم از 00 استفاده کنید و وارد بحث پروتکلها نشدم چون متاسفانه ما فقط میتونیم از :
Short Message
استفاده کنیم و هیچ وقت teletex و Internet Electronic Mail و Videotex و چند مورد دیگه به کارمون نمیاد و اصلا لازم نیست بدونیم چیه و اگر هم بدونیم فقط یه تئوری میتونیم ازش داشته باشیم و در عمل هیچ کار آزمایشی هم نمیتونیم انجام بدیم.
---------------------------------------------------------------------------
Decode پیام های دریافت شده از فرمت PDU به Text از پست بعد.;)

موفق باشید

noorsoft
پنج شنبه 16 خرداد 1387, 12:42 عصر
ادامه بحث انکدینگ
قبل از ادامه این را بگم با توضیحاتی که تا حالا جناب raravaice دادن از اینجا به بعد مطالبی که مشابه هستند را فقط به اونها اشاره میکنیم مثل کد کردن شماره مرکز و ...

بعد از مشخص شدن نوع پیام دریافتی شروع به از انکد کردن Pdu میکنیم به این صورت که
اگه پیام شما از نوع SMS RECEIVED باشه باید به این صورت PDU را از کد دربیارین
SCAddressLength دو بایت مشخص کننده طول شماره مرکز
SCAddressType دو بایت نوع شماره مرکز (81 -91)
SCAddressValue به اندازه طول که قبلا بدست اوردیم و محتوی شماره تلفن مرکز پس طول را منهای یک ضرب در دو
FirstOctet دو بایت که قبلا گفتم نوع پیام رسیده را مشخص میکنه در واقع از این پارامتر ما می فهمیم چطور باید PDU را انکد کنیم
SrcAddressLength دو بایت طول شماره فرستنده
SrcAddressType دوبایت نوع شماره فرستنده (91-81)
SrcAddressLength دو بایت طول شماره فرستنده
SrcAddressValue به اندازه طول شماره فرستنده - حاوی شماره فرستنده که دوتایی برعکس کد شده (رجوع به قبل) توجه داشته باشین عدد باید زوج باشه
TP_PID دو بایت حاوی پرتکل که دوستمون توضیح داد
TP_DCS دو بایت که نوع فشرده سازی - کلاس و نوع کدگزاری را مشخص میکنه

بیت 0-1 نشان دهنده کلاسه
00 بدون کلاس
01 کلاس 1
10 کلاس 2
11 کلاس 3

بیت 2-3 نشان دهنده نوع کد گذاریه
00 پیش فرض (7 بیت)
01 8 بیت
10 usc16 (فارسی)
reserve 11

بیت 4 نشاندهنده اینکه پیام کلاس داره یا نه
0 بدون کلاس
1 با کلاس

بیت 5 مشخص کننده فشرده سازیه
0 بدون فشده سازی
1 با فشرده سازی

TP_SCTS چهارده بایت حاوی تاریخ و ساعت ارسال پیام
دو بایت اول حاوی سال پیام که عددش با 2000 باید جمع بشه
دوبایت بعدی مربوط به ماه
دو بایت بعدی مربوط به روز
دوبایت بعدی ساعت
دو بایت بعدی دقیقه
دو بایت بعدی ثانیه
دو بایت بعدی مریوط به Time Zone


TP_UDL دو بایت حاوی طول پیام
TP_UD متن پیام

noorsoft
پنج شنبه 16 خرداد 1387, 13:13 عصر
اگه پیام شما از نوع EMS SUBMIT باشه باید به این صورت PDU را از کد دربیارین
SCAddressLength دو بایت مشخص کننده طول شماره مرکز
SCAddressType دو بایت نوع شماره مرکز (81 -91)
SCAddressValue به اندازه طول که قبلا بدست اوردیم و محتوی شماره تلفن مرکز پس طول را منهای یک ضرب در دو
FirstOctet دو بایت که قبلا گفتم نوع پیام رسیده را مشخص میکنه در واقع از این پارامتر ما می فهمیم چطور باید PDU را انکد کنیم
SrcAddressLength دو بایت طول شماره فرستنده
SrcAddressType دوبایت نوع شماره فرستنده (91-81)
SrcAddressLength دو بایت طول شماره فرستنده
SrcAddressValue به اندازه طول شماره فرستنده - حاوی شماره فرستنده که دوتایی برعکس کد شده (رجوع به قبل) توجه داشته باشین عدد باید زوج باشه
TP_PID دو بایت حاوی پرتکل که دوستمون توضیح داد
TP_DCS دو بایت که نوع فشرده سازی - کلاس و نوع کدگزاری را مشخص میکنه
Tp_VP دو بایت حاوی مدت عمر پیام

TP_UDL دو بایت حاوی طول پیام
TP_UD متن پیام

مهران موسوی
پنج شنبه 16 خرداد 1387, 17:53 عصر
سلام دوستان من گفته ها رو چك كردم و به چند نكته برخورد كردم ...

اوليش گفته ي دوستمون اقاي raravaice هست كه گفته :


قسمت دوم :Status Report یا درخواست گزارش از مرکز پیام

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

اگر نیاز دارید عدد :11
اگر نیاز ندارید عدد:31

با ید به رشته بالا و دقیقا بعد از شماره مرکز پیام اضافه بشه.

موفق باشید

اقا من يه جايي ديدم كه اينا رو برعكس گفته بود ... يعني اگه نياز داريد عدد 31 و اگه نياز نداريد عدد 11 ... خوب برام سوال پيش اومد كه كدوم يكي درست هست .. لطف چك كنيد و ببينيد اونجا درست هست يا ايني كه شما گفتين ؟؟؟

در ضمن اين چيزايي كه noorsoft و raravaice عزيز گفتن براي كد كردن SMS و ديكد كردن اون كافي هست .. توجه كنيد كه من گفتم SMS ولي اگه پيام بخواد به صروت ايميل فرستاده شده باشه ... يعني همون روشي كه جديدا مد شده و بچه ها ازش استفاده ميكنن تا شمارشون نيوفته يا خود ايرانسل استفاده ميكنه تا به جاي شماره ي مركز فرستنده كلمه ي IranCell نمايش داده بشه ... در اين صورت كد و ديكد كردن يكمي فرق ميكنه ...

noorsoft
پنج شنبه 16 خرداد 1387, 18:01 عصر
سلام دوستان من گفته ها رو چك كردم و به چند نكته برخورد كردم ...

اوليش گفته ي دوستمون اقاي raravaice هست كه گفته :


اقا من يه جايي ديدم كه اينا رو برعكس گفته بود ... يعني اگه نياز داريد عدد 31 و اگه نياز نداريد عدد 11 ... خوب برام سوال پيش اومد كه كدوم يكي درست هست .. لطف چك كنيد و ببينيد اونجا درست هست يا ايني كه شما گفتين ؟؟؟

در ضمن اين چيزايي كه noorsoft و raravaice عزيز گفتن براي كد كردن SMS و ديكد كردن اون كافي هست .. توجه كنيد كه من گفتم SMS ولي اگه پيام بخواد به صروت ايميل فرستاده شده باشه ... يعني همون روشي كه جديدا مد شده و بچه ها ازش استفاده ميكنن تا شمارشون نيوفته يا خود ايرانسل استفاده ميكنه تا به جاي شماره ي مركز فرستنده كلمه ي IranCell نمايش داده بشه ... در اين صورت كد و ديكد كردن يكمي فرق ميكنه ...



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

مهران جان ببین وقتی داری شماره تلفن مرکز را انکد میکنی اگه SrcAddressType=D0 باشه شماره مرکز بصورت 7بیت کد شده حاوی شماره است و در غیر اینصورت بصورت 8 بیت کد شده و حاوی نامه (البته بصورت معکوس)


موفق باشید

raravaice
پنج شنبه 16 خرداد 1387, 18:02 عصر
به علت پیچیدگی این مورد با ذکر یک مثال مطلب رو دنبال میکنیم.



0791893905004102240C918939564208
8400008060504112928110C2B0DC1D6E
97DD657B7AEE7ACBCF
این پیامی هست که به دست من رسیده؟!!!

قسمت اول شماره مرکز پیام:

0791893905004102

07 : بدین معنی که شماره مرکز پیام 07H هفت بایت از این متن رو اشغال کرده که بعد از علامت شماره قرار میگیره.

91 : بدین معنی که شماره مرکز پیام بین المللی است و با + شروع شده ("اگر غیر از این بود عدد 81 جایگزین میشد")

893905004102 : این خود شماره مرکز پیام هست ، یه شمارش بزنید! میبینید که محتوای موجود دارای 6 بایت هست که با 1 بایت علاکت میشه 7 بایت یعنی همون عددی که در ابتدا داشتیم.این شماره هم مثل همیشه به صورت جفت معکوس هست که باید برای خوانا شدن معکوس بشه یعنی :
داریم :
89-39-05-00-41-02
که بعد از بر عکس کردن میشه :
98-93-50-00-14-20

پس با احتساب علامت شماره داریم :
+989350001420

خیلی راحت بود مگه نه ;)

24 : این عدد که یکی از پر معنا ترین اعداد برای ما هست 2 تا مسئله رو برامون روشن میکنه.

این عدد چندین حالت میتونه داشته باشه که من عام اون رو بهتون میگم.
04: برای SMS یعنی شخصی که پیام رو فرستاده درخواست گزارش یا همون Delivery نکرده.
24: برای SMSیعنی شخصی که پیام رو فرستاده درخواست گزارش یا همون Delivery کرده.

40: برای EMSیعنی شخصی که پیام رو فرستاده درخواست گزارش یا همون Delivery نکرده.
44: برای EMS یعنی شخصی که پیام رو فرستاده درخواست گزارش یا همون Delivery کرده.

06: پیام فعلی یک گزارش هست.

البته این اعداد همینجوری یلخی هم به دست نیامده و با 0 و 1 شده معادل باینری اونا سرو کار داره. ولی کلیات کار رو تا اینجا داشته باشید کفایت میکنه.

پس تا اینجا ما فهمیدیم که با این عدد به 2 دسته اطلاعات میشه پی برد یکی نوع پیام و دیگری آیا درخواست گزارش از طرف فرستنده ارسال شده یا نه.

حالا میخواهیم دقیق از روی عددی که توی این بایت وجود داره بفهمیم که نوع این کد چیه؟


SMS دریافت شده = 0
SMS ذخیره شده = 1
گزارش دریافت یک پیام = 2
EMS دریافت شده = 64
EMS ذخیره شده = 65

البته اون عدد 24 در مبنای 16 هست و این عدد هایی که من نوشتم تا اینجای کار ربطی به اون 24 نداره و همچنین در مبنای 10 هستند.

اینجا باید عدد 24H رو با 3 و 64 در مبنای 10 And کنیم و هر دو نتیجه رو با هم جمع کنیم یعنی :

36 دسیمال = 24 هگز = 00100100 باینری
AND
3 دسیمال = 3 هگز = 00000011 باینری
جواب1
0 دسیمال = 0 هگز = 00000000 باینری

و داریم

36 دسیمال = 24 هگز = 00100100 باینری
AND
64 دسیمال = 40 هگز = 01000000 باینری
جواب2
0 دسیمال = 0 هگز = 00000000 باینری

که در جمع 2 جواب به عدد 0 میرسیم که میشه : SMS دریافت شده = 0

فقط امیدوارم با AND باینری آشنا باشید!
AND باینری!
0AND0=0
0AND1=0
1AND1=1

پس ما با AND کردن این عدد با 3 و 64 و جمع نتیجه ها به این نکته پی میبری که پیام ما چیه ولی یه نکته که اهمیت داره و کاربرد نداره اینه که:
اگر جواب اول بشه 3 و جواب دوم بشه 64 نوع پیام میشه : EMS ارسال شده

-----------------------------------------------------------------------------

ادامه در پست بعد.

موفق باشید

noorsoft
پنج شنبه 16 خرداد 1387, 18:18 عصر
نتیجه انکدینگ مثال بالا



0791893905004102240C918939564208


PDU LENGTH IS 16 BYTES
ADDRESS OF DELIVERING SMSC
NUMBER IS : +989350001420
TYPE OF NR. : (0x10) International
NPI : (0x01) ISDN/Telephone (E.164/163)

MESSAGE HEADER FLAGS (0x24)
MESSAGE TYPE : SMS DELIVER
MSGS WAITING IN SC : NO
REQ. STATUS REPORT : YES
USER DATA HEADER : NO UDH
REPLY PATH : NO

ORIGINATING ADDRESS
NUMBER IS : +9893652480
TYPE OF NR. : (0x10) International
NPI : (0x01) ISDN/Telephone (E.164/163)

PROTOCOL IDENTIFIER (0x34)
MESSAGE ENTITIES : TELEMATIC INTERWORKING
PROTOCOL USED : reserved

DATA CODING SCHEME (0x30)
COMPRESSION : ON (acc. TS GSM 03.42)
MESSAGE CLASS : 0 (imm. display)
ALPHABET USED : 7bit default

SMSC TIMESTAMP : INVALID TIMESTAMP

USER DATA PART OF SM
USER DATA LENGTH : 0 septets
USER DATA (TEXT) : <no data>

raravaice
پنج شنبه 16 خرداد 1387, 18:20 عصر
اقا من يه جايي ديدم كه اينا رو برعكس گفته بود ... يعني اگه نياز داريد عدد 31 و اگه نياز نداريد عدد 11 ... خوب برام سوال پيش اومد كه كدوم يكي درست هست .. لطف چك كنيد و ببينيد اونجا درست هست يا ايني كه شما گفتين ؟؟؟کاملا حق با شماست. این از همون سوتی هایی که قبلا بهش اشاره کردم. درستش کردم .
معصوم که نیستم.;)

مرسی از پی گیریت.
----------------------------------------------
noorsoft عزیز قسمت قبلی هنوز کامل تموم نشده و چون باید کم کم شرکت رو ترک کنم نیمه کاره گزاشتمش!;)

تا اینجا من جایی اشتباه کردم؟!


موفق باشید

noorsoft
پنج شنبه 16 خرداد 1387, 18:58 عصر
noorsoft عزیز قسمت قبلی هنوز کامل تموم نشده و چون باید کم کم شرکت رو ترک کنم نیمه کاره گزاشتمش!;)

تا اینجا من جایی اشتباه کردم؟!


موفق باشید


اقا من در قسمت ارسال چند پارتی چند تا مورد رو می خواستم بیشتر توضیح بدین
در واقع من سعی کردم طبق دستور العمل شما یک پیام ارسال کنم و با این موارد روبه رو شدم که برای من سوال شد.




از اونجایی که فرمت ما UTF هست پس در هر پارت حداکثر باید 70 کاراکتر جا بگیره یعنی :

همانطور که گفتم ما 8 بایت سر بار اضافه داریم پس باید بشه.


200 / 66 = 3.03
در واقع اینجا 70منهای 4 شده 66 درسته؟




12. تعداد بایتهای پیام اول = 8B ("چون اینجا به جفت 4 تایی بایتها نیاز داریم پس در کل 70 کاراکتر و 140 بایت داریم و 140 منهی 8 بایت سربار اضافی برابر میشه با 138 که با خود یک بایت شمارش گر میشه 139 که در مبنای 16 برابر میشه با 8B که باید جایگزین بشه ")
140 منهای 8 بایت سربار میشه 132



17.محتوی پیام شامل = [66 بار تکرار (0645) که معادل کد اسکی حرف "م" هست و با یه ضرب ساده در 2 بایت میشه همون 138 بایتی که نیاز داشتیم]

66 ضربدر 4 بایت میشه 132


در کدهایی هم که مثال زدین عدد تصادفی پارت اول با سه پارت دیگه فرق میکنه

مهران موسوی
پنج شنبه 16 خرداد 1387, 21:10 عصر
يه چيزي برام گنگ هستش ... !!!


به نوشته هاي زير دقت كنيد ...

36 دسیمال = 24 هگز = 00100100 باینری
AND
3 دسیمال = 3 هگز = 00000011 باینری
جواب1
0 دسیمال = 0 هگز = 00000000 باینری

و داریم

36 دسیمال = 24 هگز = 00100100 باینری
AND
64 دسیمال = 40 هگز = 01000000 باینری
جواب2
0 دسیمال = 0 هگز = 00000000 باینری

که در جمع 2 جواب به عدد 0 میرسیم که میشه : SMS دریافت شده = 0خوب در اينجا 24 رو به مبناي 10 برديم كه شد 36 و سپس با 3 در مبناي 10 اون رو and كرديم ... حاصلي برابر شد با 0 .

بعد همين عمليات رو براي 64 انجام داديم ... يعني 36 رو بر 64 and كرديم ... كه دوباره حاصل 0 شد .

در نتيجه 0 اول رو با 0 دوم جمع كرديم و حاصل 0 شد .

و بر اساس جدول زير كه خودتون بيان كردين پيام از نوع دريافت شده هست ... ( SMS دريافت شده )



SMS RECEIVED = 0
SMS STATUS REPORT = 2
SMS SUBMIT = 1
EMS RECEIVED = 64
EMS SUBMIT = 65

خوب چيزي كه گنگ هست ايجاست كه شما گفتين :


گر جواب اول بشه 3 و جواب دوم بشه 64 نوع پیام میشه : EMS ارسال شده
خوب اگه جواب اول كه 3 هست و دوم كه 64 هست رو با هم جمع كنيم ميشه 67 ...!! اين عدد در جدولي كه بيان كردين وجود نداره پس چطوري شما ميگين ميشه از نوع EMS ارسال شده ؟؟؟

مهران موسوی
پنج شنبه 16 خرداد 1387, 21:17 عصر
فكر كنم اين يك استثناء باشه ... چون من وقتي داشتم يك سورس رو مطالعه ميكردم اين حالت توش ذكر شده بود ... !!! درست ميگم يا نه ؟؟

raravaice
پنج شنبه 16 خرداد 1387, 23:23 عصر
فكر كنم اين يك استثناء باشهاگر استثناء نبود بهش تاکیدی نداشتم.
-----------------------------------------------------------------------


نقل قول:
از اونجایی که فرمت ما UTF هست پس در هر پارت حداکثر باید 70 کاراکتر جا بگیره یعنی :

همانطور که گفتم ما 8 بایت سر بار اضافه داریم پس باید بشه.


200 / 66 = 3.03
در واقع اینجا 70منهای 4 شده 66 درسته؟حق با شماست منهای 4 شده ! گنگ هست ولی اشتباه نیست!
پ.و : البته ناگفته نمونه که چون من تو بطن مسئله بودم موقع ویرایش یکی 2 تا پاورقی جا انداختم که اینجا میگم اونجا هم ویرایش میکنم.

------------
همانطور که تا الان باید متوجه شده باشید ما بدون احتساب شماره مرکز،شماره گیرنده و بقیه علائم برای متن و محتوای 1 پارت پیام حداکثر 140 بایت جا داریم که شمارش اون دقیقا از بعد از بایت شمارشگر محتوی شروع میشه.

یعنی اگر بر مبنای 8 بیت حساب کنیم 140 کاراکتر داریم و چون در مد DefaultAlphabet برای هر کاراکتر 7 بیت داریم پس کلا میتونیم 160 کاراکتر ارسال داشته باشیم و همچنین به دلیل اینکه در مد UCS2 برای هر کاراکتر 16 بیت داریم یعنی هر کاراکتر 2 بایت پس کلا میتونیم 70 کاراکتر رو ارسال کنیم.

حالا توی مد UCS2 وقتی پیام از 1 پارت بیشتر میشه ما مجبور 7 بایت هدر شامل :(3 بایت کد ثابت، 2 بایت شماره تصادفی ،1 بایت تعداد کل پیامها ،1 بایت شماره پیام فعلی) رو در محتوی پیام بگنجونیم
پس در نتیجه 140 بایت منهای 7 بایت برابر میشه با 133 بایت.
یعنی ما میتونیم 133 بایت از محتوی متن پیام شماره 1 رو اینجا بزاریم اما تو مد UCS2 یه ولی داریم:
توی حالت UCS2 همانطور که گفتم هر کاراکتر 2 بایت داره پس با احتساب 133 بایت فضای خالی که موجود داریم میتونیم 66 کاراکتر و 1 بایت بفرستیم و چون این بایت باقیمانده نیاز به بایت مکمل داره تا تفهیم باشه و اون بایت مکمل بلاجبار توی پارت بعدی قرار گرفته این بایت هم از اینجا حذف میکنیم و به پارت بعدی اضافه میکنیم یعنی ما توی هر پارت پیام UCS2 به صورت مولتی پارت 132 بایت رو جا میدیم که میشه 66 کاراکتر و بیشتر از این امکان نداره.

---------------------------------------------------------------------------------

نقل قول:
12. تعداد بایتهای پیام اول = 8B ("چون اینجا به جفت 4 تایی بایتها نیاز داریم پس در کل 70 کاراکتر و 140 بایت داریم و 140 منهی 8 بایت سربار اضافی برابر میشه با 138 که با خود یک بایت شمارش گر میشه 139 که در مبنای 16 برابر میشه با 8B که باید جایگزین بشه ")
140 منهای 8 بایت سربار میشه 132

نقل قول:
17.محتوی پیام شامل = [66 بار تکرار (0645) که معادل کد اسکی حرف "م" هست و با یه ضرب ساده در 2 بایت میشه همون 138 بایتی که نیاز داشتیم]

66 ضربدر 4 بایت میشه 132کاملا حق با شماست اینی که من اونجا نوشتم الان که دارم میخونمش یه جمله نا مفهومی هست که به طرز وحشتناکی قوانین ریاضی رو زیر پا گذاشته.:قهقهه:
علتش هم اینه که من اون موقع که داشتم تایپ میکردم همزمان تو فکرم داشتم این مسئله ای رو که اینجا گفتم پیش خودم تجزیه تحلیل میکردم که بیانش کنم! بیانش که نکردم هیچ بلکه همه رو با هم قاتی کردم شد مزخرف!:اشتباه:
مرسی از تذکرت
-----------------------------------------------------------

در کدهایی هم که مثال زدین عدد تصادفی پارت اول با سه پارت دیگه فرق میکنهاینم حق با شماست چون من کد پارت اول رو برای جلوگیری از اشتباه با ماشین حساب تشکیل دادم و بقیه رو با نرم افزار این شد که حواسم به این عدد نبود.
------------------------------------
بازهم ممنون از توجه همه دوستان

موفق باشید

raravaice
جمعه 17 خرداد 1387, 00:23 صبح
شماره فرستنده پیام



0791893905004102240C918939564208
8400008060504112928110C2B0DC1D6E
97DD657B7AEE7ACBCF
0C : نمایش دهنده تعداد ارقام شماره فرستنده . توجه : این تعداد شامل علامت شماره نمیشود و منحصرا مربوط به تعداد شماره هست که برابر است با 12 رقمی که با رنگ قرمز علامت گزاری شده.

91: نمایش دهنده علامت شماره (91 بین المللی + و 81 معمولی)

893956420884 : شماره فرستنده به صورت جفت معکوس

پس با تفاسیر فوق داریم:

89-39-56-42-08-84
که میشه:
98-93-65-24-80-48
و با احتساب کد 91 که همون علامت هست شماره فرستنده میشه:

+989365248048

دقت به این نکته اهمیت داره که اگر تعداد ارقام فرد باشه مثل قبل آخرین رقم با F0 جمع شده که باید اینجا در نظر گرفته بشه.

پ.و : این شماره منه ولی توی GSM Modem به سر میبره و جهت مورد خاصی استفاده میشه و در شرایط فعلی هیچ شخصی بهش پاسخگو نیست ، دوستان ارتباط رو از همین تاپیک ادامه بدن.ممنون
با تقدیم احترام

موفق باشید

raravaice
جمعه 17 خرداد 1387, 02:36 صبح
پروتکل ، نوع محتوی پیام ، تاریخ



0791893905004102240C918939564208
8400008060504112928110C2B0DC1D6E
97DD657B7AEE7ACBCF



00 : با یه جهش 1 بایتی از خیر این بایت میگذریم که شامل یه سری اطلاعات جزئی راجع به پروتکل پیام هست.

00 : این بایت نمایش دهنده نوع کد گزاری محتوی پیام هست و همانطور که تو بخش ارسال گفتم برای Default Alphabet داریم 00 و برای UCS2 داریم 08 از روی این بایت متوجه میشیم که محتوی پیام رو چطور باید از حالت کد خارج کنیم.

80605041129281 : تاریخ و زمان که همانند شماره مرکز و شماره فرستنده به صورت جفت معکوس هست.

80 : معکوس 08 که نماینده سال 2008 هست.
60 : معکوس 06 که نماینده شماره ماه هست.
50 : معکوس 05 که نماینده شماره روز هست.
41 : معکوس 14 که نماینده ساعت طی شده از روز هست بر مبنی 24 ساعت یعنی 2 ظهر.
12 : معکوس 21 که نماینده دقیقه هست.
92 : معکوس 29 که نماینده ثانیه هست.
81 : معکوس 18 که نماینده موقعیت زمانی و جغرافیایی بر اساس GTM هست و قانون محاسبه اون یه تقسیم بر 4 میخواد که برای این مثال میشه GTM +4.5 .

موفق باشید

مهران موسوی
جمعه 17 خرداد 1387, 03:17 صبح
raravaice من به يه چيز عجيب غريب خوردم ... با توجه به حرفي كه پايين زدي من اومد كد اسكي م رو گرفتم ... ولي مثل اينكه در زبانهاي مختلف برنامه نويسي با هم فرق دارن ( عجيبه كد اسكي كه يك چيز واحد هست ) مثلا در دلفي وقتي با تابع ord كد اسكيش رو گرفتم جوابش شد 227 و وقتي توي VB اين كار رو كردم جوابش شد 223 و وقتي توي دات نت اين كار رو كردم جوابش شد 227 خوب حالا من 227 رو تبديل به HEX كردم ولي جوابش شد E3 و 645 رو بدست نياوردم ... جريان اين چيه به نظرت ؟؟؟


مثلا معادل اسکی در پایه HEX برای حرف م عدد 645 هست ولی چون برای هر کاراکتر در این مد 4 تا صفر رزرو شده حتما باید صفر سمت چپ گذاشته بشه یعنی برای حرف م داریم 0645

مهران موسوی
جمعه 17 خرداد 1387, 03:38 صبح
raravaice جون مشكل اون اسكي كه با بقيه فرق ميكرد در VB حل شد ... قاطي كرده بود و يه بار بازو بستش كردم درست شد ... الان توي Delphi , C++ , C#, VB , VB.Net امتحان كردم ... همشون كد اسكي م رو برابر با 227 بر ميگردونن ...

مهران موسوی
جمعه 17 خرداد 1387, 04:08 صبح
شايد تا به حال با مطالعه ي موضوعات ارائه شده توسط دوستان تونسته باشين ساخت SMS رو درك كنيد .. از طرفي من هم به نوشته ها دقت ميكردم و قسمتهاي گنگ رو مطرح ميكردم تا دوستان رسيدگي كنن و يك منبع كامل براي فارسي زبانها باشه ...

خوب يك چيز جالب بهتون بگم ... طي اين رفرنس به فكرتون نيوفتاده كه اگه ما خواستيم پياممنون رو دو زبانه بسازيم ... ( مخلوطي از كاراكترهاي فارسي و انگليسي ) بايد چيكار كنيم و چه نوعي رو انتخاب كنيم ...

حتما با خودتون فكر كردين كه ايا چيزي به جز DefaultAlphabet و UCS2 هم وجود داره كه اين نياز ما رو برطرف كنه ... !!!؟؟ :لبخند:

خوب ذكر اين نكته واجب هست كه در صروتي كه شما خواستين ( مخلوطي از كاراكترهاي فارسي و انگليسي ) رو در SMS ساخته شده ي خودتون داشته باشين بايد UCS2 رو انتخاب كنيد ...

نكته ي مهمي بود و چون تا حالا بهش اشاره نشده بود لازم دونستم ذكر كنم :لبخندساده:

يا حق ...

raravaice
جمعه 17 خرداد 1387, 04:23 صبح
raravaice جون مشكل اون اسكي كه با بقيه فرق ميكرد در VB حل شد ... قاطي كرده بود و يه بار بازو بستش كردم درست شد ... الان توي Delphi , C++ , C#, VB , VB.Net امتحان كردم ... همشون كد اسكي م رو برابر با 227 بر ميگردونن ...
حتما با خودتون فكر كردين كه ايا چيزي به جز DefaultAlphabet و UCS2 هم وجود داره كه اين نياز ما رو برطرف كنه ... !!!؟؟ :لبخند:


من به يه چيز عجيب غريب خوردم

از اونجایی که آدم بی نهایت شیطونی به نظر میای و معما رو ظاهرا خیلی دوست داری ، و من هم یکی از مشتاقان مطرح کردن معما هستم دوست دارم این نکته رو برات مبهم بزارم تا دیگه از این سئوالات نکنی.:لبخند:
--------------------
! پسر خوب وقتی داره دم از حرف "م" که یه کاراکتر Unicode هست زده میشه شما باز داری مثل یه کاراکتر ASC باهاش برخورد میکنی و انتظار داری درست جواب بده؟!آخه این انصاف نسبت به این کاراکتر؟:قهقهه:
Unicode دو تا بایت داره یعنی وقتی شما مقدار اسکی اونو میگیری نتیجه فقط بایت اول هست و بایت دوم ندید گرفته میشه. شما احیانا از دستور W اونا استفاده کن که نتیجه درست بشه!
مثلا برای vb.net داریم AscW که جواب میده 1605 و معادل Hex میشه 645.

:چشمک:
شبت بخیر
موفق باشی

noorsoft
جمعه 17 خرداد 1387, 04:28 صبح
شايد تا به حال با مطالعه ي موضوعات ارائه شده توسط دوستان تونسته باشين ساخت SMS رو درك كنيد .. از طرفي من هم به نوشته ها دقت ميكردم و قسمتهاي گنگ رو مطرح ميكردم تا دوستان رسيدگي كنن و يك منبع كامل براي فارسي زبانها باشه ...

خوب يك چيز جالب بهتون بگم ... طي اين رفرنس به فكرتون نيوفتاده كه اگه ما خواستيم پياممنون رو دو زبانه بسازيم ... ( مخلوطي از كاراكترهاي فارسي و انگليسي ) بايد چيكار كنيم و چه نوعي رو انتخاب كنيم ...

حتما با خودتون فكر كردين كه ايا چيزي به جز DefaultAlphabet و UCS2 هم وجود داره كه اين نياز ما رو برطرف كنه ... !!!؟؟ :لبخند:

خوب ذكر اين نكته واجب هست كه در صروتي كه شما خواستين ( مخلوطي از كاراكترهاي فارسي و انگليسي ) رو در SMS ساخته شده ي خودتون داشته باشين بايد UCS2 رو انتخاب كنيد ...

نكته ي مهمي بود و چون تا حالا بهش اشاره نشده بود لازم دونستم ذكر كنم :لبخندساده:

يا حق ...

دقیقا
این کاملا واضحه که اگه شما حتی یک کلمه فارسی هم بنویسید باید با حالت UCS2 استفاده کنید

noorsoft
جمعه 17 خرداد 1387, 04:39 صبح
دوستان من آدمایی پایه تر از شما دو تا ندیدم که این موقع شب بشینین و کارای تحقیقاتی بکنین
حالا که بحث به اینجا رسید صلاح میدونین طریقه ارسال پیام تصویری OTA را هم اینجا داشته باشیم

مهران موسوی
جمعه 17 خرداد 1387, 04:55 صبح
شما دو تا مثل داداشاي من هستين ...

تا كي ما ايراني ها بايد محتاج منابع زبان اصلي باشيم ... چرا نبايد دانسته هاي خودمون رو در اختيار هم بزاريم تا محتاج غربي هايي باشيم كه ما رو وحشي خطاب ميكنن ... چرا خودمون نتونيم .. چرا غرور بچه گانمون رو كنار نزاريم ... دوران پنهان سازي گذشته ... مگه ما چقدر عمر داريم ... دانسته هامون رو كه نميخواييم ببريم اون دنيا .. پس بهتر هست با عزم و اراده همديگه رو ياري كنيم تا هميشه بهترين باشيم ... من تا بتونم كمكتون ميكنم ...


پسر خوب وقتی داره دم از حرف "م" که یه کاراکتر Unicode هست زده میشه شما باز داری مثل یه کاراکتر ASC باهاش برخورد میکنی و انتظار داری درست جواب بده؟!آخه این انصاف نسبت به این کاراکتر؟:قهقهه:
Unicode دو تا بایت داره یعنی وقتی شما مقدار اسکی اونو میگیری نتیجه فقط بایت اول هست و بایت دوم ندید گرفته میشه. شما احیانا از دستور W اونا استفاده کن که نتیجه درست بشه!
مثلا برای vb.net داریم AscW که جواب میده 1605 و معادل Hex میشه 645.
واي خدا ... عجب نكته اي بود ... هر چند ساعت 5 صبح مخم نميكشيد و چشما همه چي رو PDU ميبينه ... به مغزم حق ميدم كه قاطي كنه .....


ممنون ... خدا پشتو پنهاهتون باشه ... يا حق ...

noorsoft
جمعه 17 خرداد 1387, 04:58 صبح
به این برنامه یک نگاهی بکنید البته این را هم بگم من اون را خیلی وقت پیشا نوشتم.
http://www.noorsoft.com/products/smspic.zip

raravaice
جمعه 17 خرداد 1387, 05:02 صبح
طریقه ارسال پیام تصویری OTA را هم اینجا داشته باشیم

1.اگر ارسال و دریافتش رو با هم بگی که خیلی عالیتر و کاملتره.
2.اون جریان متن به جای شماره که بهش اشاره کردی حتما بحثش رو بیار وسط ! برام جالبه ، چون حقیقت اینکه من چند ساله پیش که دورو بر موبایل میچرخیدم و کار الکترونیک میکردم تا جایی پیش رفتم که خود دیتای سیم کارت رو کپی کردم رو IC وازش به عنوان یه سیم جدید استفاده کردم ولی این کاری که میگی رو هیچ وقت نتونستم از سمت کلاینت انجام بدم.

3.مسئله EMS و MMS هم سر فرصت حتما باید یکی از بحث های ادامه دهنده باشه.


پ.و : تعلل من توی دادن پست اینه که صدای سوتی های قبلی در بیاد و زیاد ازشون دور نشم.قبلا از همگی به خاطر این مکث های کوتاه مدت پوزش میخوام

شب شما هم به خیر باشه

noorsoft
جمعه 17 خرداد 1387, 05:08 صبح
ارسال فایل OTA

فکر کنم مثل روند قبل روی یک مثال توضیح بدم بهتره



01 06 2C 1F 2A 61 70 70 6C 69 63 61 74 69 6F 6E
2F 78 2D 77 61 70 2D 70 72 6F 76 2E 62 72 6F 77
73 65 72 2D 73 65 74 74 69 6E 67 73 00 81 EA 01
01 6A 00 45 C6 06 01 87 12 49 01 87 13 11 03 31
32 33 2E 31 32 33 2E 31 32 33 2E 31 32 33 00 01
87 14 61 01 87 1C 11 03 6D 6D 73 63 2E 6E 6F 6B
69 61 6E 6F 6B 69 61 6E 6F 6B 2E 63 6F 6D 00 01
87 22 70 01 01 86 7C 11 03 68 74 74 70 3A 2F 2F
6E 6F 6B 69 61 6E 2E 6F 6B 69 61 6E 6F 6B 69 61
6E 6F 6B 69 61 2E 63 6F 6D 3A 38 30 30 32 2F 00
01 C6 08 01 87 15 11 03 4D 4D 53 20 4E 4F 4B 49
41 20 47 50 52 53 00 01 01 01




01 = Push ID
06 = PDU Type (push)
2C = Headers length (content type + headers)
1F 2A Value length
61 70 70 6C 69 63 61 74 69 6F 6E 2F 78 2D 77 61 70 2D 70 72 6F 76 2E 62 72 6F 77 73 65 7
2D 73 65 74 74 69 6E 67 73 = MIME-Type= application/x-wap-prov.browser-settings
00 = end inline string
81 EA = Char set (UTF-8 short int.)
01 01 = Version WBXML 1.1
6A = Char set (UTF-8)
00 = String table length
45 = CHARACTERISTIC-LIST with content
C6 = CHARACTERISTIC with content and attributes
06 = TYPE=ADDRESS
01 = END PARMeter
87 = PARM with attributes
12 = NAME=BEARER
49 = VALUE=GPRS
01 = END PARMeter
87 = PARM with attributes
13 = PROXY
11 = VALUE
03 = Inline string
31 32 33 2E 31 32 33 2E 31 32 33 2E 31 32 33 = 123.123.123.123
00 = end inline string
01 = END PARMeter
87 = PARM with attributes
14 = PORT
61 = token for port number 9201
01 = END PARMeter
87 = PARM with attributes
1C = GPRS_ACCESSPOINTNAME
11 = VALUE
6D 6D 73 63 2E 6E 6F 6B 69 61 6E 6F 6B 69 61 6E 6F 6B 2E 63 6F 6D = mmsc.nokianokianok.com
00 = end inline string
01 = END PARMeter
87 = PARM with attributes
22 = NAME=PPP_AUTHTYPE
70 = VALUE=PAP
01 = END PARMeter
01 = END PARMeter
86 = CHARACTERISTIC-LIST with attributes
C7 = TYPE=MMSURL
11 = VALUE
68 74 74 70 3A 2F 2F 6E 6F 6B 69 61 6E 2E 6F 6B 69 61 6E 6F 6B 69 61
6E 6F 6B 69 61 2E 63 6F 6D 3A 38 30 30 32 2F = http://nokian.okianokianokia.com:8002/
00 = end inline string
01 = END PARMeter
C6 = CHARACTERISTIC with content and attributes
08 = TYPE=NAME
01 = END PARMeter
87 = PARM with attributes
15 = NAME=NAME
11 = VALUE
03 = Inline string
4D 4D 53 20 4E 4F 4B 49 41 20 47 50 52 53 = MMS NOKIA GPRS
00 = end inline string
01 = END PARMeter
01 = END PARMeter
01 = END PARMeter

noorsoft
جمعه 17 خرداد 1387, 05:13 صبح
برای تفسیر PDU


00 51 00 0C 91 53 48 74 38 00 00 00 F5 AA 8C


00 = NO SMSC ADDRESS PRESENT
51 = MESSAGE HEADER FLAGS (0x51)
Message type: SMS Submit
Reject duplicates: No
Validity: Relative
Reply path: No
UDH present: Yes
Req. status report: no
00 = Message reference: 0 (0x00)
0C = Length of TPDU
91 53 48 74 38 00 00 = Recipient number (+358447830000)
00 = Protocol identifier
F5 = Message class, data coding cheme (8-bit)
AA = Validity period
8C = Length of data

noorsoft
جمعه 17 خرداد 1387, 05:15 صبح
برای UDH


0B 05 04 C3 4F 00 00 00 03 C2 02 01




0B = Length of the UDH
05 = Port addressing (16 bit)
04 = Information element length (bytes)
C3 4F = Destination port (49999d)
00 00 = Source port (0d)
00 = Concatenation 8-bit reference
03 = Information element length (bytes)
C2 = SMS reference number
01 = Sequence number
02 = Number of messages in the concatenation

noorsoft
جمعه 17 خرداد 1387, 05:18 صبح
این هم طریقه ارسال



at+cmgf=0
OK
at+cmgs=154
>0051000C9153487438552200F5AA8C0B0504C34F00000003C2 020101062C1F2A6170706C696
36174696F6E2F782D7761702D70726F762E62726F777365722 D73657474696E67730081EA0101
6A0045C6060187124901871311033132332E3132332E313233 2E313233000187146101871C11
036D6D73632E6E6F6B69616E6F6B69616E6F6B2E636F6D0001 8722700101867C1103687474703
A2F2F
+CMGS: 42

OK
at+cmgs=84
>0051000C9153487438000000F5AA460B0504C34F00000003C2 02026E6F6B69616E2E6
F6B69616E6F6B69616E6F6B69612E636F6D3A383030322F000 1C60801871511034D4D5
3204E4F4B4941204750525300010101
+CMGS: 43
OK

مهران موسوی
جمعه 17 خرداد 1387, 05:21 صبح
داداش noorsoft اون ماجراي نمايش دادن يك متن به جاي شماره تلفن رو توي اولويت قرار بده كه مشتاق شدم بدونم موضوع از چه قراره ...

noorsoft
جمعه 17 خرداد 1387, 05:26 صبح
البته یادم رفت بپرسم آیا با فورمت این فایل آشنایی دارین یا نه
این تصاویر 72*28 هستند و هر بیت نشاندهنده یک پیکسله
5 بیت اول مشخصات فایل و طول و عرض تصویر
و بقیه نقش بیت یا همون اصل تصویره که از آخر به اول در فایل ذخیره شده

noorsoft
جمعه 17 خرداد 1387, 05:32 صبح
نمونه کد را براتون میزارم امیدوارم گویا باشه
یک Picturebox روی فرمتون بزارین و یک File



Autoredraw=true
scalemode=3 'pixel
این هم زیر برنامش



Private Sub OpenOta()
Dim a As String
Dim i As Integer
Dim h As Integer, w As Integer
Dim j As Integer
Dim X As Integer, Y As Integer

Open File1.Path & "\" & File1.FileName For Binary As #1
a = Input$(256, 1)

On Error GoTo err

w = Asc(Mid(a, 2, 1))
h = Asc(Mid(a, 3, 1))
X = w
Y = h

Picture1.ForeColor = vbBlack
Picture1.Picture = LoadPicture()
Picture1.Cls

For i = 256 To 5 Step -1
j = Asc(Mid(a, i, 1))

If j And 1 Then Picture1.PSet (X, Y)
X = X - 1

If j And 2 Then Picture1.PSet (X, Y)
X = X - 1

If j And 4 Then Picture1.PSet (X, Y)
X = X - 1

If j And 8 Then Picture1.PSet (X, Y)
X = X - 1

If j And 16 Then Picture1.PSet (X, Y)
X = X - 1

If j And 32 Then Picture1.PSet (X, Y)
X = X - 1

If j And 64 Then Picture1.PSet (X, Y)
X = X - 1

If j And 128 Then Picture1.PSet (X, Y)
X = X - 1

If X = 0 Then
X = w
Y = Y - 1
End If

Next

err:
Close
End Sub

noorsoft
جمعه 17 خرداد 1387, 08:24 صبح
داداش noorsoft اون ماجراي نمايش دادن يك متن به جاي شماره تلفن رو توي اولويت قرار بده كه مشتاق شدم بدونم موضوع از چه قراره ...


راستش هنوز نمی دونم گفتن اینجور مطالب درسته یا نه
همونطور که میدونید بعضی از آدمها جنبه ندارین (دور از جان شما) و شروع به سوء استفاده کردن میکنن و ممکن برای خودشون و دیگران ایجاد مزاحمت کنن
چون با این روش شما میتونین مثلا به عنوان پلیس و ... به افراد پیام بفرستید

حالا نمی دونم چکار کنم توضیح بدم یا نه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ :متفکر:
ولی این را بگم که این کار فقط SMS-Submit-PDU قابل انجامه چون آدرس اصلی (OA) توسط SMSC داده میشه

مهران موسوی
جمعه 17 خرداد 1387, 11:49 صبح
اين روش رو بگو چون مفيد واقع ميشه ... مثلا ما به جاي شماره تلفن ميتونيم اسم شركتمون رو بندازيم ... اينجوري خيلي با كلاس تر هستش ....

در ضمن اين روش توسط گوشي هم امكان پذيره و اگه كسي بخواد سوء استفاده كنه از راه گوشي هم ميتونه اين كار رو كنه ... روشش هم با گوشي خيلي سادست .... فقط اگه ساختنش رو توضيح بديد خيلي خوب ميشه ...

raravaice
جمعه 17 خرداد 1387, 16:41 عصر
رمز گشایی محتوی پیام



0791893905004102240C918939564208
8400008060504112928110C2B0DC1D6E
97DD657B7AEE7ACBCF
اول از همه دوستان این نکته رو یاد آور میشم که در مد Default Alphabet برای هر کاراکتر هفت بیت داریم همانطور که توی قسمت ارسال توصیف شده.

10 : این عدد که در مبنای Hex هست و در مبنی Dec معادلی برابر 16 داره میگه از بعد از من تعداد 16 بایت وجود داره که تشکلیل دهنده 16 کاراکتر ما هستند.

C2B0DC1D6E97DD657B7AEE7ACBCF : محتوی پیام اینجاست که ما باید به زبان قابل تشخیص خودمون تبدیلش کنیم.

نکته : با یه نگاه کوچیک و شمارش تعداد بایتهای محتوای پیام به عدد 14 میرسیم در حالی که بایت شمارشگر به ما عدد 16 رو داده! در نظر داشته باشید که عدد شمارش گر در اصل داره میگه شما از این کد باید 16 بایت رو خارج کنید.

رمز گشایی محتوی پیام . مرحله به مرحله.

1. اصل پیام
C2B0DC1D6E97DD657B7AEE7ACBCF


2.جدا سازی بایت به بایت برای آسودگی کار در محاسبات دستی و این کار در برنامه شما نیازی نیست که صورت بگیره.

C2-B0-DC-1D-6E-97-DD-65-7B-7A-EE-7A-CB-CF

3.اگر یادتون باشه ما توی مرحله ارسال چند بار محتوی رو برعکس کردیم که حالا اینجا باید همه اونا رو جبران کنیم.پس داریم :

C2-B0-DC-1D-6E-97-DD-65-7B-7A-EE-7A-CB-CF

که بعد از بر عکس شدن میشه :

CF-CB-7A-EE-7A-7B-65-DD-97-6E-1D-DC-B0-C2

دقت کنید که فقط محل بایت ها عوض میشه و در عدد هیچکدام از بایتها تغییری صورت نگرفته

4.نتیجه مر حله 3 باید به معدل باینری هر بایت تبدیل بشه یعنی داریم :
CF-CB-7A-EE-7A-7B-65-DD-97-6E-1D-DC-B0-C2

که میشه :


11001111-11001011-01111010-11101110-01111010-01111011-01100101-11011101-10010111-01101110-00011101-11011100-10110000-11000010


پ.و : به علت کمبود رنگ فقط 2 بایت اول رو نشانه گزاری کردم که حق مطلب ادا بشه.


5.حالا در وضعیت فعلی ما 14 بایت داریم که ضربدر 8 میشه 112 بیت و تعداد بایتی که شمارشگر به ما اعلام کرده 16 بوده و همچنین در این مد هر 7 بیت 1 کاراکتر هست پس کل بت هامون رو باید به 16 قسمت 7 بیتی قسمت کنیم.
پس میشه :

1100111-1110010-1101111-0101110-1110011-1101001-1110110-1100101-1101110-1100101-1101101-1100001-1101110-1110010-1100001-1000010


6.نتیجه ای که توی این مرحله به دست آمد حالا باید دوباره برعکس بشه یعنی نتیجه بالا بشه :


1000010-1100001-1110010-1101110-1100001-1101101-1100101-1101110-1100101-1110110-1101001-1110011-0101110-1101111-1110010-1100111



7.حالا اینارو 7 بایت 7 بایت همینطوری که هستند به معادل Asc اونا تبدیل کنید تا کلمه زیر رو داشته باشین.


Barnamenevis.org


خیلی راحت بود مگه نه؟!;)

فقط یه نکته که همونطور که قبلا گفتم برای @ هفت بیت 0 داریم "000000" که باید اینو خودتون با یه شرط تشخیص بدین.


موفق باشید

noorsoft
جمعه 17 خرداد 1387, 16:49 عصر
اين روش رو بگو چون مفيد واقع ميشه ... مثلا ما به جاي شماره تلفن ميتونيم اسم شركتمون رو بندازيم ... اينجوري خيلي با كلاس تر هستش ....

در ضمن اين روش توسط گوشي هم امكان پذيره و اگه كسي بخواد سوء استفاده كنه از راه گوشي هم ميتونه اين كار رو كنه ... روشش هم با گوشي خيلي سادست .... فقط اگه ساختنش رو توضيح بديد خيلي خوب ميشه ...


دوستان بزارین اول بحث اصلی تموم بشه من قول میدم این کار را انجام بدم
آقا مهران عجله نکن این بحث را بصورت کامل برات توضیح میدم و یه نکته دیگه این کار با گوشی موبایل هم قابل انجامه و اینکه این امکان برای اولین بار توسط شرکت نوکیا ایجاد شده من هم از روی کنجکاوی روش کار کردم

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

من چیزهای دیگه ای هم براتون دارم
1- ارسال و دریافت Vcart Business یا همون شماره های تلفن
2- ارسال و دریافت Ring Tone
3- لوگوهای اپراتور
4- ارسال یاداشتهای روزانه

شرمنده دیگه چیزی بلد نیستم

مهران رسا
جمعه 17 خرداد 1387, 21:07 عصر
ضمن تشکر از تمامی دوستانی که در این تاپیک زحمت می کشن .
2 تا سوال داشتم ...

سوال اول اینکه کلاً چند نوع روش برای ارسال sms داریم ؟!! و سوال دوم : GSM چیه ؟!

noorsoft
جمعه 17 خرداد 1387, 22:54 عصر
ضمن تشکر از تمامی دوستانی که در این تاپیک زحمت می کشن .
2 تا سوال داشتم ...

سوال اول اینکه کلاً چند نوع روش برای ارسال sms داریم ؟!! و سوال دوم : GSM چیه ؟!

این در مورد سوال اول تصویر ضمیمه انواع پروتکلها را نشون میده
http://barnamenevis.org/forum/attachment.php?attachmentid=18698&d=1212774831


این هم سوال دوم


GSM

The Global System for Mobile Communications, GSM (original acronym: Groupe Spécial Mobile) is the most popular standard for mobile phones in the world. GSM service is used by over 2 billion people across more than 212 countries and territories.[1][2] The ubiquity of the GSM standard makes international roaming very common between mobile phone operators, enabling subscribers to use their phones in many parts of the world. GSM differs significantly from its predecessors in that both signaling and speech channels are Digital call quality, which means that it is considered a second generation (2G) mobile phone system. This fact has also meant that data communication was built into the system from the 3rd Generation Partnership Project (3GPP).

noorsoft
جمعه 17 خرداد 1387, 23:01 عصر
این دیکشنری مربوط به Gsm بد نیست داشته باشید

noorsoft
جمعه 17 خرداد 1387, 23:04 عصر
قوی ترین نرم افزاری که در رابطه به PDU طراحی شده

noorsoft
جمعه 17 خرداد 1387, 23:11 عصر
راستی در مورد Flash sms هم هیچ توضیحی ندادیم
در واقع فلش اس ام اس پیامی که بصورت اتوماتیک نمایش داده میشه و بعد از خواندن پاک می شه یعنی در واقع اصلا ذخیره نمی شه

برای ارسال این گونه پیامها کافی برای DSC خود کلاس 1 را انتخاب نمایید
البته قبلا توضیح شو دادم

mrahda
شنبه 18 خرداد 1387, 00:48 صبح
سلام به دوستان عزيز و گرامي
چندروز پيش خيلي دنبال مطلب ارسال اس ام اس از طريق كامپيوتر گشتم ولي مطلب به درد بخوري دستم نيومد. تا اينكه امشب اتفاقي يه سرچ كردم و با كمال تعجب اين پست را ديدم. آخر پست كه رسيدم ديدم چقدر داغه!:متعجب:
انصافا دست مريزاد، خسته نباشيد،‌خدا قوتتون بده خيلي عالي بود. خيلي.
جدا كه زكات علمتون را خوب دادين
موفق باشيد
ياعلي :تشویق:

مهران موسوی
شنبه 18 خرداد 1387, 05:14 صبح
سلام دوستان ... امشب كه داشتم با گوشي ور ميرفتم چشمم ميدونيد به چي خورد .. يك سري پيام در قسمت پيش نويسهام ذخيره شده بود كه شماره ي دريات كننده براش مشخص نشده بود :خجالت: خوب اين پيامها به دليل اين به وجود مياد كه يه چيزي مينويسي بعد بدون اينكه به مرحله ي بعد بريم back ميزنيم و از ويرايشگر پيام خارج ميشيم .. اين كار باعث ميشه تا اين پيامها به وجود بيان .... خوب حالا وقتي ما با AT يك پيام رو دريافت كرديم اگه با اين حالت رو به رو شديم چيكار بايد بكينيم !!! :لبخند:

خوي من يك نمونش رو براتون اينجا توضيح ميدم ...



(07-91-89-39-05-00-41-00)-(B1)-(00)-(((00-81)))-(00)-(08)-(FF)-(02-0633)

07 +98935001400 مركز پيام

00 00 شماره ي مقصددراينجا فقط اون دو بايت ابي رنگ براي ما اهميت داره يعني 81-00 خوب بدين معناست كه طول شماره ي مقصد 0 است .. يعني شماره ي مقص وارد نشده ...

و اما 81 يعني چي !!؟؟ خوب اين دو بايت به صورت پيش فرض وقتي شماره وارد نشه اينجا ميشن .. يادتونه كه اگه شماره به صورت بين المللي نبود 81 رو وارد ميكريد به معناي همون دو صفر !!!؟؟ اينجا هم 81 نقش خاصي نداره :لبخند:

مثالي از شماره اي كه بين المللي نيست :


00989350001400


موفق باشيد ... يا حق ...

noorsoft
شنبه 18 خرداد 1387, 15:32 عصر
سلام دوستان ... امشب كه داشتم با گوشي ور ميرفتم چشمم ميدونيد به چي خورد .. يك سري پيام در قسمت پيش نويسهام ذخيره شده بود كه شماره ي دريات كننده براش مشخص نشده بود :خجالت:



این دقیقا چیزی که من قبلا چند بار گفتم یک PDU میتونه قسمتهایی را در خود نداشته باشه و این امر یه کم به پیچیدگی اندکدینگ اضافه میکنه
اگه شما نرم افزار PDUSPY را دانلود کرده باشین می بینبن حتی شما میتونین یک پیام بدون شماره مرکز- شمار گیرنده - مدت عمر پیام و ... تولید کنید و روی سیم کارت و یا حافظه گوشی ذخیره کنید

در ضمن داش مهران اینقدر به این گوشی ور نرو خرابش میکنی ا :لبخند:

موفق باشید

noorsoft
شنبه 18 خرداد 1387, 15:58 عصر
من داشتم یک مروری به مطالب گذشته میکردم دیدم چند تا مطلب دیگه از قلم افتاده و او اینکه UDH برای DefualtAlphabet که همون مد 7 بیته
یعنی اگه قرار باشه یک پیام چند پارتی در مد 7 بیت ارسال کنیم قضیه چی میشه

همونطور که در پستهای قبل فهمیدیم ما باید در UDH (User Data Header) مشخص کنیم در حال ارسال یک پیام بلند چند پارتی هستیم
اگه یادتون باشه در اونجا یک عدد ثابت 060804 را وارد می کردیم این در واقع همون هدر دیتای ما میشه
06 در اونجا مشخص میکرد UDH ما طولش 6 بایته
08 نشاندهنده این بود که ما در مد 16 بیتی اطلاعات را کد کردیم
04 مشخص میکنه که چهاربایت دیگه دنباله داره

حال در مورد پیامهای بلند در 7 بیت قضیه به این صورت تغییر میکنه
به جای 060804 از 050003 استفاده میکنیم بدین معنی که
05 نشون میده طول هدر ما 5 بایته
00 اطلاعات بصورت 7 بیت کد شدند DefualtAlphabet
03 مشخص میکنه سه بایت دیگه دنباله داره

تا اینجا یک چیز مشخص شد و او اینه که طول هدر در 7 بیت یکی کمتر از 16 بیته
تا اینجا ما در هر دو حالت 3 بایت را داشتیم در 16 بیت 04 08 06 و در 7 بیت 03 00 05
در 16 بیت ما دو بایت را برای رفرنس پیام در نظر میگرفتیم که بصورت اتفاقی انتخاب میشد و برای تمام قسمتها یکسان بود ولی در 7 بیت ما از یک بایت استفاده میکنیم یعنی ما یک رفرنس یک بایتی داریم و این همون یک بایت اختلاف هدر هاست و بقیه قضایا مثل قبل تکرار میشه یعنی



0500031D0301

05003 هدر
1D رفرنس پیام که بصورت تصادفی ایجاد مشه
03 تعداد پارتها که قراره ارسال بشه
01 شماره اندکس پیام


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

مهران رسا
یک شنبه 19 خرداد 1387, 14:24 عصر
سلام .

آقای noorsoft کاش یه توضیح جامع و فارسی (:گریه:) در مورد GSM میدادی !

راستی بهتر نیست کم کم بریم سراغ کار با پورت ها در VB و ارسال sms از طریق USB و گوشی ؟!!
هنوز این مسئله واسه من گنگه که حالا که sms رو Code کردیم و آماده ارسال شده ؛ چه طوری اونو بفرستیم ؟! :متفکر:

اگه آموزش پورت ها رو هم شروع کنید خیلی خوب میشه .

مرسی از همگی ! :بوس:

noorsoft
یک شنبه 19 خرداد 1387, 14:41 عصر
سلام .

آقای noorsoft کاش یه توضیح جامع و فارسی (:گریه:) در مورد GSM میدادی !

راستی بهتر نیست کم کم بریم سراغ کار با پورت ها در VB و ارسال sms از طریق USB و گوشی ؟!!
هنوز این مسئله واسه من گنگه که حالا که sms رو Code کردیم و آماده ارسال شده ؛ چه طوری اونو بفرستیم ؟! :متفکر:

اگه آموزش پورت ها رو هم شروع کنید خیلی خوب میشه .

مرسی از همگی ! :بوس:

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

مهران رسا
یک شنبه 19 خرداد 1387, 14:49 عصر
موافقم .

پس قبل از ایجاد کردن تاپیک جدید ، بهتره sms هایی که در اونها Command وجود داره رو مورد بررسی قرار بدیم . مثل همون اس ام اسی که خیلی وقت پیشا ، مد شده بود و وقتی به آخر سند میرسیدی ویبره گوشی فعال میشد . و یا sms هایی که از طرف Irancell دریافت میشه و با باز کردن اون مثلاً GPRS فعال میشه !

noorsoft
یک شنبه 19 خرداد 1387, 15:06 عصر
موافقم .

پس قبل از ایجاد کردن تاپیک جدید ، بهتره sms هایی که در اونها Command وجود داره رو مورد بررسی قرار بدیم . مثل همون اس ام اسی که خیلی وقت پیشا ، مد شده بود و وقتی به آخر سند میرسیدی ویبره گوشی فعال میشد . و یا sms هایی که از طرف Irancell دریافت میشه و با باز کردن اون مثلاً GPRS فعال میشه !


اونها در واقع اس ام اس های 8 بیتی باینری هستند سعی میکنم در حد توان براتون مطلب های مفید بزارم
یک رفرنس از شرکت HP پیدا کردم ولی مشکلی که هست اینه که این گونه دستورات فقط روی گوشی موبایل کار میکنه و دیگه اینکه همه گوشی ها هم اون را ساپورت نمی کنن در حال پیدا کردن رفرنسهای بهتر هستم . منتظر باشید

noorsoft
یک شنبه 19 خرداد 1387, 15:19 عصر
لیست گوشی هایی که این گونه فرمانها را قبول میکنن




LG: KT610

Nokia: 3250, E50, E51, E60, E61, E61i, E62, E65, E70, E90 Communicator
N71, N73, N75, N76, N77, N78, N80, N81, N81 8GB, N82, N90, N91, N92
N93, N93i, N95, N95 8GB, N96


Samsung: SGH-G810






برای اینکه بتونین یک پیام بفرستید که روی صفحه نمایش چشمک بزنه باید این کار را انجام بدین
اولا فقط در مد 16 بیت این کار انجام میشه و به این صورت که 0001 را قبل از قسمتی که میخواین چشمک زن بشه وارد کنید
:لبخند:

noorsoft
یک شنبه 19 خرداد 1387, 20:51 عصر
تو مثال زیر طریقه ارسال Vcart یا همون شماره تلفن را آموزش میدم
یک Vcart شامل این چیزهاست



BEGIN:VCARD
VERSION:2.1
N:FARSHAD;NOORANIAN
TEL;PREF:09354372775
END:VCARD
که میشه



**06050423F40000424547494E3A56434152440D0A
56455253494F4E3A322E310D0A4E3A464152534841
443B4E4F4F52414E49414E0D0A54454C3B50524546
3A30393335343337323737350D0A454E443A564341
52440D0A
** مشخص کننده Sms Submit و شماره فرستنده و گیرنده و ... مثل همون پیامهای قبلی

060504 یوزر دیتا (همیشه ثابته)

23F4 مشخص کننده پورت مقصد

0000 مشخص کننده پورت اصلی

BEGIN:VCARD<CR><LF> 424547494E3A56434152440D0A

VERSION:2.1<CR><LF> 56455253494F4E3A322E310D0A

N:FARSHAD;NOORANIAN 4E3A464152534841443B4E4F4F52414E49414E

TEL;PREF:09354372775 54454C3B505245463A3039333534333732373735

END:VCARD 454E443A56434152440D0A

همونطور که مشاهده میکنین این پیام بصورت 8 بیت کد میشه و خیلی راحته
موفق باشید

مهران رسا
دوشنبه 20 خرداد 1387, 14:38 عصر
آموزش پورت ها در VB (در تاپیک جدید) رو هم اگه امکان داره زودتر شروع کنید .

Thanks

mrahda
سه شنبه 21 خرداد 1387, 01:38 صبح
سلام
ديدم نوشته بودي «كاربراني كه از دستورات AT استفاده مي كنند....»، مگه غير از اين هم راهي هست براي كار با موبايل؟ ميشه راهنمايي ام كنيد؟
من يه برنامه نوشته ام كه مي تونم مسيج هاي يك پارتي را بفرستم يا ذخيره كنم. ولي وقتي اولين قسمت يك مسيج دو پارتي را ميخوام بفرستم Error ميده. هيچ كدي هم نمي ده.
با At هم كار كردم.
ممنون

mrahda
سه شنبه 21 خرداد 1387, 01:40 صبح
آيا در حالت Text (غير از PDU) ميشه مسيج هاي فارسي و يا طولاني(چند پارتي) فرستاد؟

noorsoft
سه شنبه 21 خرداد 1387, 11:21 صبح
سلام
ديدم نوشته بودي «كاربراني كه از دستورات AT استفاده مي كنند....»، مگه غير از اين هم راهي هست براي كار با موبايل؟ ميشه راهنمايي ام كنيد؟
من يه برنامه نوشته ام كه مي تونم مسيج هاي يك پارتي را بفرستم يا ذخيره كنم. ولي وقتي اولين قسمت يك مسيج دو پارتي را ميخوام بفرستم Error ميده. هيچ كدي هم نمي ده.
با At هم كار كردم.
ممنون


بله قبلا هم توضیح دادم از TX/RX جایی که موبایل را فیش میکنن بصورت باینبری اطلاعات ارسال میشه

noorsoft
سه شنبه 21 خرداد 1387, 11:30 صبح
آيا در حالت Text (غير از PDU) ميشه مسيج هاي فارسي و يا طولاني(چند پارتي) فرستاد؟

خیر این امکان را فقط با PDU میشه انجام داد

مهران موسوی
چهارشنبه 22 خرداد 1387, 14:52 عصر
سلام noorsoft و raravaice جان ...

اس ام اس هاي چند پارتي دريافت شده يكمي برام مبهم هست ... من يك اس ام اس 6 پارتي از دوستم دريافت كردم ... و بعد به يك نكته ي عجيب برخورد كردم ... همه ي پارتها با هم در يك خانه از حافظه نبود مثلا با دستور AT+CMGF=37 فقط ميشه قسمت اولش رو خودند و براي خودن بقيه ي قسمتهاش بايد تا 6 واحد به 37 اظافه كنيم ... تا بتونيم همه ي پارتاش رو بدست بياريم و نوشته هاش رو به هم بچسبوني ....

من در اين حالت گيج شدم ... !! خوب ما از كجا بدونيم كه اين اس ام اسي رو كه با AT+CMGF=37 خونديم 6 پارتي هست و ما بايد 6 پارت بعدش رو هم بخونيم ... !! ؟ من هر شش پارت رو از حافظه استخراج كردم و ميزارم اينجا تا روشون يكم توضيح بدين ....

در ضمن يك چيز ديگه هم هست .... ايا فرماني وجود داره كه تعداد پيامهاي موجود در حافظه رو برگردونه ؟؟؟


در ضمن ( داخل اين پارتهايي كه ميزارم خودم شماره ي فرستنده رو يه چيز الكي جايگزين اصلي كردم خلاصه بعضي از افراد يكمي شيطون هستن ديگه !!! البته بلانصبت شما ها )





0791893905004102600C918953951213560008804021216163 818C0500039F06010020002000200020002000200632064A00 200630064A0020064606270645064700200020002000200020 00200020062706440647064A00210628064700200645063106 2F062706460020062F0631062E06270646064700200627062A 002E0020002006280647002006220646002006320646002006 300644064A064406270646002006410631


0791893905004102600C918953951213560008804021216104 818C0500039F0602063206270646064700200627062A002000 2E00200628064700200622064606270646064306470020062F 063100200628068606470020062F06270631064A0020062A06 430646062F002E0020064A0644062706460020063906480636 002006430631062F06460020067E0648063406430646062F00 2E00200020062806470020062206460627


0791893905004102600C918953951213560008804021216144 818C0500039F06030646064306470020062806270630064806 42002006480634064806420020062A064506270645002E0628 0647002006450627062F0631063206460020062E0648062F00 20062806AF0648064A0646062F003A06450627064506270646 002E0628064700200020002000200622064606270646064306 4700200020062F06270645064600200631


0791893905004102600C918953951213560008804021216184 818C0500039F06040641064800200645064A06430646064606 2F002E0020063206280639062F0020063106410648064A0634 00200627062A06480645064A064306460646062F002E002006 28064700200622064600200642063106450647002006330628 0632064A0020067E06320627064600200642062F0631002000 2E06280647002006220646002006450627


0791893905004102600C918953951213560008804021216115 818C0500039F0605062F063106270646002006280647002006 38062706470631067E062F0631002E0020062706440647064A 00200021062806470020062206470020062F06440020063206 46002006300644064A0644002E002000200628064700200622 06460020062706340643002006860634064506270646002006 390628062F0644002006330628064A0644


0791893905004102640C918953951213560008804021216155 81780500039F06060021064306470020064506270020063106 270020062806310627064A0646002006390647062F00200643 0646002006270633062A064806270631002100200627063206 27064A0646002006320646002006300644064A0644064A0020 0645064306460020062806310643064606270631002E

raravaice
چهارشنبه 22 خرداد 1387, 15:34 عصر
من در اين حالت گيج شدم ... !! خوب ما از كجا بدونيم كه اين اس ام اسي رو كه با AT+CMGF=37 خونديم 6 پارتي هست و ما بايد 6 پارت بعدش رو هم بخونيم ... !! ؟

1.چرا از CMGR یا CMGL استفاده نکردی! CMGR برای خواندن پیام توسط شماره اون توی حافظه سیم کارت و CMGL=4 برای خواندن تمام پیام ها در مد PDU استفاده میشه و CMGL=ALL در مد TEXT .

2.ببین هر خانه حافظه برای نگه داری حافظه حدود 150 بایت فضای خالی داره ("حدود گفتم چون عدد دقیقش یادم نیست") پس هر پیام میتونه در 1 خونه بشینه و اون کدی که در موقع ارسال فرستادی در اصل تفکیک کننده پارتها است و این درحالیه که هر پیامی که توی حافظه قرار میگیره یه Message Refrence از BTS میگیره که اون شماره رو میتونی توی این کد پیدا کنی و تشخیص بدی کدوم پیام ادامه کدومه.

بحث مفصل خواندن و Decode پیام چند قسمتی رو تا پایان هفته بازش میکنم.

موفق باشید

مهران موسوی
چهارشنبه 22 خرداد 1387, 16:28 عصر
ببخشيد اشتباه چاپي بود ... من از AT+CMGR=37 استفاده كرده بودم ...

فقط الان تنها مشكم اينه كه چه جوري بايد بفهمم يك پيام ادامه ي پيام ديگه هست ... مثل اون نمونه اي كه بالا گذاشتم ....

و يك چيز ديگه هم اين كه نميدونم با چه كدي بايد تعداد كل اس ام اسهاي موجود در حافظه رو بخونم ... ؟

raravaice
چهارشنبه 22 خرداد 1387, 16:50 عصر
خیلی عجله نکن بزار سره فرصت مسئله رو برات بازش میکنم ولی به قسمتهای رنگی زیر دقت کن.



0791893905004102600C918953951213560008804021216163 818C0500039F06010020002000200020002000200632064A00 200630064A0020064606270645064700200020002000200020 00200020062706440647064A00210628064700200645063106 2F062706460020062F0631062E06270646064700200627062A 002E0020002006280647002006220646002006320646002006 300644064A064406270646002006410631


0791893905004102600C918953951213560008804021216104 818C0500039F0602063206270646064700200627062A002000 2E00200628064700200622064606270646064306470020062F 063100200628068606470020062F06270631064A0020062A06 430646062F002E0020064A0644062706460020063906480636 002006430631062F06460020067E0648063406430646062F00 2E00200020062806470020062206460627


0791893905004102600C918953951213560008804021216144 818C0500039F06030646064306470020062806270630064806 42002006480634064806420020062A064506270645002E0628 0647002006450627062F0631063206460020062E0648062F00 20062806AF0648064A0646062F003A06450627064506270646 002E0628064700200020002000200622064606270646064306 4700200020062F06270645064600200631


0791893905004102600C918953951213560008804021216184 818C0500039F06040641064800200645064A06430646064606 2F002E0020063206280639062F0020063106410648064A0634 00200627062A06480645064A064306460646062F002E002006 28064700200622064600200642063106450647002006330628 0632064A0020067E06320627064600200642062F0631002000 2E06280647002006220646002006450627


0791893905004102600C918953951213560008804021216115 818C0500039F0605062F063106270646002006280647002006 38062706470631067E062F0631002E0020062706440647064A 00200021062806470020062206470020062F06440020063206 46002006300644064A0644002E002000200628064700200622 06460020062706340643002006860634064506270646002006 390628062F0644002006330628064A0644


0791893905004102640C918953951213560008804021216155 81780500039F06060021064306470020064506270020063106 270020062806310627064A0646002006390647062F00200643 0646002006270633062A064806270631002100200627063206 27064A0646002006320646002006300644064A0644064A0020 0645064306460020062806310643064606270631002E



این کد نشان دهنده تعداد کل پارتها و شماره ترتیب پیام هست که اگر در هر پیامی وجود داشته باشه یعنی چندتا پارت داره.
البته همونطور که گفتم یک یا 2 بایت هم این ما بین متصل کننده این پیامهاست که الان دقیقا نمیدونم کدوم هست.

موفق باشید

noorsoft
چهارشنبه 22 خرداد 1387, 18:40 عصر
ببخشيد اشتباه چاپي بود ... من از AT+CMGR=37 استفاده كرده بودم ...

فقط الان تنها مشكم اينه كه چه جوري بايد بفهمم يك پيام ادامه ي پيام ديگه هست ... مثل اون نمونه اي كه بالا گذاشتم ....

و يك چيز ديگه هم اين كه نميدونم با چه كدي بايد تعداد كل اس ام اسهاي موجود در حافظه رو بخونم ... ؟


مهران جا این را یک نگاهی بکن
http://barnamenevis.org/forum/showpost.php?p=531583&postcount=83

شما در UDH مخفف یوزر دیتا هدر متوجه این موضوع میشین

farzad1
جمعه 24 خرداد 1387, 18:45 عصر
با تشکر از دوستان عزیز که این موضوع را به طور کامل مطرح کردند و کامل توضیح دادند من بار اول است که با این موضوع کار می کنم و با خواندن مطالب دوست عزیزمان raravaice ارسال SMS را به صورت چند پارت فارسی را با زبان دلفی انجام دادم و الان در مرحله دریافت SMS به مشکل بر خوردم البته دلیل مشکل هم به ضعف برنامه نویسی بر می گردد و نتونستم حلش کنم اگه ممکنه کمکم کنید موقع Decode کردن نمی تونم با دلفی کد مثلاً 0641 Hex را به کاراکتر آن که حرف "ف" هست برگردونم . اگه ممکنه کمکم کنید ممنون از لطف شما. و توضیحات ارائه شده کامل که در هیچ سایتی نتونسته بودم پیدا کنم .

raravaice
جمعه 24 خرداد 1387, 19:34 عصر
نمی تونم با دلفی کد مثلاً 0641 Hex را به کاراکتر آن که حرف "ف" هست برگردونم

فرزاد جان سئوالت رو تو بخش دلفی بپرس ! زود تر و بهتر به نتیجه میرسی.

موفق باشید

noorsoft
جمعه 24 خرداد 1387, 20:23 عصر
مطلب برای گفتن زیاده هنوز خیلی چیزها مونده که گفته بشه ولی چند چیز از پستها استنباط میشه اول اینکه
متاسفانه بحث های حاشیه ای زیاد شده و داره از موضوع اصلی دور میشه دوما که مهمتر هم هست دوستان علاقه ای به ادامه بحث نشون نمی دن (نمی دونم چرا؟؟؟؟ )
به نظر من حیفه حالا که بحث تا اینجا رسیده همین جا تموم بشه

مهران موسوی
دوشنبه 27 خرداد 1387, 02:35 صبح
برو بچ كجايين بابا ... اين چند رو امتحانات پشت سر هم دمار از روزگار ما در اورد .... ديگه تموم شد راحت شديم

خوب بچه ها مروري كه به مطالب داشتم حاكي از اين بود كه مطالبي كه مربوط به كد و ديك بود در حالت عادي به طور كامل بيان شده دوستان با كمي ابتكار توسط همين مطالب ميتونن يك سيتمم كدينگ و ديكدينگ تقريبا انعطاف پذير رو پياده سازي كنن ...


الان تنها مطلي كه من و raravaice (http://barnamenevis.org/forum/member.php?u=37086) جون منتظرشيم و noorsoft جان قولش رو داده همون ارسال و دريافت اس ام اس هايي هست كه به جاي شماره اسم داره ...

اميدوارم به خوبي اين مبحث بيان بشه و تاپيك رو با يك پست گلچين شده ي مطالبت خاتمه بديم ...

يا حق ...

farzad1
دوشنبه 27 خرداد 1387, 20:28 عصر
با سلام خدمت دوستان عزیز
من برای Decode کردن مثال آقای raravaice را قدم به قدم انجام دادم ولی به یه مشکل بر خوردم و مشکل این بود که این مثال خروجی متن Barnamenevis.org
را به دست آوردم ولی در مثال خودم که از مودم مقدار را می خونم که باید D3303BDC06 به "Salam" را بدست می آوردم نتونستم به دست بیارم . اگه ممکنه راهنمایی کنید .

noorsoft
سه شنبه 28 خرداد 1387, 13:17 عصر
برو بچ كجايين بابا ... اين چند رو امتحانات پشت سر هم دمار از روزگار ما در اورد .... ديگه تموم شد راحت شديم

خوب بچه ها مروري كه به مطالب داشتم حاكي از اين بود كه مطالبي كه مربوط به كد و ديك بود در حالت عادي به طور كامل بيان شده دوستان با كمي ابتكار توسط همين مطالب ميتونن يك سيتمم كدينگ و ديكدينگ تقريبا انعطاف پذير رو پياده سازي كنن ...


الان تنها مطلي كه من و raravaice (http://barnamenevis.org/forum/member.php?u=37086) جون منتظرشيم و noorsoft جان قولش رو داده همون ارسال و دريافت اس ام اس هايي هست كه به جاي شماره اسم داره ...

اميدوارم به خوبي اين مبحث بيان بشه و تاپيك رو با يك پست گلچين شده ي مطالبت خاتمه بديم ...

يا حق ...

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

noorsoft
جمعه 31 خرداد 1387, 12:20 عصر
اگه مطالب دیر شد ببخشید من شدیدا بیمار هستم و خیلی ار کارام عقب افتاده

روش اول برای ارسال پیام با نام
با این روش پیام ارسالی شما روی موبایل به جای شماره شما یک نام به دلخواه شما نشان داده می شود.
به این مثال توجه کنید


06918919015000040C9189193380000032008060617131040C 15CEF75B1E76A7C36E403E8C7EBF41F3303BDC06


من تنها تفاوت کار را با روشهای قبلی میگم چون بقیش مثل قبله
نکته اول: 04 به جای کدی که مشخص کننده Dlivery بود جایگزین میشه

نکنه بعدی پروتکل را 32 انتخاب کنید
بقیه مراحل مثل قبل انجام میشه
نکته آخر نامی که قصد دارید به جای شماره شما روی موبایل نشان داده شود را در ابتدای متن پیام قرار دهید البته بصورت یک آدرس ایمیل در مثال فوق بخ جای شماره Nooranian@yahoo نشان داده میشود و متن پیام هم salam نشان داده می شود

موفق و موید باشید

e601
جمعه 31 خرداد 1387, 20:57 عصر
با سلام و خسته نباشید خدمت دوستان گرامی

واقعا از صمیم قلب ازتون تشکر میکنم که همچنین تاپیک مفیدی رو راه انداختید. مطالب واقعا کاربردی و مفید هست که من خودم خیلی چیزا ازتون یاد گرفتم. :تشویق:

چند تا سوال دارم اگه راهنماییم کنید ممنون میشم:
1. آیا همه گوشیها و مودمهای GSM از مد Text پشتیبانی میکنند؟
2. اگه برای ارسال SMS از مد Text استفاده بشه قضیه چطور میشه؟ من خودم امتحان نکردم ولی جایی دیدم که میشه بصورت زیر از مد Text استفاده کرد. آیا این روش درسته و کار میکنه؟


AT
OK
AT+CMGF=1
OK
AT+CMGS="+989351234567"
> A simple demo of SMS text messaging.

OK

با تشکر...

noorsoft
شنبه 01 تیر 1387, 08:01 صبح
با سلام و خسته نباشید خدمت دوستان گرامی

واقعا از صمیم قلب ازتون تشکر میکنم که همچنین تاپیک مفیدی رو راه انداختید. مطالب واقعا کاربردی و مفید هست که من خودم خیلی چیزا ازتون یاد گرفتم. :تشویق:

چند تا سوال دارم اگه راهنماییم کنید ممنون میشم:
1. آیا همه گوشیها و مودمهای GSM از مد Text پشتیبانی میکنند؟
2. اگه برای ارسال SMS از مد Text استفاده بشه قضیه چطور میشه؟ من خودم امتحان نکردم ولی جایی دیدم که میشه بصورت زیر از مد Text استفاده کرد. آیا این روش درسته و کار میکنه؟

OK[/ltr][/code]با تشکر...

1- بله همه مودمها با مد تکست به راحتی کار میکنند و مشکل خاصی ندارند
2- از مد تکست هم پیام ارسال میشه ولی چند تا موضوع باید رعایت بشه
اول اینکه پیام باید کوتاه باشد short message یعتی حد اقل 160 کارکتر
دوم اینکه از یونیکد استفاده نکنی و تمام متن پیام انگلیسی باشد
نکته آخر اینکه بعد از وارد کردن متن پیام Ctrl+Z یادتون نره

e601
شنبه 01 تیر 1387, 22:17 عصر
با تشکر از شما دوست عزیز

چندتا سوال دیگه ام دارم ممنون میشم اگه راهنمایی کنید...

یکی اینکه آیا منبع فارسی واسه دستورات AT وجود داره که دستور رو با توضیحش داشته باشه؟ البته من یه چندتایی از دستورات رو بلدم ولی میخوام اگه مرجعی باشه بشتر یاد بگیرم...

دومی ام اینکه اگه میشه یه توضیحی در مورد دسیمال و Hex و مبنای 10 و این چیزا بدید چون زیاد با این دستورات کار نکردم...

راستی قضیه ایجاد یه تاپیک مجزا در مورد کار با پورتها و ارسال Sms چی شد؟ تاپیکی ایجاد نشده یا بحث شروع شده ما ازش بی خبریم؟؟؟

noorsoft
یک شنبه 02 تیر 1387, 08:18 صبح
دوست عزیز منبع فارسی کامل و جامع وجود ندارد ولی تو همین بخش توضیحات دستورات اصلی داده شده
از طرفی دستورات با زبان اصلی بسیار ساده بیان شده اند و نگران زبان اصلی نباشید

در مورد سوال دوم : تو این تاپیک جاش نیست ولی با این حال مبنای 10 همون دسیمال یکی هستند و همون مبنای شمارشی که خودمون استفاده میکنیم یعنی هر ده یکان میشه یک دهگان (از صفر تا 9)
مبنای هگزا مبنای 16 است که هر 16 یکان یک شانزدهگان اضافه میشه (از صفر تا F)

farzad1
یک شنبه 02 تیر 1387, 10:15 صبح
با سلام خدمت دوستان گرامي
من pdu ايجاد شده را به دو نوع موبايل فرستادم ولي در Nokia متن فارسي رو درست نشون ميده ولي در Samsung مدل N620 درست نشون نمي ده و مربع نشون ميده در ضمن هنگام ارسال از Nokia به Samsung فارسي درست نشان داده مي شود . آيا موبايل به موبايل اين قضيه فرق ميکنه ؟ ممنون از راهنمايي شما .

مهران رسا
یک شنبه 02 تیر 1387, 13:20 عصر
فکر کنم علتش ساپورت نکردن زبان فارسی از جانب گوشی سامسونگ باشه ...

noorsoft
دوشنبه 03 تیر 1387, 18:05 عصر
با سلام خدمت دوستان گرامي
من pdu ايجاد شده را به دو نوع موبايل فرستادم ولي در Nokia متن فارسي رو درست نشون ميده ولي در Samsung مدل N620 درست نشون نمي ده و مربع نشون ميده در ضمن هنگام ارسال از Nokia به Samsung فارسي درست نشان داده مي شود . آيا موبايل به موبايل اين قضيه فرق ميکنه ؟ ممنون از راهنمايي شما .

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

farzad1
چهارشنبه 05 تیر 1387, 14:02 عصر
با تشکر از راهنمايي دوستان عزيز
اگه مشکل از فونت هست پس چرا از گوشي نوکيا که مي فرستم درست نشون مي ده ولي از کد نوشته شده خير ؟ آيا فرقي بين ارسال ما و گوشي نوکيا هست ؟ آيا نوکيا يونيکد نمي فرسته ؟ اگر يوني کد مي فرسته چرا فارسي نشون ميده ؟ و سوال آخر اينکه چکار بايد بکنم تا درست نشون بده ؟
شرمنده که اينهمه سوال را پرسيدم چکار کنيم بي سوادي اين مشکلات رو هم داره ! شرمنده دوستان

noorsoft
چهارشنبه 05 تیر 1387, 16:31 عصر
با تشکر از راهنمايي دوستان عزيز
اگه مشکل از فونت هست پس چرا از گوشي نوکيا که مي فرستم درست نشون مي ده ولي از کد نوشته شده خير ؟ آيا فرقي بين ارسال ما و گوشي نوکيا هست ؟ آيا نوکيا يونيکد نمي فرسته ؟ اگر يوني کد مي فرسته چرا فارسي نشون ميده ؟ و سوال آخر اينکه چکار بايد بکنم تا درست نشون بده ؟
شرمنده که اينهمه سوال را پرسيدم چکار کنيم بي سوادي اين مشکلات رو هم داره ! شرمنده دوستان


گفتم که چون گوشی نوکیای شما فونت فارسی داره
فرقی نباید بکنه
نمونه کد را بزار تا ببینم

farzad1
پنج شنبه 06 تیر 1387, 08:23 صبح
ممنون از لطف شما
کد من اينه
079189390500410011000C918919323421430008AA08063306 4406270645
که کلمه سلام رو مي فرسته

raravaice
پنج شنبه 06 تیر 1387, 12:18 عصر
فرزاد جان این کد شما هیچ مشکلی نداره :



SMS_SUBMIT
Send to:989123431234

سلام


شما همین PDU رو توی از مودم سامسونگ به سامسونگ بفرست ببین چی میشه!

مشکل از جای دیگه ای هست.
سئوالات رو توی تاپیک های تازه ای مطرح کن تا مبحث آموزشی این تاپیک به بیراهه نره!

موفق باشید

e601
جمعه 07 تیر 1387, 15:42 عصر
با سلام خدمت دوستان عزیز

دو تا سوال دارم از دوستان ممنون میشم اگه راهنمایی کنن..
توی بحثا گفته شد که اگه بخوایم از طریق PDU پیام بفرستیم و Delivery Report هم داشته باشیم یه کد 2 رقمی رو در محل تعیین شده قرار میدیم و پیام رو ارسال میکنیم حالا سوال من اینه که اولا:
وقتی Delivery فعال شد و پیام هم فرستاده شد جوابشو چطوری دریافت میکنیم؟ یعنی راهی هست که هر موقع گزارش رسیدن پیام به مقصد ، واسه ما اومد ما هم مثلا با یه MsgBox به کاربرمون اطلاع بدیم یا اینکه باید مرتبا وضعیت پیام رو توی شبکه بررسی کنیم ببینیم رسیده یا نه...

ثانیا در مد Text چطوری میشه تنظیمات اضافی (مثل همین Delivery) روی پیام ارسالی تنظیم کرد؟؟؟

با تشکر...

noorsoft
جمعه 07 تیر 1387, 16:39 عصر
دوست عزیز Delivery Report بصورت یک sms برای شما ارسال میشه که شما از طریق اون زمان و .. متوجه میشین
دوما در مد تکست تنظیمات اضافی نداریم فقط ارسال پیام ساده انگلیسی

farzad1
شنبه 08 تیر 1387, 13:13 عصر
با سلام و عرض ادب
من در مورد ارسال پيام با نام که آقاي NoorSoft گفته بودند و مثال ايشان مشکل داشتم اگه ممکنه توضيح بيشتري بدين .
کدي که آقاي NoorSoft گفته بودند :
06918919015000040C9189193380000032008060617131040C 15CEF75B1E76A7C36E403E8C7EBF41F3303BDC06
ولي کدي که من توليد کردم :
079189390500410011040C918919323411113200AA15CEF75B 1E76A7C36E403E8C7EBF41F3303BDC06
و جواب هم نميده ميشه تفاوت اين دو کد رو بگين و چرا کد من اشتباهه؟

reza6384
دوشنبه 10 تیر 1387, 17:17 عصر
قسمت هشتم : ارسال یک پیام بدون محتوا

تا اینجا به آزمایش دستاورد آموزشی میرسیم که یه پیام خالی رو به شماره ای ارسال کنیم.

مثال 1:

مشخصات:
شماره مرکز پیام = 989350001400+
گزارش=بدون گزارش
شماره Index=متن فعلی
شماره مقصد = 09351234567
پروتکل=00
نوع محتوا = DefaultAlphabet
مدت زمان نگهداری = حداکثر
متن = خالی



079189390500410011000B819053214365F70000FF


موفق باشید

سلام. ضمن تشکر از شما و Noorsoft عزیز ، کدی که این بالا نوشتید رو نتونستم کامل کنم و جواب بگیرم، البته همه کارهایی که راجع به Encoding گفته شد انجام دادم و جواب گرفتم ، اما توی رشته ای که برای ارسال SMS می فرستم Delivery Report مشخص نشده :



AT+CMGF=0
OK
AT+CSMS=0
OK
AT+CMGS=14
>0011000B819021214365F70000FF00 (CTRL+Z)
00 : Length of SMSC information
11 : First octet of the SMS-SUBMIT message.
00:TP-Message-Reference
0B819021214365F7: Destination
00:TP-PID. Protocol identifier
00:Data coding scheme
FF:validity period
00: lenght of message


این رشته که من نوشتم و ارسال کردم از روی لینکی که در یکی از صفحات این تاپیک جناب Noorsoft لطف کردن قرار دادن هست و جواب گرفتم ، سوالم اینه که پس Delivery Report کجای این رشته هست ؟

سوال بعدی من اینه که وقتی که SMS ارسال شد یک پیام میاد به پورت Com :


+CMGS: 17

این یعنی چی؟

سوال بعدی من اینه که من با یک گوشی نوکیا N73 کار می کنم، و دستور


AT+CMGL = "ALL"

رو می زنم Error میده.

خیلی ممنون، ببخشید که سوالهام رو باهم پرسیدم.

noorsoft
دوشنبه 10 تیر 1387, 18:14 عصر
با سلام و عرض ادب
من در مورد ارسال پيام با نام که آقاي NoorSoft گفته بودند و مثال ايشان مشکل داشتم اگه ممکنه توضيح بيشتري بدين .
کدي که آقاي NoorSoft گفته بودند :
06918919015000040C9189193380000032008060617131040C 15CEF75B1E76A7C36E403E8C7EBF41F3303BDC06
ولي کدي که من توليد کردم :
079189390500410011040C918919323411113200AA15CEF75B 1E76A7C36E403E8C7EBF41F3303BDC06
و جواب هم نميده ميشه تفاوت اين دو کد رو بگين و چرا کد من اشتباهه؟


کدی که من گذاشته بودم



PDU LENGTH IS 45 BYTES
ADDRESS OF DELIVERING SMSC
NUMBER IS : +9891100500
TYPE OF NR. : (0x10) International
NPI : (0x01) ISDN/Telephone (E.164/163)

MESSAGE HEADER FLAGS (0x04)
MESSAGE TYPE : SMS DELIVER
MSGS WAITING IN SC : NO
REQ. STATUS REPORT : NO
USER DATA HEADER : NO UDH
REPLY PATH : NO

ORIGINATING ADDRESS
NUMBER IS : +989133080000
TYPE OF NR. : (0x10) International
NPI : (0x01) ISDN/Telephone (E.164/163)

PROTOCOL IDENTIFIER (0x32)
MESSAGE ENTITIES : TELEMATIC INTERWORKING
PROTOCOL USED : Internet EMail

DATA CODING SCHEME (0x00)
COMPRESSION : OFF
MESSAGE CLASS : NONE
ALPHABET USED : 7bit default

SMSC TIMESTAMP : 16/06/08 17:13:40 GMT-10.00

USER DATA PART OF SM
USER DATA LENGTH : 21 septets
USER DATA (TEXT) : Nooranian@yahoo salam

کدی که شما درست کردین


PDU LENGTH IS 41 BYTES
ADDRESS OF DELIVERING SMSC
NUMBER IS : +989350001400
TYPE OF NR. : (0x10) International
NPI : (0x01) ISDN/Telephone (E.164/163)

MESSAGE HEADER FLAGS (0x11)
MESSAGE TYPE : SMS SUBMIT
REJECT DUPLICATES : NO
VALIDITY PERIOD : RELATIVE
REPLY PATH : NO
USER DATA HEADER : NO UDH
REQ. STATUS REPORT : NO
MSG REFERENCE NR. : 4 (0x04)

RECIPIENTS ADDRESS
NUMBER IS : +989123431111
TYPE OF NR. : (0x10) International
NPI : (0x01) ISDN/Telephone (E.164/163)

PROTOCOL IDENTIFIER (0x32)
MESSAGE ENTITIES : TELEMATIC INTERWORKING
PROTOCOL USED : Internet EMail

DATA CODING SCHEME (0x00)
COMPRESSION : OFF
MESSAGE CLASS : NONE
ALPHABET USED : 7bit default

VALIDITY OF MESSAGE : 4 days

USER DATA PART OF SM
USER DATA LENGTH : 21 septets
USER DATA (TEXT) : Nooranian@yahoo salam


اگه دقت کنی متوجه میشین شما MESSAGE HEADER FLAGS را بجای 04 عدد 11 قرار دادین
موفق و موید باشین

noorsoft
دوشنبه 10 تیر 1387, 18:34 عصر
این رشته که من نوشتم و ارسال کردم از روی لینکی که در یکی از صفحات این تاپیک جناب Noorsoft لطف کردن قرار دادن هست و جواب گرفتم ، سوالم اینه که پس Delivery Report کجای این رشته هست ؟
دوست عزیز یک PDU میتونه یک یا بعضی از قسمتها را نداشته باشه و این اشکالی ایجاد نمی کنه



سوال بعدی من اینه که وقتی که SMS ارسال شد یک پیام میاد به پورت Com :


+CMGS: 17
این یعنی چی؟

این شماره Index ارسال پیامه



سوال بعدی من اینه که من با یک گوشی نوکیا N73 کار می کنم، و دستور


AT+CMGL = "ALL"
رو می زنم Error میده.

خیلی ممنون، ببخشید که سوالهام رو باهم پرسیدم.

بعضی از گوشی ها بعضی از دستورات را ساپورت نمی کنن این هم از همون مورد هاست
برای تست این قبیل موارد شما AT+CMGL? را وارد کنید اگر OK گرفتین دستور شما ساپورت میشه

reza6384
پنج شنبه 13 تیر 1387, 18:28 عصر
سلام.
من توی Encoding مربوط به محتوای پیام مشکل دارم. کدی رو که نوشتم در زیر قرار می دم، لطفا بگین چرا به مشکل بر می خوره. مشکل اینه که همونطور که دیدیم، هر 8 کاراکتر میاد در 7 بایت می شینه. من موقع ارسال Sms ها دیدم که مثلا وقتی میفرستم Reza Mohammad حرف آخر اون که d هست فرستاده نمی شه و برای رشته های بزرگتر تعداد حرف های بیشتری فرستاده نمیشه، یعنی همون تعدادی که به خاطر PDU Encoding کم شده، مثلا توی یه رشته که 24 حرف داره 3 حرف آخر نمی رسه و ....

در ضمن من برای تبدیل باینری به هگزا دسیمال و همچنین گرفتن کد یک کاراکتر خودم تابع نوشتم، لطفا اگر این توابع توی NET2. موجود هستند بگین.

تابع شامل 6 مرحله هست :
1-پیدا کردن کد هر کاراکتر و تبدیل آن به هگزا دسیمال = Step1
2-تبدیل کدهای هگز به باینری = Step2
3-حذف MSB هر Octet که میشه Step3
4- برعکس کردن هفت تایی ها = Step4
اضافه کردن تعدادی صفر به سمت چپ رشته تا طول رشته مضرب 8 بشود
5-برعکس کردن 8 تایی ها، البته شما نوشته بودین که به هگز تبدیل می کنین و بعد برعکس می کنین که فرقی نداره، من اول هشت تایی ها رو برعکس کردم و بعد به هگز تبدیل کردم و این میشه Step5
6- تبدیل باینری ها به هگزا دسیمال، البته چون تابع Convert.ToInt16 اعداد بین یک تا 15 رو به یک رقم هگز تبدیل می کنه و ما دوتا دوتا می خواهیم، هر 4 بیت 4بیت رو جدا کردم و هگز کردم.



Function EncodeOnePartDefaultAlphabetMessage(ByVal Message As String) As String
Dim Step1 As String = ""
Dim Step2 As String = ""
Dim Step3 As String = ""
Dim Step4 As String = ""
Dim Step5 As String = ""
Dim Step6 As String = ""
Dim Result As String = ""
Dim OS, OE As Integer ' Octet Start and Octet End Pointers

Dim Messagelen As Integer
Messagelen = Message.Length
Dim MessageLenStr As String = ""
Dim Octet As String = ""
Dim Tetra As String = ""
For i As Integer = 0 To Message.Length - 1
Step1 += Me.GetHexadecimalCharCode_ASCII(Message.Chars(i))
Next
For i As Integer = 0 To Step1.Length - 1
Step2 += Me.ConvertHexToBinary(Step1.Chars(i))
Next
OS = 1
OE = 7
While OE < Step2.Length
Octet = StrCpy(Step2, OS, OE)
Step3 += Octet
OS += 8
OE += 8
End While
OE = Step3.Length - 1
OS = OE - 6
While OS >= 0
Octet = StrCpy(Step3, OS, OE)
Step4 += Octet
OS -= 7
OE -= 7
End While
If Step4.Length Mod 8 <> 0 Then
Dim Zeros As Integer
Zeros = 8 - (Step4.Length Mod 8)
For i As Integer = 1 To Zeros
Step4 = "0" + Step4
Next
End If
OE = Step4.Length - 1
OS = OE - 7
While OS >= 0
Octet = StrCpy(Step4, OS, OE)
Step5 += Octet
OS -= 8
OE -= 8
End While
OS = 0
OE = 3
While OE < Step5.Length
Octet = StrCpy(Step5, OS, OE)
Step6 += Me.ConvertBinaryToHex(Octet)
OS += 4
OE += 4
End While

Dim LN As Integer = Step6.Length / 2
If LN >= 0 And LN < 16 Then
MessageLenStr = "0" & CStr(Hex(LN))
Else
MessageLenStr = CStr(Hex(LN))
End If
Result = MessageLenStr & Step6
Return Result
End Function



****************



Function GetHexadecimalCharCode_ASCII(ByVal Character As Char) As String
Dim CharIndex As Integer = -1
Dim Result As String = ""

For i As Integer = 0 To 255
If Chr(i) = Character Then
CharIndex = i
Exit For
End If
Next
If CharIndex <> -1 Then
If CharIndex > 0 And CharIndex < 16 Then
Result = "0" + CStr(Hex(CharIndex))
ElseIf CharIndex >= 16 And CharIndex <= 255 Then
Result = CStr(Hex(CharIndex))
End If
End If
Return Result
End Function


فکر کنم پستم خیلی طولنی شد، ببخشید، مشکله دیگه، باید حل بشه.

با این کد چند تا خروجی رو ازش می نویسم :

String : 'Reza' => 04D2B23E0C
String : 'Reza Mohammad' => 0CD2B23E0C6ABED1E1763B4C06
String : 'This is a test sms for sending' => 1B54747A0E4ACF416110BD3CA783E6ED39C8FC9683E6653739 ED3E03

رشته اول مشکلی نداره و کامل می رسه ، رشته دوم حرف آخرش نمی رسه و رشته سوم سه حرفش نمی رسه. لطفا اگر می شه این رشته ها رو با برنامه خودتون تست کنین و خروجیتون رو با این خروجی ها مقایسه کنین و بگین اشکال کارم کجاست.:عصبانی++:

reza6384
پنج شنبه 13 تیر 1387, 19:06 عصر
ببخشید، مشکلم حل شد، اشکالم اینجا بود که طول پیام رو تعداد 8 تایی های نهایی می دونستم، در صورتی که طول پیام تعداد 7 تایی هاست که همون طول پیام کاربره، یعنی به این قسمت توجه نکرده بودم :



این عدد تعداد کاراکتر های وارد شده ما در مبنای 16 هست که در اینجا 6 کاراکتر داریم.دقت کنید چون داریم 1 بیت از هر کاراکتر کم میکنیم امکان داره تعداد جفت کد هگز ما این عدد نشه پس باید محاسبه این عدد رو از روی مجموع کل کاراکتر های وارد شده انجام بدیم.



و به این نتیجه رسیدم که اگر طول پیام رو کمتر از اونی که هست بفرستین قبول می کنه و Send می شه و ناقص می شه ، اما اگر طول پیام رو کمتر از اونی که هست بفرستین Error میده. Error 304.

یک فایل XML رو اینجا می ذارم که نشون دهنده Error های CMS هست، اینم حاصل زحمت داداش دوستمه که بنده خدا از روی یه فایل PDF دونه دونه کد خطا و پیامش رو وارد کرده.

e601
پنج شنبه 13 تیر 1387, 21:34 عصر
با سلام

دوستان در مورد کد کردن و ارسال SMS زیاد بحث شده ولی در مورد دریافت SMS هایی که با فرمت PDU دریافت میشن چیزی گفته نشده!!!

از اساتید محترم میخوام به این بحث هم بپردازن و اگه مثالی در مورد چگونگی این کار دارن در اختیار بقه هم قرار بدن تا آموزش کامل تر بشه :تشویق:

با تشکر...

raravaice
پنج شنبه 13 تیر 1387, 21:42 عصر
در مورد دریافت SMS هایی که با فرمت PDU دریافت میشن چیزی گفته نشده!!!

کم لطفی نکنید بحث شده.
توی صفحه 5 از همین تاپیک در پست 46 به بعد یه نوعش رو به طور کامل گفتم به همراه مثال منتهی مسئله ای که هست اینه که من یه مقدار مشغلم زیاد شده برای همین نتونستم ادامه بدم نوعهای دیگه رو ولی در اصرع وقت حتما ادامه میدم.

موفق باشید

e601
جمعه 14 تیر 1387, 00:59 صبح
با تشکر از شما

من یه برنامه از شما توی همین سایت دیدم که ارسال sms رو انجام میداد و خیلی شفاف توضیح داده بودین. اگه امکان این باشه که واسه دریافت SMS هم یه همچین مثالی بذارین لطف بزرگی در حق ما کردید...

با تشکر...

prince-of-persia
جمعه 14 تیر 1387, 02:19 صبح
در جایی خوندم که نوشته بود :

0051000781255535F30000AA0A060504411A0000CF25

where 060504411A0000 means destination port 16666


میشه در مورد پرت های ارسال و دریافت مثل پرت poblic و سایر پرت ها یک مقدار توضیح بدید و اینکه چكونه و كجاي pdu ایی که تا به اینجا ساختیم باید قرار داده بشه.

noorsoft
جمعه 14 تیر 1387, 09:50 صبح
دوستان برای اینکه PDU دیکد و انکد کنید من یک آنلاین دیکدر / انکدر نوشتم و تو سایتم گذاشتم اونجا میتونین نمونه هاتون را انکد و دیکد کنید و تست کنید و مشاهده روند کامل دیکد فکر کنم دیگه از این راحتر نشه نوضیح داد


www.noorsoft.com (http://www.noorsoft.com)

در قسمت آموزش لینک PDU Online Encode/Decode (http://www.noorsoft.com/sms/sms-pdu-encode-decode2.htm)

e601
جمعه 14 تیر 1387, 11:42 صبح
با سلام
یه جایی گفته شد یک PDU میتونه بعضی از قسمتها رو نداشته باشه. حالا اگه sms دریافتی ما با PDU اینکد شده باشه و بعضی از قسمتها رو هم نداشته باشه ما چطوری باید دیکدش کنیم؟؟!!!

noorsoft
جمعه 14 تیر 1387, 22:23 عصر
به اون آدرسی که در پست قبلی دادم سر بزنید و نمونه ها بدین تا راهنمایی لازم جهت دیکد را بهتون بکنه

prince-of-persia
سه شنبه 18 تیر 1387, 01:44 صبح
سلام

اینو ببینید
05811901500011000B819031024858F90000FF0161

کد بالا میگه :
service center = 091100500
dest number =09132084859
default alphabet
validity : max
status report : no
message refrence=0
user date=a

می خواهم در کد بالا تغییذلت زیر رو اعمال کنم :
udhi=1
udh=0608040b8423f
06:طول
08:اطلاعات را 16 بایتی کد کرده ایم
04:مشخص می کند 4 بایت دیگر ادامه دارد
0B84:پرت مقصد
23F0 :پرت مبدا



لطفا راهنمایی کنید .محل قرار گرفتن udhi,udh در کد بالا کجا میشه

با تشکر

noorsoft
سه شنبه 18 تیر 1387, 09:58 صبح
دقیقا بعد از طول عمر پیام باید وارد نمایید

prince-of-persia
سه شنبه 18 تیر 1387, 11:18 صبح
هر دوتاش؟
با توجه به گفته دوستان من دستور بالا را به صورت زیر تغییر دادم
05811901500011000B819031024858F90000FF0406080400C9 00000161
اما متن پیام که فقط یک کاراکتر a بود به صورت یک سری کاراکتر های نامتعارف دریافت شد؟
علت چیست ؟

راستی ...
udhi مگر یک بیت نیست پس چطوری باید نشونش بدیم ؟ (مثلا در قالب یک بایت)(آیا من این کار رو درست انجام دادم؟)
اگر ممکنه مثال بالا رو تکمیل و اصلاح کنید و udhiو udh رو در اون مشخص کنید .

اگر لطف کنید و اجزای مختلف و طریقه ساخت udhiو udh رو توضیح بدید فکر کنم دیگه ختم کلام باشه

میشه راهنمایی کنید که نقش DCS چیه و ساختارش به چه صورت هست و در چه مواقعی از اون استفاده می کنیم؟

یک دنیا تشکر

reza6384
چهارشنبه 19 تیر 1387, 16:13 عصر
سلام. ببخشید ، من یه سوال ابتدایی داشتم ، البته خیلی تو این تاپیک گشتم که توضیح اینا رو پیدا کنم ولی پیدا نکردم.



برای انکدینگ ابتدا شما باید نوع پیام را تشخیص بدین که میتونه یکی از انواع زیر باشه
SMS RECEIVED
SMS STATUS_REPORT
SMS SUBMIT
EMS RECEIVED
EMS SUBMIT


می خواستم خواهش کنم که بگین هر کردم اینها چیه ، البته دوتای اول که واضحه ، یک SMS دریافت شده و دومی هم Delivery یک SMS فرستاده شده هست. اما سومی تا پنجمی رو نمی دونم.

ممنون.

raravaice
چهارشنبه 19 تیر 1387, 16:36 عصر
اما سومی تا پنجمی رو نمی دونم.
سومی پیامهایی هست که توسط شما داخل سیم کارت نوشته شده ولی فرستاده نشده.

چهارمی EMS های دریافت شده.

پنجمی EMS هایی که به صورت مورد سوم در حافظه ذخیره شده.


مگر یک بیت نیست پس چطوری باید نشونش بدیم ؟ (مثلا در قالب یک بایت)

بیت مورد نظر وقتی صفر یا یک میشه بایت تغییر میکنه اینه که مهمه!;)

موفق باشید

reza6384
چهارشنبه 19 تیر 1387, 16:58 عصر
ممنون، من منظورم این هم بود که EMS چیه؟ Extended Message ، یعنی SMS چند تایی؟

e601
چهارشنبه 19 تیر 1387, 21:54 عصر
با سلام
لطفا اگه امکانش هست در مورد دستورات AT که sms دریافت شده را میخونن هم توضیح بدید. (منظورن دیکد کردن پیام نیست. منظورم این که وقتی یه پیام دریافت میشه چطوری باید بخونیمش و متنش رو دریافت کنیم بعد بریم سراغ دیکد کردن؟؟؟؟؟؟؟؟؟؟)

با تشکر...

noorsoft
پنج شنبه 20 تیر 1387, 10:04 صبح
AT+CMGF=0
برای اینکه مد PDU انتخاب بشه

AT+CMGR=x
برای خواندن پیام x در لیست
به جای x شماره ایندکس پیام در حافظه را وارد می کنید

reza6384
پنج شنبه 20 تیر 1387, 19:05 عصر
سلام.

من یه انتقاد دارم راجع به این تاپیک ، البته در جهت بهبود میزان بهره برداری.

به نظرم با وجود اینکه توی این تاپیک مطالب بسیار مفید و تا حد زیادی کافی بیان شده ، اما به دلیل اینکه به خاطر وجود پست های کاربران و پاسخ به اونها شلوغ شده، یک مقدار پیدا کردن مطالب آموزشیش سخت شده. منظورم اینه که بهتر بود که همه مطالب آموزش Encoding و Decoding یک جا جمع می شد و به صورت PDF در میومد.
البته با این وجود می دونم که مدیر بخش و همچنین Raravie خیلی زحمت کشیدن و این پست ها رو زدن و ازشون تشکر می کنم و می دونم که برای انجام این کار ( جمع آوری ) به احتمال زیاد وقت ندارند .

noorsoft
شنبه 22 تیر 1387, 15:43 عصر
سوالات و مشکلاتی که در بین مطالب مطرح شده هم به انجام درست کار کمک میکنه و به هرحال نمیشه یکسری پستها را بی دلیل حذف کرد

farzad1
پنج شنبه 03 مرداد 1387, 16:55 عصر
با عرض ادب و خسته نباشيد
آقا ما هر کاري کرديم نتونستيم ارسال با نام رو انجام بديم اگه ممکنه مشکل کد من رو بگين
ممنون مي شم از کمک شما
079189390500410004000C918919343492943200AA15CEF75B 1E76A7C36E403E8C7EBF41F3303BDC06

reza6384
جمعه 18 مرداد 1387, 01:27 صبح
بعد از این که مرکز پیام با کد 060804 متوجه شد ادامه داره و بتونه با دقت رد یابی کنه به یه کد احتیاج داره که در این قسمت قرار میگیره و میتونه یه عدد تصادفی بین 0000 و FFFF باشه و این عدد در سرآیند همه قسمتهای این پیام قرار میگیره.


سلام.
ببخشید، راجع به این عدد تصادفی. گرچه احتمالش 1 به 65536 هست، ولی ممکنه با یک SMS چند پارتی دیگه Collision بده ، درسته؟

raravaice
جمعه 18 مرداد 1387, 01:45 صبح
ببخشید، راجع به این عدد تصادفی. گرچه احتمالش 1 به 65536 هست، ولی ممکنه با یک SMS چند پارتی دیگه Collision بده ، درسته؟

البته این احتمال از 1 به 65536 هم عبور میکنه چون شما شماره مقصد رو توی این احتمال حساب نکردی و ضریب زمان این احتمال در حد میلی ثانیه هست اگر چنین اتفاقی برای کسی بیافته اون شخص یه آدم عادی نیست و قادر به معجزه هست.
شما بفرست من تضمین میکنم که هیچ تطبیقی با sms دیگه ای پیش نیاد. ;)

موفق باشید

reza6384
جمعه 18 مرداد 1387, 16:11 عصر
شما شماره مقصد رو توی این احتمال حساب نکردی و ضریب زمان این احتمال در حد میلی ثانیه هست اگر چنین اتفاقی برای کسی بیافته اون شخص یه آدم عادی نیست و قادر به معجزه هست.


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



شما بفرست من تضمین میکنم که هیچ تطبیقی با sms دیگه ای پیش نیاد. ;)


چشم. اگر Collision پیش اومدت خبرت می کنم.

prince-of-persia
شنبه 26 مرداد 1387, 00:00 صبح
سلام

کد یک سری کاراکتر ها مثل ],[,},{ در موبایل و کامپیوتر با هم متفاوت هست

مثلا کامپیوتر کد ] برابر است با 91
اما در موبایل اگر در حالت DefaultAlphabet باشیم 2 تا کاراکتر حسابس میکنه یکی با کد 27ودیگری 60 اما اگر در حالت UCS2 باشیم همان 91 هست.

حالا مشکل اینجاست که وقتی من یک متن DefaultAlphabet رو روی موبایل میفرستم جاهایی که همچین کاراکتر هایی هست بد نشون میده.

کسی می دونه مشکل از کجاست و چطوری باید بصورا اصولی حل اش کرد؟
راستی اگر یک متنی که مثلا داخلش [salam] هست رو توی کامپیوتر بگیرم بد نشون میده
چرا؟

noorsoft
شنبه 26 مرداد 1387, 08:17 صبح
ما چند تا کارکتر داریم که برای کد کردن و دیکد کردن با بقیه فرق دارن همونطور که اشاره کردید اول اینکارکتر ها یک کد 27 اضافه میشه در حالت 7 بیتی ولی در حالتهای 8 بیت و 16 بیت لازم نیست





@ =0
£ =1
$ =2
¥ =3
è =4
é = 5
ú = 6
ì = 7
ò = 8
Ç = 9
Ø = 11
$ = 12
Å = 14
å = 15
_ = 17
Æ = 28
æ = 29
ß = 30
Ê = 31
¤ = 36
Ä = 91
Ö = 92
Ñ = 93
Ü = 94
§ = 95
¿ = 96
ä = 123
ö = 124
ñ = 125
ü = 126
à = 127

^ = 27 + 20
{ = 27 + 40
} = 27 + 41
\ = 27+ 47
[ = 27 + 60
] = 27 + 62
~ = 27 + 61
| = 27 + 64
€ = 27 + 101

reza6384
شنبه 26 مرداد 1387, 12:04 عصر
البته این احتمال از 1 به 65536 هم عبور میکنه چون شما شماره مقصد رو توی این احتمال حساب نکردی و ضریب زمان این احتمال در حد میلی ثانیه هست اگر چنین اتفاقی برای کسی بیافته اون شخص یه آدم عادی نیست و قادر به معجزه هست.
شما بفرست من تضمین میکنم که هیچ تطبیقی با sms دیگه ای پیش نیاد. ;)

موفق باشید

یه چیزی رو فراموش کردیم و اون هم زمان ارساله. حتی اگر اون شماره تصادفی و شماره فرستنده هم یکی باشه، زمان ارسال دو SMS چند پارتی با هم در این حالت حتما فرق می کنه، چون از یک خط فرستاده میشه و به دلیل اینکه هیچ وقت نمی شه همزمان از یک خط چند SMS فرستاد می تونیم بگیم که هرگز همچنین برخوردی پیش نمیاد.
حالا فکر می کنم با توجه به این قضیه، می تونیم به جای عدد تصادفی همیشه یک عدد ثابت بفرستیم، اشکالی نباید داشته باشه. درسته؟

MM_Mofidi
یک شنبه 27 مرداد 1387, 02:16 صبح
دوستان از زحمات همه ممنون من یکسری برنامه مفید آماده کردم در حال ترجمه یک منبع بسیار کامل و جامع PDf هستم که تو این تاپیک بزارم

همینطور که همه دوستان میدونن شما در PDU میتونین خیلی از قسمتها را وارد نکنین پس شناسایی و از کد درآوردن اینگونه پیامها بسیار مشکه برای همین داشتن یک منبع همراه با سورس کد های اون قسمت با زبانهای VB6 .nte c# فکر کنم مفید باشد

الوعده وفا...... پس چي شد؟

noorsoft
یک شنبه 27 مرداد 1387, 08:26 صبح
سیاست آموزش تو تاپیک تغییر کرد اونچیزهایی که لازم بود تاپیک گفته شد
بقیه را هم من کتابهای اصلیشو تو تاپیک های مجزا گذاشتم

بقیه را هم میزارم

prince-of-persia
دوشنبه 04 شهریور 1387, 15:41 عصر
سلام

اگر بخواهیم انتقال پیام به صورت فشرده مثل اون چیزی که همراه اول داده داشته باشیم در قالب PDU چطور باید این کار رو بکنیم ؟
یعنی 200 کاراکتر در مد UCS2 ؟

با تشکر

gbg
سه شنبه 05 شهریور 1387, 01:25 صبح
سلام
من این متن رو برای مودم میفرستم
مودم هم ok میده ولی sms ارسال نمیشه


AT+CMGW=21
0035000B819021427715F70000FF07E8703B4D0EB701

prince-of-persia
سه شنبه 05 شهریور 1387, 09:29 صبح
بعد از وارد کردن متن پیام enter نزن و بجاش ctrl+z بزن و صبر کن

gbg
سه شنبه 05 شهریور 1387, 12:28 عصر
من بادلفی نوشتم
به جای 26 مقدار 27 نوشته بودم
همچنین
AT+CMGW=21باید بشه
AT+CMGS=21
ممنون

noorsoft
جمعه 08 شهریور 1387, 09:24 صبح
سلام

اگر بخواهیم انتقال پیام به صورت فشرده مثل اون چیزی که همراه اول داده داشته باشیم در قالب PDU چطور باید این کار رو بکنیم ؟
یعنی 200 کاراکتر در مد UCS2 ؟

با تشکر

قضیه ارسال 200 کارکتر با PDU که ما بحث شو کردیم فرق داره اجازه بدین یکسری توضیحات کامل جمع میکنم و تو تاپیک میزارم

prince-of-persia
جمعه 08 شهریور 1387, 13:32 عصر
بی صبرانه منتظر راهنمایی تون هستم .

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

با تشکر

reza6384
جمعه 15 شهریور 1387, 23:48 عصر
بله دیگه، باید فشرده سازی شده باشه. من فکر کردم که حتی اگر برای انتقال یک پیام فارسی بیایم برای هر حرف از 5 بیت(32 حرف فارسی) استفاده کنیم، یعنی 140 ضربدر 8 تقسیم بر 5 که میشه 224 کاراکتر . پس یقینا از فشرده سازی استفاده می کنه این نرم افزار ارتباطات سیار.
حالا فکر کنید چقدر با مزه میشه اگه یه نفر یه SMS اه 300 کاراکتری رو با این نرم افزار به یه گوشی Nokia 3310 بفرسته.

noorsoft
شنبه 16 شهریور 1387, 10:12 صبح
بله دیگه، باید فشرده سازی شده باشه. من فکر کردم که حتی اگر برای انتقال یک پیام فارسی بیایم برای هر حرف از 5 بیت(32 حرف فارسی) استفاده کنیم، یعنی 140 ضربدر 8 تقسیم بر 5 که میشه 224 کاراکتر . پس یقینا از فشرده سازی استفاده می کنه این نرم افزار ارتباطات سیار.
حالا فکر کنید چقدر با مزه میشه اگه یه نفر یه SMS اه 300 کاراکتری رو با این نرم افزار به یه گوشی Nokia 3310 بفرسته.

رضا جان اینطوری نیست
ارتباطات سیار اومده از طریق ابرمتنها بصورت XML روی خط دیتا اطلاعات را ارسال میکنه 1 نکته را بگم همراه اول 9kb دیتا میتونه ارسال کنه و این پیامها دارن از اون طریق ارسال می شن کاری به PDU نداره بلکه بصورت XML ارسال میشن

soheil_programmer
شنبه 16 شهریور 1387, 20:18 عصر
با سلام

من در بخش ارسال SMS با دستورات AT به مشکلی برخوردم در مورد کدینگ PDU
من در مورد اس ام اس های تک صفحه ای 7بیتی و UCS2 مشکلی ندارم اما SMS هام که بیشتر از یک صفحه میشه به مشکل بر میخورم!

مشکلم هم اینه که نمیدونم اس ام اس های بیشتر از 1 صفحه قبل از کدینگ خود متن تکه-تکه میشوند یا بعد از آن و همینطور هم چند کاراکتر، چند کاراکتر تکه-تکه میگردند؟؟؟

noorsoft
یک شنبه 17 شهریور 1387, 04:53 صبح
تو همین تاپیک جناب raravoice ارسال چند پارتی را کامل با ذکر مثال گفتن بخونید اگه جایش رو ایراد دارید نمونه بزارید تا بهتون بهتر بتونم کمک کنم

تکه تکه کردن متن ققبل از کدینگ صورت میگیره و بستگی به نوع کد کردن شما داره 7 بیت یا 16 بیت

reza6384
یک شنبه 17 شهریور 1387, 15:10 عصر
من یه نظر داشتم . راجع به بحثی که یکی از دوستان کرده بود در مورد اینکه اگر sms ما حاوی هر دو نوع کاراکترهای فارسی و انگلیسی باشه باید با انکدینگ UCS ارسال بشه که Noorsoft عزیز هم گفته بود که این امر واضحه و من هم باهاش موافقم.
نکته ای که می خوام بگم اینه که با توجه به تعرفه جدید ارتباطات سیار مبنی بر ارزونتر بودن sms فارسی ، وقتی که می خواهیم یک sms انگلیسی بفرستیم، چک کنیم که آیا تعداد حروف کمتر مساوی 70 هست یا نه. اگر بود همون SMS رو فارسی انکد کنیم و بفرستیم.

یه سوال هم داشتم. راجع به تفسیر Delivery Report. می خوام بدونم آیا مطرح شده و توضیح داده شده؟ اگر شده لطفا لینکش رو اینجا بذارین. خسته شدم اینقدر گشتم.

ممنون.

noorsoft
یک شنبه 17 شهریور 1387, 17:15 عصر
اگه قرار باشه با همراه اول اس ام اس بفرسید این ترفند خوبی میتونه باشه

در مورد Delivery Report هم این رو بگم که به صورت یک پیام براتون میاد که حاوی شماره طرف و تاریخ دریافته در واقع اینها رو از نوع پیام متوجه میشیم

soheil_programmer
یک شنبه 17 شهریور 1387, 20:15 عصر
اگه قرار باشه با همراه اول اس ام اس بفرسید این ترفند خوبی میتونه باشه

در مورد Delivery Report هم این رو بگم که به صورت یک پیام براتون میاد که حاوی شماره طرف و تاریخ دریافته در واقع اینها رو از نوع پیام متوجه میشیم

در اینجا منظورتون از نوع پیام چیه؟؟؟

soheil_programmer
یک شنبه 17 شهریور 1387, 20:28 عصر
با سلام

من مطالب آقای raravoice را کاملاً خوندم و بازم در اینجا بابت مطالب مفیدی که گفتند تشکر میکنم، اما مطالب گفته شده بوسیله آقای raravoice یه کمی با اون چیزی که من توی عمل در مورد نرم افزار گوشی sony ericsson دیدم فرق داره یکی از فرقاش هم سر اون عدد ثابت توی اس ام اس های چند پارتی هست که من توی مطالب آقای raravoice خودندم

060804-0000-02-01
یعنی کلاً 7 بایت اما توی عمل روی نرم افزار MyPhoneExplorer که درمورد گوشی های SonyEricsson وجود داره دیدم عدد 0500 را عدد ثابت گرفته که بهمراه 2بایت راندوم و بایت های شماره صفحه سرجمع میشه 6 بایت و اس ام اس فارسی - چند پارتی ما را بجای 66 کاراکتر (که آقای raravoice فرمودند،) میکنه 67 کاراکتر!!!!:افسرده:


در ضمن من در زیر نمونه کار نرم افزار MyPhoneExplorer را هم از لحظه کانکت تا پایان ارسال اس ام اس چند پارتی قرار میدم:



AT+CGSN
AT+CGSN

35462**1713**22

OK
ATI
ATI

Sony Ericsson W810

OK
AT+CSCS="UTF-8"
AT+CSCS="UTF-8"

OK
ATI3
ATI3

Sony Ericsson W810 Bluetooth Modem

OK
AT+CNMI=2,1,0,1
AT+CNMI=2,1,0,1

OK
AT*ECAM=1
AT*ECAM=1

OK
AT*EVH=?
AT*EVH=?

ERROR
AT+CBC
AT+CBC

+CBC: 0, 16

OK
AT+CSQ
AT+CSQ

+CSQ: 26,99

OK
AT+CSCA?
AT+CSCA?

+CSCA: "009891100500",129

OK
AT+CPMS="ME","ME"
AT+CPMS="ME","ME"

+CPMS: 118,162,118,162,118,162

OK
AT+CMMS=1
AT+CMMS=1

OK
AT+CMGS=154
AT+CMGS=154

>
0071000B819061297504F40008FF8C05000336030106450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 4506450645
0071000B819061297504F40008FF8C05000336030106450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 4506450645
+CMGS: 0

OK
AT+CMGS=154
AT+CMGS=154

>
0071000B819061297504F40008FF8C05000336030206450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 4506450645
0071000B819061297504F40008FF8C05000336030206450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 4506450645
+CMGS: 0

OK
AT+CMGS=152
AT+CMGS=152

>
0071000B819061297504F40008FF8A05000336030306450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 450645
0071000B819061297504F40008FF8A05000336030306450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 450645
+CMGS: 0

OK
AT+CMGW=154,3
AT+CMGW=154,3

>
0071000B819061297504F40008FF8C05000336030106450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 4506450645
0071000B819061297504F40008FF8C05000336030106450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 4506450645
+CMGW: 118

OK
AT+CMGW=154,3
AT+CMGW=154,3

>
0071000B819061297504F40008FF8C05000336030206450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 4506450645
0071000B819061297504F40008FF8C05000336030206450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 4506450645
+CMGW: 119

OK
AT+CMGW=152,3
AT+CMGW=152,3

>
0071000B819061297504F40008FF8A05000336030306450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 450645
0071000B819061297504F40008FF8A05000336030306450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 450645
+CMGW: 121

OK
AT+CBC
AT+CBC

+CBC: 0, 16

OK
AT+CSQ
AT+CSQ

+CSQ: 25,99

OK

noorsoft
یک شنبه 17 شهریور 1387, 21:20 عصر
سهیل جان این مورد رو قبلا گفتیم

http://barnamenevis.org/forum/showpost.php?p=531583&postcount=83

reza6384
دوشنبه 18 شهریور 1387, 13:40 عصر
اگه قرار باشه با همراه اول اس ام اس بفرسید این ترفند خوبی میتونه باشه

بله Noorsoft جان ، ایرانسل که خشک و تر رو با هم می سوزونه ، 16 تومن، چه فارسی چه انگلیسی.:چشمک::چشمک:



در مورد Delivery Report هم این رو بگم که به صورت یک پیام براتون میاد که حاوی شماره طرف و تاریخ دریافته در واقع اینها رو از نوع پیام متوجه میشیم


راجع به اون پیام Delivery چند تا سوال داشتم.
1- در سطر اول یک عدد می نویسه که همیشه ثابته، برای من 29 بود. نمی دونم چیه.

2- زمان ارسال 2 بار تکرار شده بود. دقیقا هم عین هم بود. ممکنه یکیش برای زمان ارسال باشه و یکیش برای زمان رسیدن. شاید اون sms همون ثانیه رسیده. درسته؟

3- برای تشحیص اینکه کدوم Delivery برای کدوم پیام ارسال شده است، باید از ترکیب شماره گیرنده و زمان استفاده کنیم؟ اگر بین ساعت کامپیوتر و ساعت پیام اختلاف وجود داشته باشه اونوقته که این Identification به هم میریزه. منظورم اینه که ساعت ارسال sms رو ServiceCeter میزنه. حتی اگر ساعت 8:10 باشه و ساعت گوشی رو روی 4:30 تنظیم کنیم و یک sms بفرستیم، در PDU مربوط یه SMS رسیده میبینیم که ساعتش 8:10 دقیقه هست.




در اینجا منظورتون از نوع پیام چیه؟؟؟


منظورم این تالار و احتمالا این تاپیک بود. چون خیلی شلوغ شده.

noorsoft
دوشنبه 18 شهریور 1387, 14:01 عصر
من قسمتهای این نوع پیام رو میگم از روی این برین جلو
شما بعد از FirstOctet به این ترتیب بخونین
یک بایت دیگه رو میخونین
طول شماره فرستنده را میخونین
نوع آدرس را میخونین
شماره فرستنده را میخونین
تاریخ دریافت پیام
تاریخ رسیدن پیام به مقصد

توضیح اینکه این نوع پیامها متن ندارند

Shahab_sa32
سه شنبه 19 شهریور 1387, 07:47 صبح
با عرض سلام و خسته نباشید خدمت تمامی دوستان عزیز. من تمام مطالب این تاپیک رو خوندم. واقعاً خسته نباشید. دستتون درد نکنه. ولی یه سوال از خدمت دوست عزیزم Noorsoft عزیز داشتم در مورد ارسال پیام با نام. من که هر کاری کردم با راهنمایی های شما نتونستم این کار رو انجام بدم. ولی تو یکی از این سایتهای خارجی خوندم که برای این کار از GSM نمیشه استفاده کرد و مودم ما باید پروتوکول(SMPP(Short Message Peer to Peer رو support کنه. حالا می خواستم ببینم این مطلب درسته یا نه. آخه من دقیقا کد شما رو هم به مودم فرستادم error می ده. ممنون از مطالب ارزشمندتون و راهنمایی های خوبتون.

noorsoft
سه شنبه 19 شهریور 1387, 17:02 عصر
ما دو روش داریم یکی ارسال بصورت ایمیل هست که روی اکثر گوشیهای سونی اریکسون و نوکیا جواب میده که همونه که توضیح دادم
و یک روش دیگه هم داریم که ربطی به pdu نداره

Shahab_sa32
سه شنبه 19 شهریور 1387, 18:11 عصر
می تونین روش دوم رو هم توضیح بدین؟ روش email شما رو روی GSM Modem خودم که مارکش tatung است امتحان کردم که جواب نداد. ممنون. :تشویق:

reza6384
یک شنبه 24 شهریور 1387, 17:35 عصر
من داشتم یک مروری به مطالب گذشته میکردم دیدم چند تا مطلب دیگه از قلم افتاده و او اینکه UDH برای DefualtAlphabet که همون مد 7 بیته
یعنی اگه قرار باشه یک پیام چند پارتی در مد 7 بیت ارسال کنیم قضیه چی میشه

همونطور که در پستهای قبل فهمیدیم ما باید در UDH (User Data Header) مشخص کنیم در حال ارسال یک پیام بلند چند پارتی هستیم
اگه یادتون باشه در اونجا یک عدد ثابت 060804 را وارد می کردیم این در واقع همون هدر دیتای ما میشه
06 در اونجا مشخص میکرد UDH ما طولش 6 بایته
08 نشاندهنده این بود که ما در مد 16 بیتی اطلاعات را کد کردیم
04 مشخص میکنه که چهاربایت دیگه دنباله داره

حال در مورد پیامهای بلند در 7 بیت قضیه به این صورت تغییر میکنه
به جای 060804 از 050003 استفاده میکنیم بدین معنی که
05 نشون میده طول هدر ما 5 بایته
00 اطلاعات بصورت 7 بیت کد شدند DefualtAlphabet
03 مشخص میکنه سه بایت دیگه دنباله داره

تا اینجا یک چیز مشخص شد و او اینه که طول هدر در 7 بیت یکی کمتر از 16 بیته
تا اینجا ما در هر دو حالت 3 بایت را داشتیم در 16 بیت 04 08 06 و در 7 بیت 03 00 05
در 16 بیت ما دو بایت را برای رفرنس پیام در نظر میگرفتیم که بصورت اتفاقی انتخاب میشد و برای تمام قسمتها یکسان بود ولی در 7 بیت ما از یک بایت استفاده میکنیم یعنی ما یک رفرنس یک بایتی داریم و این همون یک بایت اختلاف هدر هاست و بقیه قضایا مثل قبل تکرار میشه یعنی



0500031D0301

05003 هدر
1D رفرنس پیام که بصورت تصادفی ایجاد مشه
03 تعداد پارتها که قراره ارسال بشه
01 شماره اندکس پیام


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

Noorsoft جان، من داشت سرم می ترکید، یه مشکلی برام پیش اومده بود، من از روی پستی که در صفحه 2 این تاپیک زده شده بود فکر می کردم که هدر ما همیشه 7 بایته و با 060804 شروع میشه. نمی دونستم که این برای حالت 16 بیته.

حالا یک سوال دارم، من با همین هدر 060804 و عدد تصادفی و تعداد و ترتیب بعدش
- 060804B7090201 , 060804B7090202 - یک پیام دو بخشی انگلیسی فرستادم و توی گوشیم هم به درستی نمایش داده شد.
آیا الزامی داره که برای پیام UCS2 از 060804 و برای ASCII از 050003 استفاده کنیم؟
من فکر نمی کنم اینجوری باشه، چون هم یک پیام چند بخشی ASCII با 060804 فرستادم و هم اینکه وقتی PDU یک پیام چند بخشی UCS2 رو نگاه کردم دیدم که هدر اون با 050003 شروع شده.

reza6384
یک شنبه 24 شهریور 1387, 18:18 عصر
اگه مطالب دیر شد ببخشید من شدیدا بیمار هستم و خیلی ار کارام عقب افتاده

روش اول برای ارسال پیام با نام
با این روش پیام ارسالی شما روی موبایل به جای شماره شما یک نام به دلخواه شما نشان داده می شود.
به این مثال توجه کنید


06918919015000040C9189193380000032008060617131040C 15CEF75B1E76A7C36E403E8C7EBF41F3303BDC06


من تنها تفاوت کار را با روشهای قبلی میگم چون بقیش مثل قبله
نکته اول: 04 به جای کدی که مشخص کننده Dlivery بود جایگزین میشه

نکنه بعدی پروتکل را 32 انتخاب کنید
بقیه مراحل مثل قبل انجام میشه
نکته آخر نامی که قصد دارید به جای شماره شما روی موبایل نشان داده شود را در ابتدای متن پیام قرار دهید البته بصورت یک آدرس ایمیل در مثال فوق بخ جای شماره Nooranian@yahoo نشان داده میشود و متن پیام هم salam نشان داده می شود

موفق و موید باشید

جناب Noorsoft من هر چی این PDU رو تست کردم ارسال نشد و CMS ERROR 304 رو میداد.



AT+CMGF=0
+CMGF: 0
OK
AT+CMGS=44
> 06918919015000040C9189193380000032008060617131040C 15CEF75B1E76A7C36E403E8C7EBF
41F3303BDC06
+CMS ERROR: 304


دو تا سوال داشتم :
1- در این فرمی که گفتید Message Reference رو که بعد از Delivery میومد ذکر نکردین
2-طول نام فرستنده چگونه مشخص میشه؟

reza6384
جمعه 29 شهریور 1387, 14:33 عصر
سلام.
نمی دونم چرا چند روزه که این تاپیک فعالیتش کم شده.

به نظر من یکی از بحث هایی که باید برای تکمیل مطالب این تاپیک انجام بشه محاسبه طول پیام در پیام های چند بخشی چه ASCII و چه UCS2 هست.

گفته شد که برای ارسال SMS فارسی مثلا 0608040B0C0201 رو ارسال کنیم و 66 کاراکتر رو از متن جدا کنیم ، خوب اینجا مشخصه که چون 7 بایت برای Header کم میشه ، حداکثر می تونیم در 133 بایت باقیمانده 66 کاراکتر رو ارسال کنیم.

اما، وقتی Header ما مثلا 0500038F0201 باشه، 6 بایت برای هدر کم میشه و ما 134 بایت داریم که برای اینکه ببینیم که چند حرف رو با این تعداد بایت میشه بفرستیم :


(134*8) / 7 = 153.14



یعنی 153 کاراکتر ، اما در عمل انگار همه جا برای هر پارت از پیام 152 کاراکتر ارسال می کنند با هدر 050003 که برای اون 152 حرف 133 بایت لازمه و برای هدر هم 6 بایت که جمعا میشه 139، ولی اول هر پیام چند بخشی رو که نگاه کردم دیدم A0 هست برای بخش های غیر پایانی پیام.

esmail_fathi
شنبه 30 شهریور 1387, 01:34 صبح
سلام
من مدتی هست که دارم این مطالب رو دنبال میکنم. از همه بسیار ممنونم.

جناب Noorsoft من هر چی این PDU رو تست کردم ارسال نشد و CMS ERROR 304 رو میداد.
خواستم قسمت ارسال نام به جای شماره رو توضیح بدم. کدی که اقای نورسافت نوشته برای وقتیه که پیام اومده میخوای بخونیش به همین خاطر هم هست که error میده. اما اگه بخوای بفرستی قضیه کمی متفاوت میشه.
همه چیز عادی درست میشه و فقط در قسمت پروتکل به جای 00 میذارین 32. و نکته کلیدی دیگه هم اینه که در اسمی که میخواین به جای شماره بنویسین حتما باید علامت @ وجود داشت باشه. و چون این علامت کد کردنش یه استثنا بود (صفحه 12 همین تاپیک ) به همین خاطر باید مراقب باشین که به جای کد 65 باید اینجا 00 رو بذارین. همین
حالا من یه مثال میذارم اینجا :
برای ارسال عبارت salam و جایگزینی کلمه iran@tehran این کد رو مفرستیم:

0011000C91891962895812320064116979D80DA097D1F2B01B 340FB3C36D
دیدن چقدر ساده بود. راستی این روش با اکثر گوشی ها هم کار میکنه. گوشی من که یه گوشی قدیمی داغونه روش جواب داد.
موفق باشین

Shahab_sa32
شنبه 30 شهریور 1387, 19:14 عصر
سلام
من مدتی هست که دارم این مطالب رو دنبال میکنم. از همه بسیار ممنونم.

خواستم قسمت ارسال نام به جای شماره رو توضیح بدم. کدی که اقای نورسافت نوشته برای وقتیه که پیام اومده میخوای بخونیش به همین خاطر هم هست که error میده. اما اگه بخوای بفرستی قضیه کمی متفاوت میشه.
همه چیز عادی درست میشه و فقط در قسمت پروتکل به جای 00 میذارین 32. و نکته کلیدی دیگه هم اینه که در اسمی که میخواین به جای شماره بنویسین حتما باید علامت @ وجود داشت باشه. و چون این علامت کد کردنش یه استثنا بود (صفحه 12 همین تاپیک ) به همین خاطر باید مراقب باشین که به جای کد 65 باید اینجا 00 رو بذارین. همین
حالا من یه مثال میذارم اینجا :
برای ارسال عبارت salam و جایگزینی کلمه iran@tehran این کد رو مفرستیم:

0011000C91891962895812320064116979D80DA097D1F2B01B 340FB3C36D
دیدن چقدر ساده بود. راستی این روش با اکثر گوشی ها هم کار میکنه. گوشی من که یه گوشی قدیمی داغونه روش جواب داد.
موفق باشین
سلام دوست عزیز. من این روش رو هم روی GSM MODEM امتحان کردم جواب نداد. یعنی به جای اینکه Iran@Tehran رو در فسمت شماره بیاره در قسمت پیام آورد.

esmail_fathi
شنبه 30 شهریور 1387, 22:11 عصر
من این روش رو هم روی GSM MODEM امتحان کردم جواب نداد. یعنی به جای اینکه Iran@Tehran رو در فسمت شماره بیاره در قسمت پیام آورد.
عین کدی که امتحان میکنین و جواب نمیده رو اینجا میذارین؟ شاید جایی اشتباه میکنین. من از این کد 50 60 تا پیام فرستادم و همش هم درست کار کرد.

reza6384
یک شنبه 31 شهریور 1387, 19:46 عصر
0011000C91891962895812320064116979D80DA097D1F2B01B 340FB3C36D


آقای فتحی، میشه لطف کنید قسمتی رو که HighLigh کردم توضیح بدین که از چه بخش هایی تشکیل شده، منظورم محل قرار گرفتن Tehran@Iran و خود پیام salam هست.

خیلی ممنون.

noorsoft
دوشنبه 01 مهر 1387, 11:13 صبح
دوستان من یک مدت کمی گرفتار بودم
آقا رضا این قسمتی که شما توضیحش رو میخواین به این صورته که

64 طول عمر پیامه که میشه 505 دقیقه
11 طول پیامه که میشه 17 کارکتر
بقیه هم متن پیامه


بازهم یک نکته رو تکرار میکنم این نوع ارسال روی بعضی از گوشی ها جواب نمی ده مخصوصا روی Gsm Modem چون اکثر نرم افزارها با همون روشهایی متن پیام رو نمایش میدن که توضیحاتش داده شده پس آدرس ایمیل رو در متن پیام نمایش میدن

Shahab_sa32
دوشنبه 01 مهر 1387, 14:21 عصر
دوستان من یک مدت کمی گرفتار بودم
آقا رضا این قسمتی که شما توضیحش رو میخواین به این صورته که

64 طول عمر پیامه که میشه 505 دقیقه
11 طول پیامه که میشه 17 کارکتر
بقیه هم متن پیامه


بازهم یک نکته رو تکرار میکنم این نوع ارسال روی بعضی از گوشی ها جواب نمی ده مخصوصا روی Gsm Modem چون اکثر نرم افزارها با همون روشهایی متن پیام رو نمایش میدن که توضیحاتش داده شده پس آدرس ایمیل رو در متن پیام نمایش میدن
خسته نباشید جناب noorsoft . روشی هم هست که روی GSM Modem جواب بده؟

reza6384
دوشنبه 01 مهر 1387, 14:42 عصر
سلام.



دوستان من یک مدت کمی گرفتار بودم


دلمون برات تنگ شده بود.



64 طول عمر پیامه که میشه 505 دقیقه
11 طول پیامه که میشه 17 کارکتر
بقیه هم متن پیامه


خیلی ممنون. متوجه شدم. در اصل ما عبارت "iran@tehran salam"
رو کد کردیم و فرسادیم.
من این رو به یک گوشی Nokia 1100 فرستادم، همه متن رو نشون دادم، ولی به گوشی K810 خودم فرستادم، نام فرستنده شد iran@tehran و پیام شد salam .
حالا یه سوال.
حتما این جناب @ باید باشن؟ من فکر کنم Sms های تبلیغاتی ای برام اومده بود که @ نداشت. و این سوال تکراری : ایرانسل از این روش ارسال می کنه؟

noorsoft
دوشنبه 01 مهر 1387, 14:52 عصر
ایرانسل جدیدا امکانی اضافه کرده که شما به جای خرید سیم کارت میتونین نامتون را در قسمت ارسال کننده داشته باشین ولی هنوز در حاله تسته و روانه بازار نشده

noorsoft
دوشنبه 01 مهر 1387, 14:53 عصر
خسته نباشید جناب noorsoft . روشی هم هست که روی GSM Modem جواب بده؟

با ارسال بصورت ایمیل نمیشه

reza6384
سه شنبه 02 مهر 1387, 01:56 صبح
می گم این روش یه بدی داره، یعنی تقریبا نیمه کاره هست. منظورم اینه که درسته که شماره رو نشون نمی ده ، اما :
1- اگر این Sms از نوع Email به کسی که گوشی قدیمی داره ارسال بشه ، شماره فرستنده نشون داده می شه و بقیه هم ( همون قسمتی که نام فرستنده انتخاب کردیم ) در متن پیام نمایش داده میشه.
2- امکان Reply برای گیرنده وجود داره.

در ضمن من تست کردم. حتما الزامی به وجود @ نیست. اگر متن پیام شما این باشه :
This is a test
در نتیجه This میشه نام فرستنده و is a test میشه متن پیام. یعنی نام فرستنده بخش اولی رشته تا اولین کاراکتر Space هست.

Shahab_sa32
سه شنبه 02 مهر 1387, 14:46 عصر
با ارسال بصورت ایمیل نمیشه
منظور من با استفاده از ايميل نبود. مي گم كلا راهي وجود داره كه ما به جاي شماره تلفن از اسم استفاده كنيم و با GSM Modem ارسالش كنيم يا نه؟؟؟ ببخشيد اگه من زياد سؤال مي پرسم.:خجالت:

esmail_fathi
دوشنبه 08 مهر 1387, 11:00 صبح
در ضمن من تست کردم. حتما الزامی به وجود @ نیست. اگر متن پیام شما این باشه :
This is a test
در نتیجه This میشه نام فرستنده و is a test میشه متن پیام. یعنی نام فرستنده بخش اولی رشته تا اولین کاراکتر Space هست.
سلام دوستان
اقا رضا شما با چه گوشی این کار رو کردین؟ مدل گوشی منظورمه! اخه من با w910 سوني اريكسون بدون @ نتونستم اين كار رو انجام بدم.
ممنون

reza6384
چهارشنبه 10 مهر 1387, 02:20 صبح
سلام اسماعیل جان.
من با گوشی SonyEricsson K810 این کار رو کردم.

Shahab_sa32
شنبه 13 مهر 1387, 18:22 عصر
ما دو روش داریم یکی ارسال بصورت ایمیل هست که روی اکثر گوشیهای سونی اریکسون و نوکیا جواب میده که همونه که توضیح دادم
و یک روش دیگه هم داریم که ربطی به pdu نداره
سلام مجدد خدمت تمامی اساتید مخصوصا جناب Noorsoft عزیز. اگه براتون امکان داره روش دوم رو هم توضیح بدید ممنون می شم.

noorsoft
دوشنبه 15 مهر 1387, 08:58 صبح
روش دوم که من گفتم اصلا کاری به ارسال از طریق pdu و دستورات At نداره
در واقع از طریق ساختار داخلی ماژول جی اس ام این کار صورت میگیره
موبایل از چند قسمت اصلی تشکیل شده یک مدار Fr داره یک قسمت اصلی به نام UEM و یک CPU شما وقتی موبایل رو به کامپیوتر وصل میکنید از طریق Fbus به cpu وصل میشین دستورات AT که شما به موبایل میدین از طریق Cpu به ماژول Gsm فرستاده میشه و بعد این ماژول دستورات شما را به صورت کدهای باینری به Uem میفرسته تا از اون طریق به Bts ارسال بشه پس در واقع مودمهایی که at و pdu ساپورت هستند که ماژول Gsm رو داشته باشن ولی اگه دقت کنید موبایلهایی که این ماژول رو ندارند هم خودشون امکان ارسال اس ام اس رو دارن دلیلش اینه که Uem کد های قابل فهم Bts رو ارسال میکنه .
در این مرحله Uem شماره سیم کارت شما را به Bts ارسال میکنه اگه شما قصد داشته باشین اس ام اس بی نام بدین باید این مرحله را دور بزنید در واقع از ماژول جی اس ام استفاده نکنید و از طریق Mbus (جایی که موبایل رو فلش می کنن) به مدار Rf و Uem وصل بشین و تمام کدهای باینری اس ام اس رو به Bts بفرستید بدون اضافه کردن شماره سیم کارت
امیدوارم متوجه منظورم شده باشین چون برای این کار باید با ساختار داخلی موبایل آشنا باشین.

Shahab_sa32
سه شنبه 16 مهر 1387, 08:05 صبح
ممنون از توضیحتون جناب Noorsoft. خیلی لطف کردین.

tc1000
سه شنبه 30 مهر 1387, 14:13 عصر
با تشکر از تمامی دوستان

اگه بخوایم از طریق GSM MODEM تاتونگ این کار رو انجام بدیم چکار کنیم.؟
آیا امکان پذیر هست؟ خیلی واجبه

Superboy10
جمعه 10 آبان 1387, 09:24 صبح
قوی ترین نرم افزاری که در رابطه به PDU طراحی شده
سلام دوست عزیز
با تشکر از زحمات شم و همکارانتون لطفا راهنمایی کنید دانلود نمیشه یعنی فایل بلافاصله پس از شروع دانلود تموم میشه

gholamHosseinGandomkar
چهارشنبه 15 آبان 1387, 00:37 صبح
دوست عزیز با تشکر از اطلاعات مفید در مورد دریافت و ارسال sms
من یک پیام لاتین دوقسمتی دریافت کردم با توجه به اینکه یک پیام لاتین 160 بایت و با کسر اطلاعات پیام چند قسمتی وقتی از آن 160 کسر می کنم عدد 6 بایت را بعد از encode شدن حرف @ در اول متن قرار می گیرد . ممکن یک مثال در مورد ارسال و دریافت یک پیام چند قسمتی لاتین ارائه دهید

noorsoft
یک شنبه 19 آبان 1387, 16:55 عصر
با تشکر از تمامی دوستان

اگه بخوایم از طریق GSM MODEM تاتونگ این کار رو انجام بدیم چکار کنیم.؟
آیا امکان پذیر هست؟ خیلی واجبه


مودمهای تاتونگ را با سرعت 19200 و 115200 کار میکنند
فقط باید هر بار مودم روشن میشه حدود 1 دقیقه برای راه اندازی مودم صبر کنید
طریقه استفاده از دستورات هم مانند مطالب بیان شده در سایت می باشد

موفق باشید

noorsoft
یک شنبه 19 آبان 1387, 16:57 عصر
سلام دوست عزیز
با تشکر از زحمات شم و همکارانتون لطفا راهنمایی کنید دانلود نمیشه یعنی فایل بلافاصله پس از شروع دانلود تموم میشه


لینک سالمه یکبار دیگه سعی کنید

sas523
پنج شنبه 30 آبان 1387, 12:37 عصر
با سلام

من يه سوال خيلي پيش پا افتاده دارم

PDU چيست؟!!!
:">
:">

mohsen_abdolahi
سه شنبه 12 آذر 1387, 22:34 عصر
ye nega be in link bendazid bad nist
http://twit88.com/home/utility/sms-pdu-encode-decode
_________________________________________________
www.smartech.ir (http://www.smartech.ir)

Mah
چهارشنبه 13 آذر 1387, 12:45 عصر
سلام دوستان و اساتید عزیز :
من هم در این قسمت مشکل دارم .
1- یعنی درست متوجه نشدم که چرا 64+3=67 ~~ 65 = EMS ارسال شده ?????
2- لطفاً در مورد پروتکلها بیشتر توضیح دهید . ما می توانیم در ایران با استفاده از امکانات اپراتورهای موجود Email ارسال نمائیم .
3- لطفا راجب تکنولوژیهای EMS, MMS را در تاپیکهای مجزا و مثل این تاپیک پربار بحث نمائید .

منتظریم .......


موفق و پیروز باشید .


[code]

24 : این عدد که یکی از پر معنا ترین اعداد برای ما هست 2 تا مسئله رو برامون روشن میکنه.

این عدد چندین حالت میتونه داشته باشه که من عام اون رو بهتون میگم.
04: برای SMS یعنی شخصی که پیام رو فرستاده درخواست گزارش یا همون Delivery نکرده.
24: برای SMSیعنی شخصی که پیام رو فرستاده درخواست گزارش یا همون Delivery کرده.

40: برای EMSیعنی شخصی که پیام رو فرستاده درخواست گزارش یا همون Delivery نکرده.
44: برای EMS یعنی شخصی که پیام رو فرستاده درخواست گزارش یا همون Delivery کرده.

06: پیام فعلی یک گزارش هست.

البته این اعداد همینجوری یلخی هم به دست نیامده و با 0 و 1 شده معادل باینری اونا سرو کار داره. ولی کلیات کار رو تا اینجا داشته باشید کفایت میکنه.

پس تا اینجا ما فهمیدیم که با این عدد به 2 دسته اطلاعات میشه پی برد یکی نوع پیام و دیگری آیا درخواست گزارش از طرف فرستنده ارسال شده یا نه.

حالا میخواهیم دقیق از روی عددی که توی این بایت وجود داره بفهمیم که نوع این کد چیه؟



SMS دریافت شده = 0
SMS ذخیره شده = 1
گزارش دریافت یک پیام = 2
EMS دریافت شده = 64
EMS ذخیره شده = 65
البته اون عدد 24 در مبنای 16 هست و این عدد هایی که من نوشتم تا اینجای کار ربطی به اون 24 نداره و همچنین در مبنای 10 هستند.

اینجا باید عدد 24H رو با 3 و 64 در مبنای 10 And کنیم و هر دو نتیجه رو با هم جمع کنیم یعنی :

36 دسیمال = 24 هگز = 00100100 باینری
AND
3 دسیمال = 3 هگز = 00000011 باینری
جواب1
0 دسیمال = 0 هگز = 00000000 باینری

و داریم

36 دسیمال = 24 هگز = 00100100 باینری
AND
64 دسیمال = 40 هگز = 01000000 باینری
جواب2
0 دسیمال = 0 هگز = 00000000 باینری

که در جمع 2 جواب به عدد 0 میرسیم که میشه : SMS دریافت شده = 0

فقط امیدوارم با AND باینری آشنا باشید!
AND باینری!
0AND0=0
0AND1=0
1AND1=1

پس ما با AND کردن این عدد با 3 و 64 و جمع نتیجه ها به این نکته پی میبری که پیام ما چیه ولی یه نکته که اهمیت داره و کاربرد نداره اینه که:
اگر جواب اول بشه 3 و جواب دوم بشه 64 نوع پیام میشه : EMS ارسال شده

alireza_roosta
دوشنبه 23 دی 1387, 14:25 عصر
با سلام خدمت دوستان عزیزی که این تاپیک کم نظیر رو ایجاد کردند.

من کلیه مراحل رو پیگیری کردم اما یه اتفاق عجیب می افته اونم اینه که :

وقتی از طریق hyper terminal اس ام اس فارسی می فرستم به درستی کار میکنه. اما وقتی با vb.net و با استفاده از
پورت سریال این کار را انجام می دم بعد از ارسال chr(26 ، پیغام Error می ده. جالب اینه که دستورات عینا در هر دو مورد
مثل هم هستند :

1- ابتدا با دستور زیر مد ارسال رو به PDU تبدیل می کنم :

AT+CMGF=0
در هر دو حالت (Hyper Terminal و VB.NET) پیغام OK رو دریافت می کنم.

2- سپس دستور زیر را وارد می کنم :
AT+CMGS=طول پیام

در هر دو مورد بعد از ارسال این دستور کاراکتر "<" دیده می شود که منتظر متن تبدیل شده به مد PDU است

3- سپس متن کامل Encode شده را وارد کرده (و پس از آن در HyperTerminal کلیدهای کنترل + Z را می فشارم ولی در
برنامه CHR(26) را با متن Encode شده کانکت کرده و بر روی پورت سریال WRITE می کنم )
(البته به طور مثال شماره گیرنده اینه : 09120000000)
0011000B819021000000F00008FF080633064406270645

در حالت اول (Hyper Terminal) ایندکس پیام ارسال شده به همراه پیغام OK دریافت می کنم
اما در حالت دوم پیغام ERROR می ده

به نظر شما مشکل از کجا می تونه باشه ؟؟؟

پیشاپیش از جوابی که لطف می کنید ممنونم...

noorsoft
پنج شنبه 26 دی 1387, 04:43 صبح
این PDU ای که شما درست کردین باید کلمه "سلام" را به شماره 09120000000 ارسال کنه
اگه شما با خطایی روبه رو میشین باید کد خطا را هم بگین تا دلیل خطا مشخص بشه من در یک تاپیک جدید لیست خطاهای Gsm را قرار می دم شماره خطا را از آنجا تست کنید

quiet_buzz
پنج شنبه 26 دی 1387, 12:28 عصر
قسمت هفتم : طول عمر پیام

این قسمت از کد ما شامل طول عمر و مدت زمانی که یک پیام میتونه تو شبکه سردر گم بمونه تا به مقصد برسه هست.

که برابر است با:

1 ساعت = 0B
3 ساعت = 1D
6 ساعت = 47
12 ساعت = 8F
1 روز = A7
1 هفته = C4
حداکثر = FF

موفق باشید

مگر خود مخابرات زمانی رو در نظر نمیگیره؟
با این وجود خو دبرنامه نویس میتونه این زمان رو تغییر بده، درسته؟
آیا این امر ممکن هست؟؟

quiet_buzz
پنج شنبه 26 دی 1387, 13:08 عصر
بچه ها من كار گرد اوريم تموم شد و از تركيب بهترين نمونه ها بهترين چيز رو براي خودم نوشتم ...

فقط به چند تا نكته برخورد كردم كه لازم دونستم ذكر كنم ... اون چيزهايي كه دوست خوبمون اقاي raravaice ذكر كردن براي Encode كردن كافي بوده .. و تقريبا كامل بود ... يعني همين مطالب براي ارسال كفايت ميكنه ولي بر Decode كردن ماجرا فرق داره و يك قسمت هم براي زمان دريافت وجود داره كه بايد ذكر بشه .. همچنين چند تكنيك هم وجود داره كه بايد ذكر بشه ...

از raravaice عزيز ميخوام كه حرفاي گفته شده رو به دل نگيره و به چشم برادري ببينه ...

همچنين از raravaice جان ميخوام به بحث ادامه بده و Decode رو هم ذكر كنه تا يك لطفي به دوستاني كرده باشه كه در اينده نياز به يك منبع دارن ... بدون يقين گفته هاي ايشون بعد ها بدرد افرادي ميخورن ...


آقا مهران امکانش هست برنامه ای که میفرمایید یا DLL مربوطه رو برای استفاده سایرین در سایت قرار بدید؟

noorsoft
شنبه 28 دی 1387, 06:11 صبح
مگر خود مخابرات زمانی رو در نظر نمیگیره؟
با این وجود خو دبرنامه نویس میتونه این زمان رو تغییر بده، درسته؟
آیا این امر ممکن هست؟؟

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

Mah
شنبه 28 دی 1387, 21:19 عصر
سلام .
من برای ارسال پیام چند پارتی مشکل دارم .
این متن پیام منه که دو پارت میشه :

به نام خداوند بخشنده مهربان
یا رزاق یا رزاق یا رزاق
یا رزاق یا رزاق یا رزاق
یا رزاق یا رزاق یا رزاق

برای ارسال در #C هم این طوری عمل می کنم :


SP.Write("AT+CMGS=" + len.ToString());
b[0] = 13;
SP.Write(b, 0, 1);
SP.Write(stOut[i]);
b[0] = 26;
SP.Write(b, 0, 1);


PDU های ارسالی :
پارت اول :

AT+CMGS=153 0071000B819021336183F10008FF8B0608042AC90201062806 4700200646062706450020062E062F062706480646062F0020 0628062E06340646062F064700200645064706310628062706 46000D000A06CC062700200631063206270642002006CC0627 00200631063206270642002006CC0627002006310632062706 42000D000A06CC062700200631063206270642002006CC0627 00200631
پارت دوم :

AT+CMGS=93 0071000B819021336183F10008FF4F060804C8C30202063206 270642002006CC062700200631063206270642000D000A06CC 062700200631063206270642002006CC062700200631063206 270642002006CC062700200631063206270642

با Trace برنامه متوجه شدم OK میگیرم یعنی هیچ خطایی ندارم . اما پیامی در یافت نمی کنم .
لطفاً سریعتر راهنمایی فرمائید .

noorsoft
یک شنبه 29 دی 1387, 07:08 صبح
دوست عزیز PDU شما درسته فقط مشکل اینجاست که شما باید بین ارسال دو پارت کمی صبر کنید یعنی فورا پارت دوم رو پشت سر پارت اول نفرستید

Mah
یک شنبه 29 دی 1387, 14:28 عصر
سلام .
درست گفتید . ممنون
اما الان این خطا را می بینم .

A device attached to the system is not functioning.

یعنی چی ؟؟؟

quiet_buzz
دوشنبه 14 بهمن 1387, 10:03 صبح
من کد دوستمون رو امتحان کردم. برای من خطایی نمیده ولی هر پارت به صورت اس ام اس جدا ارسال میشه
چه کار باید کرد که هر دو پیام در قالب یک اس ام اس ارسال بشن ؟
چون اینطوری درست نیست!

quiet_buzz
دوشنبه 14 بهمن 1387, 11:23 صبح
یک سوال داشتم که چون مربوط به PDU هست اینجا میپرسم.
دو فرمت alphabet و UCS2 فرمت های PDU هستن؟ چه فرقی دارن؟

quiet_buzz
دوشنبه 14 بهمن 1387, 12:20 عصر
یک سوال دیگه، در کدی دیدم که شماره سرویس رو با مقدار "+9891100500" مقداردهی کرده بود. آیا این همون شماره مرکز پیام هست؟؟!!! چرا با این مقدار مقداردهی میشه؟
مگرنه اینکه با ما میخوایم از گوشی متصل اس ام اس ارسال کنیم؟

noorsoft
دوشنبه 14 بهمن 1387, 14:37 عصر
فرقی نمی کنه شما با مودم کار کنید یا موبایل اگر شما در PDU همانطور که قبلا گفته شده باید 00 استفاده کنید که دیگر احتیاج به دادن شماره مرکز سرویس نباشد در غیر اینصورت باشد شماره را وارد نمایید

noorsoft
دوشنبه 14 بهمن 1387, 14:43 عصر
یک سوال داشتم که چون مربوط به PDU هست اینجا میپرسم.
دو فرمت alphabet و UCS2 فرمت های PDU هستن؟ چه فرقی دارن؟

alphabet برای پیامهای انگلیسی استفاده میشه
UCS2 برای پیامهای فارسی استفاده میشه

nikraftar
دوشنبه 21 بهمن 1387, 18:47 عصر
سلام
کسی کد ارسال این pdu ها رو به پورت com توی c# داره?
ممنون میشم

noorsoft
سه شنبه 22 بهمن 1387, 08:46 صبح
شما باید در تاپیک نمونه برنامه های ارسال اس ام اس نمونه هایی را پیدا کنید

mehran20_200
دوشنبه 24 فروردین 1388, 20:39 عصر
فرقی نمی کنه شما با مودم کار کنید یا موبایل اگر شما در PDU همانطور که قبلا گفته شده باید 00 استفاده کنید که دیگر احتیاج به دادن شماره مرکز سرویس نباشد در غیر اینصورت باشد شماره را وارد نمایید

ببخشید noorsoft عزیز، این اشتباه است
من این را تست کردم نه توی گوشی جواب داد و نه روی AT Command

noorsoft
دوشنبه 31 فروردین 1388, 05:07 صبح
دوست عزیز شما می توانید به جای وارد کردن شماره مرکز از 00 استفاده کنید و هیچ مشکلی هم پیش نمیاد

reza6384
یک شنبه 24 خرداد 1388, 19:06 عصر
سلام.

من در بخش دیکد pdu های دریافتی پیام های چند تایی مشکل دارم.

طبق الگوریتمی که گفته شد،
برای ارسال رشته 12345678باید این رو بفرستیم :

31D98C56B3DD70

که در اون 08 طول رشته هست.

اما مشکل من جایی هست که این رشته در یک پیام چند بخشی میاد , یعنی کلا در دیکد پیام چند بخشی مشکل دارم، ببینید برای یک مثال ساده 153 کاراکتر اول پیام رو هر چیز دلخواهی میزنیم و 8 کاراکتر بعدی رو میزنیم 12345678 که جمعا میشه 161 کاراکتر و در 2 پارت ارسال میشه،
حالا، وقتی این پیام الان توی Inbox من هست با زدن AT+CMGL=1 اونرو باز می کنم :

06918919015080600C91891922417098000090601102100281 0F050003C8020262B219AD66BBE100
طول رشته برابر 15 هست که باید 7 تا به خاطر Header ازش کم کنیم که میشه 8.

اما مشکل اینحاست که

62B219AD66BBE100

با اینی که طبق الگوریتم حساب کردیم جور در نمیاد

31D98C56B3DD70

یعنی کلا دیکدر من همه پیام های یک بخشی انگلیسی رو درست دیکد میکنه ولی وقتی که به پیام های جند بخشی که هدر اون با 050003 شروع میشه میرسه همه چیزش قاطی میشه.

gbg
سه شنبه 06 مرداد 1388, 13:53 عصر
آقا یکی جامع و کامل ارسال پیام چند قسمتی رو توضیح بده
ممنون

noorsoft
پنج شنبه 15 مرداد 1388, 07:37 صبح
ارسال پیامهای چند پارتی خیلی کامل گفته شده شما کجاش مشکل دارین

gbg
شنبه 17 مرداد 1388, 18:41 عصر
به جون خودم کلا نفهمیدم
چون قبلا صفحه ها رو ذخیره کردم نگاه می کنم می بینم مطالب پراکندست و یکجا جمع نیست
من یه پیام تک پارت رو می فرستم حالا دو پارت شد چه مراحلی انجام بدم
ممنون

gbg
شنبه 17 مرداد 1388, 20:08 عصر
راست گفتی خیلی کلی گفتم
من یه رو تین دارم که PDU رو میسازه یعنی شماره رو میدم یه رشته برام تولید می کنه که اون رشته رو با دستور AT مربوطه ارسال می کنم
حالا چطور این رشته تولید شده رو دو قسمت کنم و بفرستم

parvaz64
دوشنبه 19 مرداد 1388, 08:25 صبح
[quote=.::Mehran::.;531379]سلام دوستان ... امشب كه داشتم با گوشي ور ميرفتم چشمم ميدونيد به چي خورد .. يك سري پيام در قسمت پيش نويسهام ذخيره شده بود كه شماره ي دريات كننده براش مشخص نشده بود :لبخند:


code](07-91-89-39-05-00-41-00)-(B1)-(00)-(((00-81)))-(00)-(08)-(FF)-(02-0633)[/code]
[code]07 +98935001400 مركز پيام
:لبخند:




عبارت B1 در پیغام بالا به چه معنی هست . تا اون جا که در مطالب گفته شده بود این بایت نشان دهنده حالت delivery هست که یا 31 هست یا 11

noorsoft
شنبه 24 مرداد 1388, 06:28 صبح
راست گفتی خیلی کلی گفتم
من یه رو تین دارم که PDU رو میسازه یعنی شماره رو میدم یه رشته برام تولید می کنه که اون رشته رو با دستور AT مربوطه ارسال می کنم
حالا چطور این رشته تولید شده رو دو قسمت کنم و بفرستم


If sms.Decode = PDU_7Bit Then
'MaxLen = 268
PartCount = (Len(Data) \ 266) - ((Len(Data) Mod 266) = 0)
Else
'MaxLen = 264
PartCount = (Len(Data) / 4) \ 66 + ((Len(Data) / 4 Mod 66) = 0)
End If

noorsoft
شنبه 24 مرداد 1388, 06:32 صبح
[quote=.::Mehran::.;531379]سلام دوستان ... امشب كه داشتم با گوشي ور ميرفتم چشمم ميدونيد به چي خورد .. يك سري پيام در قسمت پيش نويسهام ذخيره شده بود كه شماره ي دريات كننده براش مشخص نشده بود :لبخند:


code](07-91-89-39-05-00-41-00)-(B1)-(00)-(((00-81)))-(00)-(08)-(FF)-(02-0633)[/code]
[code]07 +98935001400 مركز پيام
:لبخند:




عبارت B1 در پیغام بالا به چه معنی هست . تا اون جا که در مطالب گفته شده بود این بایت نشان دهنده حالت delivery هست که یا 31 هست یا 11

نشون دهنده SMS SUBMIT REPORT

gbg
شنبه 28 شهریور 1388, 13:41 عصر
If sms.Decode = PDU_7Bit Then
'MaxLen = 268
PartCount = (Len(Data) \ 266) - ((Len(Data) Mod 266) = 0)
Else
'MaxLen = 264
PartCount = (Len(Data) / 4) \ 66 + ((Len(Data) / 4 Mod 66) = 0)
End If

ممنون منظورم این نبود
مننظورم این بود که اون pdu به چه صورت باید باشه و تیکه اول شامل چی هست و تیکه دوم شامل چی، مثلا شماره موبایل و ... هم تو قسمت دوم تکرار میشه

noorsoft
دوشنبه 30 شهریور 1388, 05:15 صبح
مسلما شماره موبایل در تکه دوم تکرار نمی شه
تکه های دوم به تعد فقط از طریق ایندکس به قسمت اول ارتباط پیدا می کنند

powerboy2988
دوشنبه 04 آبان 1388, 23:53 عصر
حيف ديدم كه واقعا اين همه زحمت جناب noorsoft (http://www.barnamenevis.org/forum/member.php?u=38463) و همچنين جنابraravaice (http://www.barnamenevis.org/forum/member.php?u=37086) را با دكمه تشكر بدم... خيلي خيلي ممنون. خيلي خوب و روشن و واضح توضيح دادين مطالب رو...

دست شما درد نكنه....

محمد حسن
پنج شنبه 07 آبان 1388, 20:36 عصر
سلام میخواستم بدونم چه جوری میتونم sms های خوانده شده را از GSM Modem پاک کنم
ایا راه مستقیم برا این کار وجود داره یا حتما باید محل ذخیره اون رو بدونم

noorsoft
جمعه 08 آبان 1388, 01:38 صبح
شماره ایندکس را باید بدانید



AT+CMGD=INDEX

محمد حسن
شنبه 09 آبان 1388, 21:23 عصر
سلام
چطوری به صورت اتوماتیک دستگاه gsm modem متصل به کامپیوتر را پیدا کنم
(بفهمم به کدوم پورت وصله)

@AM!R!
دوشنبه 25 آبان 1388, 01:38 صبح
با سلام خدمت دوستان
دوتا سوال
1- آیا در ارسال پیام های چند قسمتی لازم برای هر قسمت دستور AT+CMGF=0 اجرا بشه؟
2- آیا برای ارسال هر قسمت ایجاد یک تاخیر لازم هست یا خیر؟
با تشکر

محمد حسن
چهارشنبه 27 آبان 1388, 22:33 عصر
دو تا سوال
1نه . شما یکبار مد ارسال را تعیین میکنید وبع از اون هرچند تا پیام که بفرستید در همین مد اترسال میشه تا موقعی که مد را عوض کنید.
2- برای ارسال هر دستور به دستگاه باید صبر کنید تا دستور قبلی کاملا اجرا بشه و دستگاه پایان یافتن اون رو به شما گزارش بده (یا با error یا با ok ) برای ارسال پیام دو قسمتی هم در واقع داری دوتا پیام میفرستی (دوتا دستوره) پس باید تا اتمام دستور قبلی صبر کنی(تاخیر کلمه خوبی نیست بهتره منتظر پاسخ باشی)

@AM!R!
پنج شنبه 28 آبان 1388, 01:45 صبح
ولی من برای هر دوتا قسمت از Hyper پیغام OK رو می گیرم ولی به گوشی چیزی نمی رسه

majid1088
پنج شنبه 28 آبان 1388, 12:47 عصر
سلام خسته نباشید میگم به همه دوستانی در این تاپیک کار کرده اند
یه سوال پبش پا افتاده داشتم راجع به تبدیل اسکی به هگز بطور مثال من اسکی"م" رو "E3" بدست میارم و با این نمیشه PDU درستی داشت از توضیحات موجود در تاپیک هم بطور کلی چیزی متوجه نشدم میتونید کمکم کنید (DELPHI)
البته آدرس یونیکد فارسی را هم ضمیمه می کنم
http://www.unicode.org/Public/UNIDATA/ArabicShaping.txt

این کد های دوبایتی هگز چه ارتباطی با با تبدیل اسکی به هگز کارکتر ها دارن "E3" کجا "0645" کجا

majid1088
دوشنبه 02 آذر 1388, 10:53 صبح
جواب رو پیدا کرد با سورس دلفی pdu to unicode


function ReturnByte(s:string; i:integer):byte;
begin
Result := 0;
if(((s[i] < #$30) or (s[i] > #$39))and
((s[i] < #$41) or (s[i] > #$46)))or
(((s[i+1] < #$30) or (s[i+1] > #$39))and
((s[i+1] < #$41) or (s[i+1] > #$46)))then exit;

if s[i] >= #$41
then Result := Byte(s[i]) - $41+$A
else Result := Byte(s[i]) - $30;

if s[i+1] >= #$41
then Result := (Result shl 4) + Byte(s[i+1]) - $41+$A
else Result := (Result shl 4) + Byte(s[i+1]) - $30;

end;

function OctetsToUnicode(aStr:string; Index:integer):WideString;
var i,len : integer;
wCh: word;
begin
Result := '';
len := Length(aStr);
i := Index;
while i <= len do begin
wCh := ReturnByte(aStr,i);
wCh := (wCh shl 8) + ReturnByte(aStr,i+2);
Result := Result + WideChar(wCh);
inc(i,4);
end;
end;

بازم به خاطر تاپیک محشرتون متشکرم

محمد حسن
دوشنبه 02 آذر 1388, 22:15 عصر
ولی من برای هر دوتا قسمت از Hyper پیغام OK رو می گیرم ولی به گوشی چیزی نمی رسه
مگه میشه دستوری به گوشه نرسه و اون پیام ok بده
در hyperterminal درمنوی file-> propertise-> setting-> ascii setup گزینه echo typed char را تیک بزنید تا دستورات ارسالی رو ببینید(یا درستور ATE1) رو به دستگاه بفرستید.

محمد حسن
چهارشنبه 04 آذر 1388, 21:36 عصر
سلام
کسی میدونه چطوری با دستورات at میشه شماره سیم کارتی که رو گوشی هست رو بدست آورد(شماره تلفن رو میگم)
خداحافظ

samaba
پنج شنبه 05 آذر 1388, 23:54 عصر
سلام.
مطالبتون واقعاً عالي بود. من براي فرستادن اس ام اس يک پارتي مشکل ندارم ولي چند پارتي ها فقط پارت اولش مياد. اينم کدهاش
پارت اول
0051000B819081137991F00008FF8B060804B9850401064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645
پارت دوم
0051000B819081137991F00008FF8B060804B9850402064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645
پارت سوم
0051000B819081137991F00008FF8B060804B9850403064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645
پارت چهارم
0051000B819081137991F00008FF0B060804B9850404064506 45
البته اگه ممکنه لطفاً پاسخ سريع ميخوام

ضمناً اي همون مثال 200 تا م هست

محمد حسن
شنبه 07 آذر 1388, 19:46 عصر
البته اگه ممکنه لطفاً پاسخ سريع ميخوام
سلام
من متن رو بررسی کردم . ظاهرا مشکلی نداره
اگه پاسخی که ازطرف دستگاه میاد رو بفرستید شاید بشه کمک کرد(مثلا شماره خطا)
با این حال هر کدوم از پارت ها رو که میفرستید تا زمان کامل شدن اجرای اون باید صبر کنید و بعد پارت بعدی رو بفرستید
. تست کنید که عدد ارسالیN در هنگام AT+CMGS=N برای همه قسمت ها درست ست شده باشه
دیگه چیزی به خاطرم نیست

samaba
یک شنبه 08 آذر 1388, 08:07 صبح
سلام
اينم متن کامل دستورات AT براي ارسال حرف ب

AT+CMGS=153
> 0051000B819081136991F00008FF8B060804F6FD0201062806 2806280628062806280628062806
28062806280628062806280628062806280628062806280628 062806280628062806280628062806
28062806280628062806280628062806280628062806280628 062806280628062806280628062806
28062806280628062806280628062806280628062806280628 06280628062806280628
+CMGS: 0
OK
AT
OK
AT+CMGS=69
> 0051000B819081136991F00008FF37060804F6FD0202062806 2806280628062806280628062806
28062806280628062806280628062806280628062806280628 062806280628
+CMGS: 0
OK
AT
OK

samaba
یک شنبه 08 آذر 1388, 13:13 عصر
سلام

هيچ کس نميتونه کمک يا راهنمايي کنه؟

اگه زودتر کمک نرسه دردسر جدّي ميشه!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

mohsenm66
دوشنبه 09 آذر 1388, 12:03 عصر
يكي بگه دستور زير چه كاري انجام ميده ؟

AT+cmms

محمد حسن
پنج شنبه 12 آذر 1388, 11:04 صبح
> 0051000B819081136991F00008FF8B060804F6FD0201062806 2806280628062806280628062806

فاصله ای که بین این اعداد(28 06)هست چیه؟ آیا برا راهنمایی خودت در مقدار بازگشتی از دستگاه گذاشتی یا تو کدی هست که میفرستی

mehrzadmehrnia
شنبه 14 آذر 1388, 13:51 عصر
با سلام خدمت دوست عزیز و بسیار ممنون ، مشکلی که من دارم ارسال پیام های طولانی است . لطفا در این زمینه هم مطلب بنویسید. با تشکر

samaba
یک شنبه 15 آذر 1388, 20:09 عصر
فاصله ای که بین این اعداد(28 06)هست چیه؟ آیا برا راهنمایی خودت در مقدار بازگشتی از دستگاه گذاشتی یا تو کدی هست که میفرستی


سلام. ممنون از توجه و لطفتون.
اون فاصله زمان و Paste اضافه شده. در کد ارسالي اصلي فاصله اي نيست

samaba
سه شنبه 17 آذر 1388, 20:43 عصر
خواهش مي کنم يکي از دوستان کمک کنه!
مگه اينجا بخش ارواحه که هيچ رفت و آمدي توش نيست؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

reza6384
چهارشنبه 18 آذر 1388, 17:41 عصر
خواهش مي کنم يکي از دوستان کمک کنه!
مگه اينجا بخش ارواحه که هيچ رفت و آمدي توش نيست؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

دوست عزیز مطالبی که توی این تاپیک نوشته شده تا 90% صحیحه و کاملا کارت رو راه میندازه ، حالا اگر میبینی که کسی جواب سوالت رو نمیده یکی به خاطر کم وقت بودنه و دوم به خاطر اینه که سخته بشینی و این همه کد هگز رو بخونی ، یک جای کارت اشکال داره ، توی تاپیک های همین تالار موبایل یکی از دوستان میگفت که در ارسال پیام های چند قسمتی مشکل دارم و با اینکه OK رو از Hyper در همه بخش ها میگیرم ولی چیزی روی گوشیم نمیاد ، من بعد از بررسی PDU هاش که کار سختی هم بود به این نتیجه رسیدم که طول پیام رو که باید بین FF و رشته ثابت 060804 قرار می داد ، قرار نداده بود و این دلیل مشکلش بود. شما هم یه همچنین مشکل کوچیکی دارید. من خودم به خاطر مشکل در Decode و دریافت پیام ها 2 هفته همه این کدهای هگز رو روی کاغد به صورت Binary نوشتم و از چندین نمونه بررسی کردم تا فهمیدم مشکل کارم کجاست ، پس اگر یه کم بیشتر دقت کنی مشکلت حل میشه.

samaba
چهارشنبه 18 آذر 1388, 19:28 عصر
دوست عزیز مطالبی که توی این تاپیک نوشته شده تا 90% صحیحه و کاملا کارت رو راه میندازه

سلام.
قبل از هر چيز بگم مطالبي که مي نويسم به ايم معني نيست که کدي که مي فرستم درسته. احتمالاً يه بخشش ایراد داره
من با توجه به همين راهنمايي ها، متور ارسال اس ام اسي ساخته بودم که همه جوره پيامي مي فرستاد. ولي بدون اينکه من هيچ تغييري در اون داده باشم، جديداً در مورد پيام هاي چند پارتي فقط پارت اولش مي رسه و آرم پيام شکسته را نشون ميده.
ضمناًَ اين مورد فقط براي يک نفر اتفاق نيفتاده. در بعضي شهر ها مثل همدان اينجوري شده و در بعضي شهر ها مثل شيراز کاملاً سالمه.:متعجب:

جالب اينه که بدوني حتي کد کاملي که از داخل گوشي ميخونم بعد از ارسال با ابزاري غير از گوشي فقط پارت اولش مي رسه اما اگه خود گوشي اونو بفرسته درست ميره :عصبانی++:

اصلاً نميخوام کد منو تفسير کنيد. شما را به خدا يک کد PDU کامل بذاريد که مثلاً 80 تا م را به شماره 09188123924 اس ام اس کنه. اينجوري تست ميشه که برنامه من مشکل داره يا مخابرات تغييراتي داده که گوشي باهاش سازگاره.

ممنون

ehsan_zhaee
جمعه 20 آذر 1388, 07:56 صبح
سلام
من مطالب رو خوندم 2 تا مشکل دارم
1- گوشیه من 6300 است اما نمی تونم وقتی اس ام اس میرسه دریافتش کنم اما اگه زنگ بخوره با at ها متوجه میشم.
2- برای قسمت گزارش پیام من مطالبی رو که گفتین با نرم افزار pduspy مقایسه کردم فرق می کرد و وقتی 40h جمع میشد که قرار بود اس ام اس پاک بشه

ehsan_zhaee
جمعه 20 آذر 1388, 07:57 صبح
میشه یه رفرنس تووووپ واسه pdu معرفی کنید

reza6384
جمعه 20 آذر 1388, 20:44 عصر
اصلاً نميخوام کد منو تفسير کنيد. شما را به خدا يک کد PDU کامل بذاريد که مثلاً 80 تا م را به شماره 09188123924 اس ام اس کنه. اينجوري تست ميشه که برنامه من مشکل داره يا مخابرات تغييراتي داده که گوشي باهاش سازگاره


0051000B819081183229F40008FF8B0608047F670201064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645064506450645064506450645064506450645064506 45064506450645064506450645064506450645064506450645 06450645

پارت اول CMGS= 153

0051000B819081183229F40008FF230608047F670202064506 45064506450645064506450645064506450645064506450645

پارت دوم CMGS=49

من تست کردم و برای خودم هم فرستادم هیچ مشکلی وجود نداشت.



گوشیه من 6300 است اما نمی تونم وقتی اس ام اس میرسه دریافتش کنم


این رو تست کنید :



AT+CNMI=2,1,0,1





میشه یه رفرنس تووووپ واسه pdu معرفی کنید

به نظر من وجود نداره ، یعنی دقیقا چیزی که شما میخواین نیست ، چون هر GSM مودم ای با یک سری AT COMMAND ها سازگاره و با یکسری نیست. اما توی همین تالار مدیر بخش یک سری رفرنس معرفی کردند.