找回密码
 注册
搜索
查看: 806|回复: 1

[讨论] nokia、motorola、simens及ericcson铃声和图片格式分析(转帖)

[复制链接]
发表于 2007-9-29 11:14:18 | 显示全部楼层 |阅读模式
nokia、motorola、simens及ericcson铃声和图片格式分析

由于本人在这方面基本没有什么尝试,只能将有些朋友们发表过的东西总结一下。这些总结中有已经实现的,有些还是在摸索中的,希望大家能根据提供的资料多试试,成功后能将自己的经验与大家分享。这些总结针对的是sp与梦网短信网关之间传输的格式,至于通过其它方式发送的格式,我也不知道能不能套用。:(

nokia:
铃声和图片的格式有资料详细介绍,有兴趣的最好还是去看看他的smartmessage。
在cmpp的cmpp_submit包里,其msg_content由两部分组成,头和内容

铃声:0x6 0x5 0x4 0x15 0x81 0 0(头) + 铃声二进制内容
图片:0x6 0x5 0x4 0x15 0x82 0 00x64 0xf0 0(头) + 图片二进制

铃声和图片的编辑工具及将文本转换成二进制文件的工具,请在论坛的“资源共享”里查找


motorola铃声:(由istudy提供)
在cmpp的cmpp_submit包里,其msg_content由|<-header ->|<-tempo value->|<-musical data -> |<-delimiter->|checksum->|组成

field binary data ascii data
-------------------------------------------------------------------------------------
header: 4c 33 35 26 -->"l35&"
tempo value: 32 20 -->"2 "
musical data: 43 2d 32 20 43 23 2d 32 20 44 2d 32 20 -->"c-2 c#-2 d-2 "
delimiter: 26 26 -->"&&"
checksum: 35 38 -->"58"
-------------------------------------------------------------------------------------
最终发送的二进制流为:4c3335263220432d322043232d3220442d322026263538

要注意的是校验位的计算,是所有musical data 异或后的值,然后拆分转换而来得,如果checksum计算不正确则手机接收后是些非法字符的普通消息。下面的文档中算法很详细。

header: l35& this is a constant string for all musical tone sms. [by using 'send as sms'
option user can send composed ringer tone to other compatible motorola phone. to
differentiate music sms from normal sms, special header is attached.]
tempo value: this is either 1 or 2 or 3 or 4 followed by a space(e.g. “2 “). default is 2.
musical data : it consists of 1 or more notes, subject to a maximum of 35 notes , the format
of which is given below.
delimiter : && this represents the end of musical notes in the tone.
checksum : two bytes. the algorithm for calculation of the checksum is given below.

step1: calculate one byte xor sum of the all the bytes of the musical data starting after
the space in the tempo value(not including space) till the && (not inclusive of &&). let
us say this is xy.
step 2: separate x and y into two bytes x0 and 0y.
step 3: take 0y and add hex 30. this becomes 3y. call this byte 1.
step 4: take x0 and shift right by 4 bits. this becomes 0x.
step 5: add hex 30 to 0x. this becomes 3x. call this byte 2.
step 6: two byte checksum is <byte 2><byte1>


simens铃声:(由hello008提供)
可能hello008还没有完全试成功,所以有兴趣的朋友还是多参见他提供的相关文档,多多测试和分析一下,成功了一定要告诉我一下喔!
在cmpp的cmpp_submit包里,其msg_content由
2f 2f 53 45 4f:头
1:版本
6b 0:数据段长度
7 11 9 17:类似序列号
6 0:第6个数据包
8 0:共8个数据包
f7 2 0 0:mid文件大小
3 6d 69 64:3mid
8:文件名长度
65 31 33 39 2e 6d 69 64:文件名
。。。:数据


ericsson铃声:
是我从网关上截取分析出来的,没有实际试过。
在cmpp的cmpp_submit包里,其msg_content由
其格式是:
binary data ascii data
---------------------------------------------------------
42 45 47 49 4e 3a 45 4d 45 4c 4f 44 59 0a -->begin:emelody+换行符(0x0a)
45 52 53 49 4f 4e 3a 31 2e 30 0a -->version:1.0+换行符(0x0a)
4d 45 4c 4f 44 59 3a数据内容0a -->melody:+内容++换行符(0x0a)
45 4e 44 3a 45 4d 45 4c 4f 44 59 -->end:emelody
-------------------------------------------------------------

大概就这么多吧,剩下的大家要么看文档要么试成功后把自己的经验共享一下。
在这里我并没有对cmpp_submit中同铃声和图片相关的几个字段如tp_udhi,msg_fmt做出说明,主要是各网关厂商对它们在处理上也不一样,如对tp_udhi,有的要求填0,有的要求填1,有的则要求填0x40。所以在调试时,最好询问一下网关的开发人员,来确定具体的值。
 楼主| 发表于 2007-9-29 11:16:25 | 显示全部楼层
再给个说明文档:

一. motorola普通铃声
1) 测试环境:手机型号--a388、t191;工具--nok2phone;网关--亚信
2) 制作过程:以”999朵玫瑰”为例,首先用nok2phone打开相应的midi文件,在nok2phone的输出框中产生motorola普通铃声所需的字串,如” 2 f2 e2 c2 d4 r2 a-1 g-1 f-2 g-2 c2 a-6 a-4 c2 a-2 g-6 d1 d1 c2 d2 e2”,根据算法计算出真正所需发送的铃声,内容是” l35&2 2f2e2c2d4r2a-1g-1f-2g-2c2a-6a-4c2a-2g-6d1d1c2d2e2&&27”,通过sp程序将该字串做为普通的文本消息发送至手机,手机上显示收到铃声。
3) 算法:motorola的铃声格式如下:
<header><tempo value><musical data><delimiter><checksum>
-----------------------------------------------------------------------------------------
header:l35&
tempo value:由1或2或3或4加空格构成,缺省为2,如”2 “
musical data:将nok2phone中产生的字串去掉空格即可
delimiter:&&
checksum:对musical data进行的校验和,两个字节。方法为对musical data中的数据从前往后对每个字符进行异或运算,运算的结果假设其十六进制的表示为xy,那checksum的第一个字节的十六进制形式为3y,第二个字节的十六进制形式为3x。

