📄 radio_setgroupid.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\radio_setgroupid.o --depend=.\Obj\radio_setgroupid.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\GUI\Widget\RADIO_SetGroupId.c]
THUMB
AREA ||i.RADIO_SetGroupId||, CODE, READONLY, ALIGN=2
RADIO_SetGroupId PROC
;;;135 */
;;;136 void RADIO_SetGroupId(RADIO_Handle hObj, U8 NewGroupId) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 ea5f0800 MOVS r8,r0
000008 460d MOV r5,r1
;;;137 if (hObj) {
00000a d034 BEQ |L1.118|
;;;138 RADIO_Obj* pObj;
;;;139 U8 OldGroupId;
;;;140 WM_LOCK();
;;;141 pObj = RADIO_H2P(hObj);
00000c 4640 MOV r0,r8
00000e f7fffffe BL GUI_ALLOC_h2p
;;;142 OldGroupId = pObj->GroupId;
000012 f8907040 LDRB r7,[r0,#0x40]
000016 4604 MOV r4,r0 ;141
;;;143 if (NewGroupId != OldGroupId) {
000018 42bd CMP r5,r7
00001a d02c BEQ |L1.118|
;;;144 WM_HWIN hFirst;
;;;145 hFirst = WM__GetFirstSibling(hObj);
00001c 4640 MOV r0,r8
00001e f7fffffe BL WM__GetFirstSibling
000022 4606 MOV r6,r0
;;;146 /* Set function pointer if necessary */
;;;147 if (NewGroupId && (RADIO__pfHandleSetValue == NULL)) {
000024 b125 CBZ r5,|L1.48|
000026 4815 LDR r0,|L1.124|
000028 6801 LDR r1,[r0,#0] ; RADIO__pfHandleSetValue
00002a b909 CBNZ r1,|L1.48|
;;;148 RADIO__pfHandleSetValue = _HandleSetValue;
00002c 4914 LDR r1,|L1.128|
00002e 6001 STR r1,[r0,#0] ; RADIO__pfHandleSetValue
|L1.48|
;;;149 }
;;;150 /* Pass our selection, if we have one, to another radio button in */
;;;151 /* our old group. So the group have a valid selection when we leave it. */
;;;152 if (OldGroupId && (pObj->Sel >= 0)) {
000030 b177 CBZ r7,|L1.80|
000032 f9b40038 LDRSH r0,[r4,#0x38]
000036 2800 CMP r0,#0
000038 db0a BLT |L1.80|
;;;153 WM_HWIN hWin;
;;;154 pObj->GroupId = 0; /* Leave group first, so _GetNextInGroup() could */
00003a 2000 MOVS r0,#0
00003c f8840040 STRB r0,[r4,#0x40]
;;;155 /* not find a handle to our own window. */
;;;156 hWin = _GetNextInGroup(hFirst, OldGroupId);
000040 4639 MOV r1,r7
000042 4630 MOV r0,r6
000044 f7fffffe BL _GetNextInGroup
;;;157 if (hWin) {
000048 b110 CBZ r0,|L1.80|
;;;158 _SetValue(hWin, 0);
00004a 2100 MOVS r1,#0
00004c f7fffffe BL _SetValue
|L1.80|
;;;159 }
;;;160 }
;;;161 /* Make sure we have a valid selection according to our new group */
;;;162 if (_GetNextInGroup(hFirst, NewGroupId) != 0) {
000050 4629 MOV r1,r5
000052 4630 MOV r0,r6
000054 f7fffffe BL _GetNextInGroup
000058 b110 CBZ r0,|L1.96|
;;;163 /* Join an existing group with an already valid selection, so clear our own one */
;;;164 RADIO__SetValue(hObj, pObj, -1);
00005a f04f32ff MOV r2,#0xffffffff
00005e e004 B |L1.106|
|L1.96|
;;;165 } else if (pObj->Sel < 0) {
000060 f9b40038 LDRSH r0,[r4,#0x38]
000064 2800 CMP r0,#0
000066 da04 BGE |L1.114|
;;;166 /* We are the first window in group, so we must have a valid selection at our own. */
;;;167 RADIO__SetValue(hObj, pObj, 0);
000068 2200 MOVS r2,#0
|L1.106|
00006a 4621 MOV r1,r4
00006c 4640 MOV r0,r8
00006e f7fffffe BL RADIO__SetValue
|L1.114|
;;;168 }
;;;169 /* Change the group */
;;;170 pObj->GroupId = NewGroupId;
000072 f8845040 STRB r5,[r4,#0x40]
|L1.118|
;;;171 }
;;;172 WM_UNLOCK();
;;;173 }
;;;174 }
000076 e8bd81f0 POP {r4-r8,pc}
;;;175
ENDP
00007a 0000 DCW 0x0000
|L1.124|
DCD RADIO__pfHandleSetValue
|L1.128|
DCD _HandleSetValue
AREA ||i._GetNextInGroup||, CODE, READONLY, ALIGN=1
_GetNextInGroup PROC
;;;72 */
;;;73 static WM_HWIN _GetNextInGroup(WM_HWIN hWin, U8 GroupId) {
000000 b570 PUSH {r4-r6,lr}
000002 4604 MOV r4,r0
000004 460d MOV r5,r1
;;;74 for (; hWin; hWin = WM_GetNextSibling(hWin)) {
000006 e00a B |L2.30|
|L2.8|
;;;75 if (_IsInGroup(hWin, GroupId)) {
000008 4629 MOV r1,r5
00000a 4620 MOV r0,r4
00000c f7fffffe BL _IsInGroup
000010 2800 CMP r0,#0
;;;76 return hWin;
000012 4620 MOV r0,r4
000014 d000 BEQ |L2.24|
;;;77 }
;;;78 }
;;;79 return 0;
;;;80 }
000016 bd70 POP {r4-r6,pc}
|L2.24|
000018 f7fffffe BL WM_GetNextSibling
00001c 4604 MOV r4,r0 ;74
|L2.30|
00001e 2c00 CMP r4,#0 ;74
000020 d1f2 BNE |L2.8|
000022 2000 MOVS r0,#0 ;79
000024 bd70 POP {r4-r6,pc}
;;;81
ENDP
AREA ||i._HandleSetValue||, CODE, READONLY, ALIGN=1
_HandleSetValue PROC
;;;102 */
;;;103 static void _HandleSetValue(RADIO_Handle hObj, RADIO_Obj* pObj, int v) {
000000 e92d47f0 PUSH {r4-r10,lr}
000004 4606 MOV r6,r0
000006 460d MOV r5,r1
000008 f1b20800 SUBS r8,r2,#0
;;;104 if (v < 0) {
;;;105 WM_HWIN hWin = _GetPrevInGroup(hObj, pObj->GroupId);
;;;106 if (hWin) {
;;;107 WM_SetFocus(hWin);
;;;108 _SetValue(hWin, 0x7FFF);
;;;109 RADIO__SetValue(hObj, pObj, -1);
00000c f04f37ff MOV r7,#0xffffffff
000010 da15 BGE |L3.62|
000012 4630 MOV r0,r6 ;105
000014 f8958040 LDRB r8,[r5,#0x40] ;105
|L3.24|
000018 f7fffffe BL WM__GetPrevSibling
00001c 0004 MOVS r4,r0 ;105
00001e d006 BEQ |L3.46|
000020 4641 MOV r1,r8 ;105
000022 4620 MOV r0,r4 ;105
000024 f7fffffe BL _IsInGroup
000028 b908 CBNZ r0,|L3.46|
00002a 4620 MOV r0,r4 ;105
00002c e7f4 B |L3.24|
|L3.46|
00002e 2c00 CMP r4,#0 ;106
000030 d040 BEQ |L3.180|
000032 4620 MOV r0,r4 ;107
000034 f7fffffe BL WM_SetFocus
000038 f64771ff MOV r1,#0x7fff ;108
00003c e00e B |L3.92|
|L3.62|
;;;110 }
;;;111 } else if (v >= pObj->NumItems) {
00003e 8fe9 LDRH r1,[r5,#0x3e]
000040 4541 CMP r1,r8
000042 dc10 BGT |L3.102|
;;;112 WM_HWIN hWin = _GetNextInGroup(pObj->Widget.Win.hNext, pObj->GroupId);
000044 f8951040 LDRB r1,[r5,#0x40]
000048 f9b5001a LDRSH r0,[r5,#0x1a]
00004c f7fffffe BL _GetNextInGroup
000050 0004 MOVS r4,r0
;;;113 if (hWin) {
000052 d02f BEQ |L3.180|
;;;114 WM_SetFocus(hWin);
000054 4620 MOV r0,r4
000056 f7fffffe BL WM_SetFocus
;;;115 _SetValue(hWin, 0);
00005a 2100 MOVS r1,#0
|L3.92|
00005c 4620 MOV r0,r4 ;108
00005e f7fffffe BL _SetValue
000062 463a MOV r2,r7 ;109
000064 e020 B |L3.168|
|L3.102|
;;;116 RADIO__SetValue(hObj, pObj, -1);
;;;117 }
;;;118 } else {
;;;119 if (pObj->Sel != v) {
000066 f9b51038 LDRSH r1,[r5,#0x38]
00006a 4541 CMP r1,r8
00006c d022 BEQ |L3.180|
;;;120 _ClearSelection(hObj, pObj->GroupId);
00006e f8959040 LDRB r9,[r5,#0x40]
000072 4630 MOV r0,r6
000074 f7fffffe BL WM__GetFirstSibling
000078 4604 MOV r4,r0
00007a 46ba MOV r10,r7 ;109
00007c e011 B |L3.162|
|L3.126|
00007e 4620 MOV r0,r4 ;109
000080 f7fffffe BL GUI_ALLOC_h2p
000084 4607 MOV r7,r0 ;109
000086 42b4 CMP r4,r6 ;109
000088 d009 BEQ |L3.158|
00008a 4649 MOV r1,r9 ;109
00008c 4620 MOV r0,r4 ;109
00008e f7fffffe BL _IsInGroup
000092 b120 CBZ r0,|L3.158|
000094 4652 MOV r2,r10 ;109
000096 4639 MOV r1,r7 ;109
000098 4620 MOV r0,r4 ;109
00009a f7fffffe BL RADIO__SetValue
|L3.158|
00009e f9b7401a LDRSH r4,[r7,#0x1a] ;109
|L3.162|
0000a2 2c00 CMP r4,#0 ;109
0000a4 d1eb BNE |L3.126|
;;;121 RADIO__SetValue(hObj, pObj, v);
0000a6 4642 MOV r2,r8
|L3.168|
0000a8 4629 MOV r1,r5
0000aa 4630 MOV r0,r6
0000ac e8bd47f0 POP {r4-r10,lr}
0000b0 f7ffbffe B.W RADIO__SetValue
|L3.180|
;;;122 }
;;;123 }
;;;124 }
0000b4 e8bd87f0 POP {r4-r10,pc}
;;;125
ENDP
AREA ||i._IsInGroup||, CODE, READONLY, ALIGN=1
_IsInGroup PROC
;;;45 */
;;;46 static int _IsInGroup(WM_HWIN hWin, U8 GroupId) {
000000 b53e PUSH {r1-r5,lr}
000002 000c MOVS r4,r1
;;;47 if (GroupId) {
000004 d008 BEQ |L4.24|
;;;48 WM_MESSAGE Msg;
;;;49 Msg.MsgId = WM_GET_RADIOGROUP;
000006 212b MOVS r1,#0x2b
;;;50 WM_SendMessage(hWin, &Msg);
000008 9100 STR r1,[sp,#0]
00000a 4669 MOV r1,sp
00000c f7fffffe BL WM_SendMessage
;;;51 return (Msg.Data.v == GroupId);
000010 9902 LDR r1,[sp,#8]
000012 2001 MOVS r0,#1
000014 42a1 CMP r1,r4
000016 d000 BEQ |L4.26|
|L4.24|
000018 2000 MOVS r0,#0
|L4.26|
;;;52 }
;;;53 return 0;
;;;54 }
00001a bd3e POP {r1-r5,pc}
;;;55
ENDP
AREA ||i._SetValue||, CODE, READONLY, ALIGN=1
_SetValue PROC
;;;35 */
;;;36 static void _SetValue(RADIO_Handle hObj, int v) {
000000 b570 PUSH {r4-r6,lr}
000002 4604 MOV r4,r0
000004 460d MOV r5,r1
;;;37 RADIO_Obj* pObj;
;;;38 pObj = RADIO_H2P(hObj);
000006 f7fffffe BL GUI_ALLOC_h2p
;;;39 RADIO__SetValue(hObj, pObj, v);
00000a 4601 MOV r1,r0
00000c 462a MOV r2,r5
00000e 4620 MOV r0,r4
000010 e8bd4070 POP {r4-r6,lr}
000014 f7ffbffe B.W RADIO__SetValue
;;;40 }
;;;41
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -