nonlyli 发表于 2005-8-10 00:00:00

◆未完成◆-对PlayTone的研究

一直想找到可以停的PlayTone,今天看了PlayTone的原码,发现这里有个按输入参数R12(声音号)选择的选项,再由PlaySMSTone找到短信的是35,最终自己参照写了个PlayTone2,改了一处值,可以停了。
问题是:现在不知道哪个数字代表哪个铃声,试了下找不到规律(且有些无声)
已知:34、35:短信 36、37:小区广播。

代码如下:

$Segmented
$Mod167

;PTone2,我的音调播放函数


;Some Functions
pSendMessage                EQU        0xB4724C
GetSoundsEnabled        EQU        0xB5D2CE
;Some Address
PatchBeginEQU 0xBF86E0 ;从0xBF86A0开始

patch section code word AT PatchBegin
fun1 proc far
;R12:传入参数
        mov       [-r0], r8
        mov       r8, r12
        calls        seg(GetSoundsEnabled),sof(GetSoundsEnabled)        ;是否开启声音
        cmp       r4, #0
        jmpr       cc_NZ,EXIT                ;未开启,直接返回。
        mov r12, #1                     ; 将R12、R13作为参数以栈传入
        mov [-r0], r12
        mov r13, #2
        mov [-r0], r13
        mov r12, #34C0h                   ; 感觉是固定的。Yes!对应震动一样有。关键参数是谁?
        mov r13, #0Eh
        mov r14, #1                        ;这个是关键?次数?因有些是0,有些是1,  :改0循环,改1播一次,改2只响了0.5秒就停了。
        mov r15, r8                     ; 这里R8是铃声号了。
        calls seg(pSendMessage), sof(pSendMessage)        ;发送消息
        add r0, #4                        ;弹出栈
EXIT:
        mov r8,
        rets
fun1 endp
patch ends
End






nonlyli 发表于 2005-8-10 00:01:00

另外看了任意铃声的源码,同样没有新发现。它产生的数字在这里用并不是要的铃声,难道任意铃声加了个什么值么?是多少?

请修改过任意铃声的朋友指教。

nonlyli 发表于 2005-8-10 00:02:00

经测试失败。这个PlayTone只能称为是PlaySystemTone,我写了个小程序从01测试到50,结果只有被选用的如“两线路”“短信”“小区广播”“重要记事”才能播出来,
看到真正的PlayTone另有其地。

toodle 发表于 2005-8-10 00:03:00


不是有个任意铃声对任意人吗,应该有启发的。
是不是首先要把铃声拷到内存呀。

nonlyli 发表于 2005-8-10 00:04:00

我看过了,最后是计算得一个值,RX,但我追踪到后来就看不懂了。

toodle 发表于 2005-8-10 00:05:00


我看得出那个值好像是铃声号吧,现在我也忘了。当时就没看下去。
我说把铃声拷到内存,似乎是从补丁返回后有这样的动作。
其实我也没看懂,不要误导了你。

nonlyli 发表于 2005-8-10 00:06:00

本来这个PlayTone研究失败不免有些失落,但今天看到Jewes说到我的这个研究居然还有用,那继续把本问题的其它东西帖一下,说不定又对谁有用呢?

PlayTone的其它参数:(同样适用用PlayToneWhenOpen)

PlayTone       EQU 0xB5D202
PlayToneWhenOpen EQU 0xB5D2A4
(也有写作PlayWarningToneWhenOpen的,实际上是对PlayTone的调用),但有WhenOpen可以根据当前的声音设置来决定发不发声(实际PlayTone也有此检测,但对一些参数又不检测……绕不清了,想知道的自己看源码吧).

注意是调用时的参数,不是1C/2C/3C那个,是Mov R12,??的参数!

(原来的)
1:“嘀嘀嘀”三声
2:“叮”
3:电池没电的“嘀嘀嘀嘀”声
4:是按键音“咔”声
5:是”嘟“

(以下是我测试的)
6:线路1
7:线路2
14:线路1
15: 线路2
18-25:音频按键音
26:嘟-嘟嘟(一长二短)
28:3636(咪哪咪哪)
2D:VIP
2E: VIP
2F:振动短震->居然是铃声中!
30:嘀--(低)开机声音
31:重要记事
32:重要记事
33:嘟
34/35短信
36/37小区广播
38:36(超短)
39:3666(超短)
3A:3-6 3-6 3-6(有点像警报,但不是铃声那种特效的警报)
3B:嘀-嘀-嘀-嘀(像呼机)
3C:嘟嘀嘀 嘀-嘀-
3D:嘀-(弱)(关机声音)
3E:嘀--
3F:嘀-嘀-
后面我测试了几个,没有声音了。

以上是我的测试,因为是乱猜,所以有些肯定没有测试出来。

附:我制作的PlayTone测试补丁 BeepTest
使用方法:在待机状态下,用 AT+CGSN*34,3E40,??
就可测试??数字代表的声音。

需求:先刷"未接提醒V1",不会出现强刷。

分两个部分:

