⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radio_setgroupid.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 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 + -