Read following first :
SMS-SUBMIT :
0001000B915892214365F7000021493A283D0795C3F33C88FE06CDCB6E32885EC6D341EDF27C1E3E97E72E
-SMSC Defualt in cell phone : 00
-PDU TYPE : 01
00000001
Starting from right :
bit0,1 : 01 >>> SMS-SUBMIT
bit2 : 0 >>> RD ( Reject duplicate)
bit3,4 : 00 >>> VP (Valudity period)
if 00 means not present
bit5: 0 >>> SRR (Status report requested) if 1 report requested
bit6: 0 >>> UDHI (User data header indicator) ... use for cancatenated message if 1 means header is present like 05 00 03 CC 02 01 (total02/number01)
bit7: 0 >>> RP ( Reply path )
-MR : 00 ( Message refrence by SMSC )
-DA : 0B915892214365F7
DA Len : 0B (Destination address Length)
International code : 91 : Display (+)
Number : 58 92 21 43 65 F7
reverse number from begining as 2 digits
58>>>85
So >>>> 85291234567
---From : +85291234567
-PID : 00
-DCS : 00 (Alphabet) (Dada scheme coding)
if Unicode >>> 08
-UD : 21493A283D0795C3F33C88FE06CDCB6E32885EC6D341EDF27C1E3E97E72E
UDL : 21 in hex value (User data length)
UD : 493A283D0795C3F33C88FE06CDCB6E32885EC6D341EDF27C1E3E97E72E
decoding Data :
-Reverse Hex value
2EE7973E1E7CF2ED41D3C65E88326ECBCD06FE883CF3C395073D283A49
-Hex to binary
00101110 11100111 10010111 00111110
00011110 01111100 11110010 11101101
01000001 11010011 11000110 01011110
10001000 00110010 01101110 11001011
11001101 00000110 11111110 10001000
00111100 11110011 11000011 10010101
00000111 00111101 00101000 00111010
01001001
Change octet to septet
--Get the number of zeros to be remove.
29×8−33×7=1
29×8-int(29×8/7)×7=1
-Remove 1 Zero from the left of first above binary ( octet : 00101110 ) and convert 7bits 7bits to hex value like as follows :
0101110:2E
1110011:73
1100101:65
1100111:67
1100001:61
1110011:73
1110011:73
1100101:65
1101101:6D
0100000:20
1110100:74
1111000:78
1100101:65
1110100:74
0100000:20
1100100:64
1101110:6E
1100101:65
1110011:73
0100000:20
1101111:6F
1110100:74
0100000:20
1111001:79
1110011:73
1100001:61
1100101:65
0100000:20
1110011:73
1101001:69
0100000:20
1110100:74
1001001:49
-Binary to Hex and reverse
4974206973206561737920746F207365
6E642074657874206D65737361676573
2E
-Hex to text convertor :
https://codebeautify.org/hex-string-converter
finally decoded done successfully !!!
Please do not hesitate to forget >>> Like and Comment
SMS DELIVER:
SCA-PDU TYPE-OA-PID-DCS-SCTS-UDL-UD
SMS-SUBMIT:
SCA-PDU TYPE-MR-DA-PID-DCS-VP-UDL-UD
Mode Alphabet : 160 Character in part 1 ( Ascii 140,binary septet 160 )
Text : Salam
1-Ascii text to Hexadecimal
53 61 6C 61 6D
?H53
2-Decimal to binary
83÷2=41 Reminder 1
41÷2=20 Reminder 1
20÷2=10 Reminder 0
10÷2=5 Reminder 0
5÷2=2 Reminder 1
2÷2=1 Reminder 0
1÷2=0 Reminder 1
Hex53Decimal83=1010011
Hex61Decimal97=1100001
Hex6CDecimal108=1101100
Hex61Decimal97=1100001
Hex6DDecimal109=1101101
3-Change 8 bit to 7 bit : 10001100>0001100
Seperate 7 digits from Right
4-Reverse Binary from last hex to the first
1101101 1100001 1101100 1100001 1010011
5-how many 0 reqired? 5×(7+1)-5×7=5
Add 5 Zero to the left
00000 1101101 1100001 1101100 1100001 1010011
6-Change binary to hex
0000011011011100001110110011000011010011
0110=0×2^(3)+1×2^(2)+1×2^(1)+0×2^(0)=6
06 DC 3B 30 D3
7-Reverse Hex
D3303BDC06
SMS SUBMIT
00311E08810100353800000A05D3303BDC06
MR(Message refrence)=hex(1E):decimal(30)
DCS(Data coding scheme):00
Validity : 0A
UDL(User data length) : 05
UD (User data) : D3303BDC06
Packed
0110001 0110010 0110011 0110100 0110101 0110110 0110111 0111000
Reverse binary:
0111000 0110111 0110110 0110101 01101000110011 0110010 0110001
Add Zero to the first 8×(7+1)-8×7=8
000000000111000 0110111 0110110 0110101 01101000110011 0110010 0110001
Seperate 8 digits 8 digits :
00000000 : 00
01110000 : 70
11011101 : DD
10110011 : B3
01010110 : 56
10001100 : 8C
11011001 : D9
00110001 : 31
Reverse Hex :
31 D9 8C 56 B3 DD 70 00
0031000881010035850000000831D98C56B3DD7000
Message : 12345678
-Hex
Hex Len:16
54 61 73 68 20 4D 65 6E 65 20 53 69 6C 65 73 68
-Septet
1010100 1100001 1110011 1101000 0100000
1001101 1100101 1101110 1100101 0100000
1010011 1101001 1101100 1100101 1110011
1101000
-Reverse binary
1101000 1110011 1100101 1101100 1101001
1010011 0100000 1100101 1101110 1100101
1001101 0100000 1101000 1110011 1100001
1010100
-16×(7+1)-16×7=16
-Required Zero at the first =16
8 digits separation
00000000: 00
00000000:00
11010001:D1
11001111:CF
00101110:2E
11001101:CD
00110100:34
11010000:D0
01100101:65
11011101:DD
10010110:96
01101010:6A
00001101:0D
00011100:1C
11110000:F0
11010100:D4
-Revers Hex
D4 F0 1C 0D 6A 96 DD 65 D0 34 CD 2E CF D1 00 00
00310008810100358500000B10D4F01C0D6A96DD65D034CD2ECFD10000
UDL=16(decimal)=10(Hex)
UD=D4F01C0D6A96DD65D034CD2ECFD10000
SCA | Service Center Address information element | Telephone number of the Service Center |
PDU Type | Protocol Data Unit Type |
|
MR | Message Reference | successive number (O. .255) of all SMS-SUBMIT Frames set by the MOBILE |
OA | Originator Address | Address of the originating SME |
DA | Destination Address | Address of the destination SME |
PID | Protocol Identifier | Parameter showing the SMSC how to process the SM (as FAX, Voice etc) |
DCS | Data Coding Scheme | Parameter identifying the coding scheme within the User Data (UD) |
SCTS | Service Center Time Stamp | Parameter identifying time when the SMSC received the message |
VP | Validity Period | Parameter identifying the time from where the message is no longer valid in the SMSC |
UDL | User Data Length | Parameter indicating the length of the UD-field |
UD | User Data | Data of the SM |
RP | Reply Path | Parameter indicating that Reply Path exists |
UDHI | User Data Header Indicator | Parameter indicating that the UD field contains a header |
SRI | Status Report Indication | Parameter indicating if the SME has requested a status report |
SRR | Status Report Request | Parameter indicating if the MS has requested a status report |
VPF | Validity Period Format | Parameter indicating whether or not the VP field is present |
MMS | More Messages to Send | Parameter indicating whether or not there are more messages to send |
RD | Reject Duplicate |
|
MTI | Message Type Indicator | Parameter describing the message type 00 means SMS-DELIVER 01 means SMS-SUBMIT |
SMS-DELIVER is used to deliver a message from SMSC to a mobile phone.
According to above table ( PDU Type ) :
Submit : MTI-RD-VPF-SRR-UDHI-RP
Deliver : MTI-MMS-LP-SRI-UDHI-RP
TP-SRI(only set by SMSC) :
0: a status report will not be returned to the SME
1: a status report will be returned to the SME
11=00010001
31=00110001
61=01100001
there are 40, 44, and 60, there are additional header fields because it is a concatenated SMS. This means that the SMS is divided into parts and sent in segments, and then the modem/phone reassembles them. And there are headers for collecting the SMS parts
0021000881010035850008020645
SMS-SUBMIT:
SCA-PDU TYPE-MR-DA-PID-DCS-VP-UDL-UD
PDU TYPE
21=00100001
AT COMMAND :
Sending in text mode
AT
>ATOK
AT+CMGF=1[ENTER]
Enter the destination phone number
AT+CMGS=”+61419879619”[ENTER]
Enter the text message and terminate it with “CTRL Z”
>hello[CTRL Z]
Baud Rate:19200 : bps
Data Bits : 8
Stop Bits : 1
Parity N : None
AT+CMGS=18 (actual pdu length)
>0011000A81409178699100000105E8329BFD06[CTRL Z]
+CMGS: 12
OK
To : 0419879619
Message : hello
PDU type : SMS-SUBMIT (11)
Refrence : 0 (00)
Validity : 10 minutes (01)
Data coding : SMS Default Alphabet
UDL : 05
UD : E8329BFD06
+CMGF: 0
OK
SMS message for is configured for PDU mode
Checking SMS Mode…
AT+CMGS=48
>
0011000881010035850000aa28D3E614D42CCFE7E17319342FBBE920B3FCDD0605A9A0E1BBDD0EBBC9206A794E2FCB5D
+CMGS: 23
OK
UDL:28
message : SMS Message sent from AT Command Tester.
Hex Value of message :
534d53204d6573736167652073656e742066726f6d20415420436f6d6d616e64205465737465722e
Length : 40 (2digits)
UDL in alphabet mode is the length of septet before encoding to octet.
40decimal=28hex
40÷2=2 40-2×16=8 so 28
AT COMMAND : READ
AT+CMGR=1 [ENTER]
+CMGR: 0,,24
07911614786007F0040B911604994743F400009930139100406B05E8329BFD06
OK
برای دفع سنگ کلیه خربزه را تمیز شسته و با پوست و گوشت و تخم داخل مخلوط کن بریزید تا کامل میکس شود و روزی 2تا ۳ لیوان میل کنید .
Writes data from a variable to a disk file.
نوشتن داده از یک متغیر یه یک فایل
نوشتاری عبارت Put :
Put [ # ] filenumber, [ recnumber ], varname
طبق نوشتار بالا این عبارت سه قسمت دارد که شماره فایل ( 1 تا 255 ) و نام متغیر ضروری هستند و فقط شماره رکورد Optional یا می تواند خالی رها شود.
دیتا نوشته شده با Put معمولا با Get خوانده می شود
رکورد یا بایت اول در یک فایل در موقعیت 1 ، رکورد یا بایت دوم در پوزیشن 2 و .... است . اگر recnumber را نادیده بگیرید( omit ) ، رکورد یا بایت بعدی بعد از آخرین عبارت یا دستور Get یا Put ، یا با آخرین تابع Seek اشاره شده ، نوشته می شود. باید در جداکننده کاما قرار گیرند مثال :
Put #1,,FileBuffer
برای فایل هایی که در حالت تصادفی یا Random Mode باز ( Open ) می شوند قوائد زیر اعمال می گردد :
اگر طول دیتای در حال نوشتن کمتر از طول مشخص شده در عبارت Len دستور Open باشد ، Put رکوردهای بعدی را روی مرزهای طول رکورد می نویسد فضای بین پایان رکورد و ابتدای رکورد بعدی با محتویات موجود در بافر پر می شود. از آنجاییکه مقدار data padding را نمی توان با قطعیت پیدا کرد ، بطور کلی ایده خوبی است که طول رکورد با طول داده های نوشته شده مطابقت داشته باشد.اگر طول داده های نوشته شده بیشتر ازطول مشخص شده در عبارت Len دستور Open باشد ، خطائی رخ می دهد. اگر متغیری که نوشته می شود یک رشته بت طول متغیر باشد ، Put یک توصیفگر 2 بایتی می نویسد که شامل طول رشته و سپس متغیر است . طول رکورد مشخص شده توسط Len در دستور Open باید حداقل 2 بایت بیشتر از طول واقعی رشته باشد.... هر کاراکتر یک بایت است ( شامل ۷ یا ۸ بیت ).
اگرمتغیری ( Variable ) که نوشته می شود یک Variant از نوع عددی باشد ( وقتی بعنوان واریانت مشخص می کنید تمام دیتا تایپ ها راشامل میشود حتی یک Variant نال هم می تواند باشد ولی آبجکت خیر ) Put دو بایت می نویسد ( هرکاراکتر یک بایت ) که VarType را مشخص میکند و سپس متغیر را می نویسد. بعنوان مثال هنگام نوشتن یک Variant از VarType 3 دستور Put شش بایت می نویسد : دو بایت که با آن متغیر شناسایی می شود و چهار بایت حاوی داده ( Long ) . طول رکورد مشخص شده توسط Len دستور Open باید حداقل دو بایت بیشتر از تعداد واقعی بایت های مورد نیاز برای ذخیره متغیر باشد.
اگر متغیری که نوشته می شود یک Variant از VarType 8 یا String باشد ، Put دو بایت می نویسد که VarType را مشخص میکند ، دو بایت که طول رشته را مشخص میکند و سپس دیتا رشته ای را می نویسد. طول رکورد مشخص شده در Len دستور Open باید حداقل چهار بایت بیشتر از طول واقعی رشته باشد. ( VarType یا Variable Type که یک تابع است برای فهمیدن نوع داده متغیر )
برای فایل های باز شده در حالت باینری مثل اتصال به دستگاه از طریق USB ( باز کردن پورت مثل COM1 تا COMn) ، تمام قوائد Random اعمال می شود جز :
بند Len در دستور یا عبارت Open هیچ تاثیری ندارد.Put تمام متغیرها را بطور پیوسته روی دیسک می نویسد بدون Padding بین رکوردها. برای هر آرایه ای غیر از آرایه در یک نوع user-defined ( توسط کاربر مشخص شده ) Put فقط دیتا را می نویسد . هیچ توصیفی نوشته نمی شود. Put رشته هایی با طول-متغیر که جزئی از انواع user-defined نیست را بدون 2 بایت طول توصیفگر می نویسد. تعداد بایت های نوشته شده برابر تعداد کاراکترها در رشته است . برای مثال عبارتهای زیر 10 بایت به فایل شماره یک می نویسد.
VarString$ = String$(10," ")
Put #1,,VarString$
می توان از دستورات AT COMMAND در PUT برای ارسال به PORT استفاده کرد
Get [ # ] filenumber, [ recnumber ], varname
Reads data from an open disk file into a variable.
varlist | Required. Comma-delimited list of variables that are assigned values read from the file—can't be an array or object variable. However, variables that describe an element of an array or user-defined type may be used. |