;BeepTest
0x363800: DABF6084 DABFA086
0x1F86A0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DABF608488C08870D7503400F2F7423E
0x1F86B0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2FC403E2D09407C2D07F07CDAB5A4D2
0x1F86C0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D7403400F6F7423E987098C0E6F9FFFF
0x1F86D0: FFFF DB00
;函数PlayTone2(就是那个播放长铃声会停的)
0x1F86E0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 8880F08CDAB5CED248403D0CE01C88C0
0x1F86F0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E02D88D0E6FCC034E0EDE01EF0F8DAB4
0x1F8700: FFFFFFFFFFFFFFFF 4C7208049880DB00






[此贴子已经被作者于2004-2-28 22:48:31编辑过]

MrJewes 发表于 2005-8-10 00:07:00

我主要是看到你写的这里:mov r14, #1   ;这个是关键?次数?因有些是0,有些是1,  :改0循环,改1播一次,改2只响了0.5秒就停了。

我想系统也是通过和铃声相同的函数来实现振动的,所以我猜想这个对振动也有用,测试了一下,果然。
在此,感谢你的研究!

RainMoon 发表于 2005-8-10 00:08:00

记得在国外哪里看到过类似的研究, 振动也属于铃声其中的一种,所以会有效。
我想这里的铃声函数应该非常有用的,具体的实现我也还在实验。

huajia 发表于 2005-8-10 00:09:00

4757E0:         mov        r8, #18h
4757E4:         jmpr        cc_UC, loc_47582C
;------------------------------------------------------------
4757E6:         mov        r8, #19h
4757EA:         jmpr        cc_UC, loc_47582C
;------------------------------------------------------------
4757EC:         mov        r8, #1Ah
4757F0:         jmpr        cc_UC, loc_47582C
;------------------------------------------------------------
4757F2:         mov        r8, #1Bh
4757F6:         jmpr        cc_UC, loc_47582C
;------------------------------------------------------------
4757F8:         mov        r8, #1Ch
4757FC:         jmpr        cc_UC, loc_47582C
;------------------------------------------------------------
4757FE:         mov        r8, #1Dh
475802:         jmpr        cc_UC, loc_47582C
;------------------------------------------------------------
475804:         mov        r8, #1Eh
475808:         jmpr        cc_UC, loc_47582C
;------------------------------------------------------------
47580A:         mov        r8, #1Fh
47580E:         jmpr        cc_UC, loc_47582C
;------------------------------------------------------------
475810:         mov        r8, #20h
475814:         jmpr        cc_UC, loc_47582C
;------------------------------------------------------------
475816:         mov        r8, #21h
47581A:         jmpr        cc_UC, loc_47582C
;------------------------------------------------------------
47581C:         mov        r8, #23h
475820:         jmpr        cc_UC, loc_47582C
;------------------------------------------------------------
475822:         mov        r8, #24h
475826:         jmpr        cc_UC, loc_47582C
;------------------------------------------------------------
475828:         mov        r8, #22h      ;音频按键的音调(非数字键)
47582C: loc_47582C:
47582C:         mov        r12, #157Eh
475830:         mov        r13, #43h
475834:         mov        r14, #6
475836:         mov        r15, #35h
47583A:         calls        0C5h, loc_C5EE76
47583E:         mov        r12, #157Eh
475842:         mov        r13, #43h
475846:         mov        r14, #6
475848:         mov        r15, #37h
47584C:         calls        0C5h, loc_C5EE76
475850:         cmp        r8, #0
475852:         jmpr        cc_Z, loc_47585A
475854:         mov        r12, r8       ;这里改为r7每个按键的音调都不同,包括短信、来电等
475856:         calls        0C7h, loc_C755BC;声音函数
47585A: loc_47585A:
47585A:         calls        0C5h, loc_C5DBE6
47585E:         mov        r8,
475860:         mov        r9,
475862:         rets

以上为X618音频按键音调函数,我星期五临下班时找到的,因为时间不多,只测试了音频声按键的音调,现家里无数据线,大家可看看有无可利用的价值。
http://www.36518.com/sjpd/bbs/dispbbs.asp?boardID=38&ID=17031



nonlyli 发表于 2005-8-10 00:10:00

不懂,huajia的。
我用PlayTone测试中有一个是震动(2F)。
再看“任意铃声”,结果还是没收获。只知道计算出了铃声,却不知如何播放它的(看不懂了)。

国外的我从来没去看过(E文太差),说不定Riza已经研究出来了?不然为什么有“任意铃声”?

且觉得从“音调设置”->“短消息” 才能找到真正可以停止的PlayMusic。

nonlyli 发表于 2005-8-10 00:11:00

此外,为什么说失败呢?因为“任意铃声”中计算的结果 古典1=05,但在这个PlayTone中05根本就不是“古典1”,所以我认为这个不是真正的PlayMusic(我觉得用这个名字是播任意音调的)

toodle 发表于 2005-8-10 00:12:00


我也觉得PlayMusic是另外的函数,与PlayTone不同。
页: [1]
查看完整版本: ◆未完成◆-对PlayTone的研究