部分算法:
byte a = 0, check1, check2;
cstring sread(_t(“2 f2 e2 c2 d4 r2 a-1 g-1 f-2 g-2 c2 a-6 a-4 c2 a-2 g-6 d1 d1 c2 d2 e2”)), sring;

sread.replace(" ","");
arraymessage.setsize(sread.getlength() + 1);
strcpy((char *)arraymessage.getdata(), sread);
for(int i=0;i<arraymessage.getsize()-1;i++)
{
a = a ^ arraymessage.getat(i);
}

check1 = 0x30 + (a & 0xf);
check2 = 0x30 + (a>>4 & 0xf) ;

sring.format("l35&2 %s&&%c%c",(char *)arraymessage.getdata(),check2,check1);
4) 发送参数设置:该消息是以普通文本方式的消息下发,ftm=0,udhi=0,pid=0,如果checksum不对,则该消息以文本方式显示在手机上,否则显示为铃声。

二. siemens图片(适用于其支持的各种大小的图片)
1) 测试环境:手机型号--3118;网关--亚信
2) 制作过程:首先选择一张101x29的单色bmp图做为源文件,文件名为1.bmp。通过程序的处理源文件被拆成4条连续的消息以二进制的形式存放在文件1.pic中,发送时依次取出来发送即可。第一条和第四条消息的十六进制内容如下:
第一条:2f 2f 53 45 4f 01 6e 00 dd 05 00 00 01 00 04 00 8e 01 00 00
03 62 6d 70 05 31 2e 62 6d 70 42 4d 8e 01 00 00 00 00 00 00
3e 00 00 00 28 00 00 00 48 00 00 00 1c 00 00 00 01 00 01 00
00 00 00 00 50 01 00 00 00 00 00 00 00 00 00 00 02 00 00 00
02 00 00 00 ff ff ff 00 00 00 00 00 c0 3f 00 00 00 10 eb 00
00 00 00 00 e0 3f 00 fc 00 21 db 00 00 00 00 00 e0 3e 03 03
00 71 f3 00 00 00 00 00 e0 3e 04 00 80 0d fe 00 00 00 00 00
…….
第四条:2f 2f 53 45 4f 01 6e 00 dd 05 00 00 04 00 04 00 8e 01 00 00
03 62 6d 70 05 31 2e 62 6d 70 0e 18 00 db e0 00 00 00 0f e7
ff fc 1c 10 00 71 c0 00 00 00 07 ff be 00 3c 70 00 00 00 00
00 00 07 ef fc 00 df e0 00 00 00 00 00 00 05 ec ff 00 fb c0
00 00 00 00 00 00 02 66 df 00 bf 30 00 00 00 00 00 00
3) 算法:其图片格式如下:
<identifier><version><datasize><referenceid><actpacketnumber><numberofpackets><objectsize> <objecttype><objectname><data>
-----------------------------------------------------------------------------
identifier:标识。5字节。设为”//seo”(注意大小写)
version:版本号。1字节。设为1
datasize:数据大小。2字节。每个包里可图片数据的大小,对于同一图片的不同包的该值相同,最后一个包里实际剩余数据大小不足时,添0补足
referenceid:序列号。4字节。可自行设定,对同一图片的不同包的该值相同
actpacketnumber:当前包是第几包。2字节。从1开始计数
numberofpackets:总包数。2字节。
objectsize:图片的大小。4字节。
objecttype:类型为图片。4字节。第一字节为长度,因为类型为”bmp”所以第一字节为3,第二至第四字节为”bmp”
objectname:图片的名称,包括扩展名。长度不定。第一个字节为长度。如图片为1.bmp,则objectname的长度为6,第一个字节为5。第二至六个字节为”1.bmp”
data:图片数据。从图片文件中拆分出来的数据。
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-25 01:51 , Processed in 0.046476 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表