1 .cpu arm7tdmi 2 .arch armv4t 3 .fpu softvfp 4 .eabi_attribute 20, 1 5 .eabi_attribute 21, 1 6 .eabi_attribute 23, 3 7 .eabi_attribute 24, 1 8 .eabi_attribute 25, 1 9 .eabi_attribute 26, 1 10 .eabi_attribute 30, 4 11 .eabi_attribute 34, 0 12 .eabi_attribute 18, 4 13 .file "main.c" 14 .text 15 .Ltext0: 16 .cfi_sections .debug_frame 17 .file 1 "apps/menu/main.c" 18 .section .text.key_handler,"ax",%progbits 19 .align 2 20 .syntax unified 21 .arm 23 key_handler: 24 .LVL0: 25 .LFB105: 1:apps/menu/main.c **** /* Menu for Calypso Phone to load applicatios from flash */ 2:apps/menu/main.c **** 3:apps/menu/main.c **** /* (C) 2013 by Andreas Eversberg 4:apps/menu/main.c **** * 5:apps/menu/main.c **** * All Rights Reserved 6:apps/menu/main.c **** * 7:apps/menu/main.c **** * This program is free software; you can redistribute it and/or modify 8:apps/menu/main.c **** * it under the terms of the GNU General Public License as published by 9:apps/menu/main.c **** * the Free Software Foundation; either version 2 of the License, or 10:apps/menu/main.c **** * (at your option) any later version. 11:apps/menu/main.c **** * 12:apps/menu/main.c **** * This program is distributed in the hope that it will be useful, 13:apps/menu/main.c **** * but WITHOUT ANY WARRANTY; without even the implied warranty of 14:apps/menu/main.c **** * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15:apps/menu/main.c **** * GNU General Public License for more details. 16:apps/menu/main.c **** * 17:apps/menu/main.c **** */ 18:apps/menu/main.c **** 19:apps/menu/main.c **** #include 20:apps/menu/main.c **** #include 21:apps/menu/main.c **** #include 22:apps/menu/main.c **** #include 23:apps/menu/main.c **** 24:apps/menu/main.c **** #include 25:apps/menu/main.c **** #include 26:apps/menu/main.c **** #include 27:apps/menu/main.c **** #include 28:apps/menu/main.c **** #include 29:apps/menu/main.c **** #include 30:apps/menu/main.c **** #include 31:apps/menu/main.c **** #include 32:apps/menu/main.c **** #include 33:apps/menu/main.c **** #include 34:apps/menu/main.c **** #include 35:apps/menu/main.c **** #include 36:apps/menu/main.c **** #include 37:apps/menu/main.c **** #include 38:apps/menu/main.c **** #include 39:apps/menu/main.c **** #include 40:apps/menu/main.c **** #include 41:apps/menu/main.c **** #include 42:apps/menu/main.c **** #include 43:apps/menu/main.c **** #include 44:apps/menu/main.c **** #include 45:apps/menu/main.c **** #include 46:apps/menu/main.c **** 47:apps/menu/main.c **** #define RAM 0x00820000 48:apps/menu/main.c **** #define MAGIC 0x0083ff00 49:apps/menu/main.c **** 50:apps/menu/main.c **** static enum key_codes key_code = KEY_INV; 51:apps/menu/main.c **** static volatile enum key_states key_state; 52:apps/menu/main.c **** 53:apps/menu/main.c **** static int cursor = 0, scroll_apps = 0; 54:apps/menu/main.c **** 55:apps/menu/main.c **** static struct apps { 56:apps/menu/main.c **** char name[16]; 57:apps/menu/main.c **** void *start; 58:apps/menu/main.c **** int len; 59:apps/menu/main.c **** } apps[32]; 60:apps/menu/main.c **** 61:apps/menu/main.c **** static void locate_apps(void) 62:apps/menu/main.c **** { 63:apps/menu/main.c **** int i, j, k; 64:apps/menu/main.c **** char *p; 65:apps/menu/main.c **** 66:apps/menu/main.c **** memset(apps, 0, sizeof(apps)); 67:apps/menu/main.c **** 68:apps/menu/main.c **** for (j = 0, i = 0x010000; i < 0x200000; i += 0x10000) { 69:apps/menu/main.c **** p = (char *)i; 70:apps/menu/main.c **** /* check for highram header: "highram:" */ 71:apps/menu/main.c **** if (!!memcmp(p, "highram:", 8)) 72:apps/menu/main.c **** continue; 73:apps/menu/main.c **** p += 8; 74:apps/menu/main.c **** /* check for app name after header: "highram:\n" */ 75:apps/menu/main.c **** printf("found highram image at flash mem address 0x%p\n", 76:apps/menu/main.c **** (char *)i); 77:apps/menu/main.c **** for (k = 0; k < (int)sizeof(apps[j].name) - 1; k++) { 78:apps/menu/main.c **** if (p[k] == '\n') 79:apps/menu/main.c **** break; 80:apps/menu/main.c **** } 81:apps/menu/main.c **** if (k == sizeof(apps[j].name) - 3) { 82:apps/menu/main.c **** printf("skipping: corrupt highram header, no '\\n' " 83:apps/menu/main.c **** "after image name or name more larger than %d " 84:apps/menu/main.c **** "digits\n", (int)sizeof(apps[j].name) - 3); 85:apps/menu/main.c **** continue; 86:apps/menu/main.c **** } 87:apps/menu/main.c **** if (j < 9) 88:apps/menu/main.c **** apps[j].name[0] = '1' + j; 89:apps/menu/main.c **** else if (j == 9) 90:apps/menu/main.c **** apps[j].name[0] = '0'; 91:apps/menu/main.c **** else 92:apps/menu/main.c **** apps[j].name[0] = ' '; 93:apps/menu/main.c **** apps[j].name[1] = ' '; 94:apps/menu/main.c **** memcpy(apps[j].name + 2, p, k); 95:apps/menu/main.c **** apps[j].len = 0x20000; 96:apps/menu/main.c **** p += k + 1; 97:apps/menu/main.c **** /* p points to highram image after header */ 98:apps/menu/main.c **** apps[j].start = p; 99:apps/menu/main.c **** j++; 100:apps/menu/main.c **** } 101:apps/menu/main.c **** } 102:apps/menu/main.c **** 103:apps/menu/main.c **** static void wait_key_release(void) 104:apps/menu/main.c **** { 105:apps/menu/main.c **** /* wait for key release */ 106:apps/menu/main.c **** while (key_state == PRESSED) { 107:apps/menu/main.c **** delay_ms(10); 108:apps/menu/main.c **** keypad_poll(); 109:apps/menu/main.c **** } 110:apps/menu/main.c **** } 111:apps/menu/main.c **** 112:apps/menu/main.c **** static void load_app(void) 113:apps/menu/main.c **** { 114:apps/menu/main.c **** static int i; 115:apps/menu/main.c **** static void (*f) (void) = (void (*)(void))RAM; 116:apps/menu/main.c **** 117:apps/menu/main.c **** wait_key_release(); 118:apps/menu/main.c **** 119:apps/menu/main.c **** local_irq_disable(); 120:apps/menu/main.c **** 121:apps/menu/main.c **** for (i = 0; i < apps[cursor].len; i++) 122:apps/menu/main.c **** ((unsigned char *)RAM)[i] = ((unsigned char *)apps[cursor].start)[i]; 123:apps/menu/main.c **** f(); 124:apps/menu/main.c **** } 125:apps/menu/main.c **** 126:apps/menu/main.c **** /* UI */ 127:apps/menu/main.c **** 128:apps/menu/main.c **** static void refresh_display(void) 129:apps/menu/main.c **** { 130:apps/menu/main.c **** #if 0 131:apps/menu/main.c **** char text[16]; 132:apps/menu/main.c **** int bat = battery_info.battery_percent; 133:apps/menu/main.c **** #endif 134:apps/menu/main.c **** int i; 135:apps/menu/main.c **** 136:apps/menu/main.c **** fb_clear(); 137:apps/menu/main.c **** 138:apps/menu/main.c **** /* header */ 139:apps/menu/main.c **** fb_setbg(FB_COLOR_WHITE); 140:apps/menu/main.c **** if (1) { 141:apps/menu/main.c **** fb_setfg(FB_COLOR_BLUE); 142:apps/menu/main.c **** fb_setfont(FB_FONT_HELVR08); 143:apps/menu/main.c **** fb_gotoxy(0, 7); 144:apps/menu/main.c **** fb_putstr("Osmocom Menu", -1); 145:apps/menu/main.c **** fb_setfg(FB_COLOR_RGB(0xc0, 0xc0, 0x00)); 146:apps/menu/main.c **** fb_setfont(FB_FONT_SYMBOLS); 147:apps/menu/main.c **** #if 0 148:apps/menu/main.c **** fb_gotoxy(framebuffer->width - 15, 8); 149:apps/menu/main.c **** if (bat >= 100 && (battery_info.flags & BATTERY_CHG_ENABLED) 150:apps/menu/main.c **** && !(battery_info.flags & BATTERY_CHARGING)) 151:apps/menu/main.c **** fb_putstr("@HHBC", framebuffer->width); 152:apps/menu/main.c **** else { 153:apps/menu/main.c **** sprintf(text, "@%c%c%cC", (bat >= 30) ? 'B':'A', 154:apps/menu/main.c **** (bat >= 60) ? 'B':'A', (bat >= 90) ? 'B':'A'); 155:apps/menu/main.c **** fb_putstr(text, framebuffer->width); 156:apps/menu/main.c **** } 157:apps/menu/main.c **** #endif 158:apps/menu/main.c **** fb_gotoxy(0, 8); 159:apps/menu/main.c **** fb_putstr("GGEGG", framebuffer->width); 160:apps/menu/main.c **** fb_setfg(FB_COLOR_GREEN); 161:apps/menu/main.c **** fb_gotoxy(0, 10); 162:apps/menu/main.c **** fb_boxto(framebuffer->width - 1, 10); 163:apps/menu/main.c **** } 164:apps/menu/main.c **** fb_setfg(FB_COLOR_BLACK); 165:apps/menu/main.c **** fb_setfont(FB_FONT_C64); 166:apps/menu/main.c **** 167:apps/menu/main.c **** 168:apps/menu/main.c **** for (i = 0; i < 5; i++) { 169:apps/menu/main.c **** if (!apps[scroll_apps + i].name) 170:apps/menu/main.c **** break; 171:apps/menu/main.c **** if (scroll_apps + i == cursor) { 172:apps/menu/main.c **** fb_setfg(FB_COLOR_WHITE); 173:apps/menu/main.c **** fb_setbg(FB_COLOR_BLUE); 174:apps/menu/main.c **** } 175:apps/menu/main.c **** fb_gotoxy(0, 20 + i * 10); 176:apps/menu/main.c **** fb_putstr(apps[scroll_apps + i].name, 177:apps/menu/main.c **** framebuffer->width); 178:apps/menu/main.c **** if (scroll_apps + i == cursor) { 179:apps/menu/main.c **** fb_setfg(FB_COLOR_BLACK); 180:apps/menu/main.c **** fb_setbg(FB_COLOR_WHITE); 181:apps/menu/main.c **** } 182:apps/menu/main.c **** } 183:apps/menu/main.c **** if (i == 0) { 184:apps/menu/main.c **** fb_gotoxy(0, 50); 185:apps/menu/main.c **** fb_putstr("No apps!", -1); 186:apps/menu/main.c **** } 187:apps/menu/main.c **** 188:apps/menu/main.c **** fb_flush(); 189:apps/menu/main.c **** } 190:apps/menu/main.c **** 191:apps/menu/main.c **** static void handle_key_code() 192:apps/menu/main.c **** { 193:apps/menu/main.c **** if (key_code == KEY_INV) 194:apps/menu/main.c **** return; 195:apps/menu/main.c **** 196:apps/menu/main.c **** switch (key_code) { 197:apps/menu/main.c **** case KEY_1: 198:apps/menu/main.c **** case KEY_2: 199:apps/menu/main.c **** case KEY_3: 200:apps/menu/main.c **** case KEY_4: 201:apps/menu/main.c **** case KEY_5: 202:apps/menu/main.c **** case KEY_6: 203:apps/menu/main.c **** case KEY_7: 204:apps/menu/main.c **** case KEY_8: 205:apps/menu/main.c **** case KEY_9: 206:apps/menu/main.c **** if (apps[key_code - KEY_1].len) { 207:apps/menu/main.c **** cursor = key_code - KEY_1; 208:apps/menu/main.c **** load_app(); 209:apps/menu/main.c **** } 210:apps/menu/main.c **** break; 211:apps/menu/main.c **** case KEY_0: 212:apps/menu/main.c **** if (apps[9].len) { 213:apps/menu/main.c **** cursor = 9; 214:apps/menu/main.c **** load_app(); 215:apps/menu/main.c **** } 216:apps/menu/main.c **** break; 217:apps/menu/main.c **** case KEY_UP: 218:apps/menu/main.c **** if (cursor == 0) 219:apps/menu/main.c **** return; 220:apps/menu/main.c **** cursor--; 221:apps/menu/main.c **** if (cursor < scroll_apps) 222:apps/menu/main.c **** scroll_apps = cursor; 223:apps/menu/main.c **** refresh_display(); 224:apps/menu/main.c **** break; 225:apps/menu/main.c **** case KEY_DOWN: 226:apps/menu/main.c **** if (!apps[cursor + 1].name[0]) 227:apps/menu/main.c **** return; 228:apps/menu/main.c **** cursor++; 229:apps/menu/main.c **** if (cursor >= scroll_apps + 5) 230:apps/menu/main.c **** scroll_apps = cursor - 4; 231:apps/menu/main.c **** refresh_display(); 232:apps/menu/main.c **** break; 233:apps/menu/main.c **** case KEY_OK: 234:apps/menu/main.c **** if (apps[cursor].len) 235:apps/menu/main.c **** load_app(); 236:apps/menu/main.c **** break; 237:apps/menu/main.c **** case KEY_POWER: 238:apps/menu/main.c **** wait_key_release(); 239:apps/menu/main.c **** twl3025_power_off(); 240:apps/menu/main.c **** break; 241:apps/menu/main.c **** default: 242:apps/menu/main.c **** break; 243:apps/menu/main.c **** } 244:apps/menu/main.c **** 245:apps/menu/main.c **** key_code = KEY_INV; 246:apps/menu/main.c **** } 247:apps/menu/main.c **** 248:apps/menu/main.c **** /* Main Program */ 249:apps/menu/main.c **** const char *hr = "======================================================================\n"; 250:apps/menu/main.c **** 251:apps/menu/main.c **** static void key_handler(enum key_codes code, enum key_states state) 252:apps/menu/main.c **** { 26 .loc 1 252 1 view -0 27 .cfi_startproc 28 @ Function supports interworking. 29 @ args = 0, pretend = 0, frame = 0 30 @ frame_needed = 0, uses_anonymous_args = 0 31 @ link register save eliminated. 253:apps/menu/main.c **** key_state = state; 32 .loc 1 253 2 view .LVU1 33 .loc 1 253 12 is_stmt 0 view .LVU2 34 0000 10309FE5 ldr r3, .L3 254:apps/menu/main.c **** 255:apps/menu/main.c **** if (state != PRESSED) 35 .loc 1 255 5 view .LVU3 36 0004 000051E3 cmp r1, #0 253:apps/menu/main.c **** key_state = state; 37 .loc 1 253 12 view .LVU4 38 0008 0010C3E5 strb r1, [r3] 39 .loc 1 255 2 is_stmt 1 view .LVU5 256:apps/menu/main.c **** return; 257:apps/menu/main.c **** 258:apps/menu/main.c **** key_code = code; 40 .loc 1 258 2 view .LVU6 41 .loc 1 258 11 is_stmt 0 view .LVU7 42 000c 08309F05 ldreq r3, .L3+4 43 0010 0000C305 strbeq r0, [r3] 259:apps/menu/main.c **** } 44 .loc 1 259 1 view .LVU8 45 0014 1EFF2FE1 bx lr 46 .L4: 47 .align 2 48 .L3: 49 0018 00000000 .word .LANCHOR0 50 001c 00000000 .word .LANCHOR1 51 .cfi_endproc 52 .LFE105: 54 .section .text.wait_key_release,"ax",%progbits 55 .align 2 56 .syntax unified 57 .arm 59 wait_key_release: 60 .LFB101: 104:apps/menu/main.c **** /* wait for key release */ 61 .loc 1 104 1 is_stmt 1 view -0 62 .cfi_startproc 63 @ Function supports interworking. 64 @ args = 0, pretend = 0, frame = 0 65 @ frame_needed = 0, uses_anonymous_args = 0 106:apps/menu/main.c **** delay_ms(10); 66 .loc 1 106 2 view .LVU10 104:apps/menu/main.c **** /* wait for key release */ 67 .loc 1 104 1 is_stmt 0 view .LVU11 68 0000 10402DE9 push {r4, lr} 69 .LCFI0: 70 .cfi_def_cfa_offset 8 71 .cfi_offset 4, -8 72 .cfi_offset 14, -4 106:apps/menu/main.c **** delay_ms(10); 73 .loc 1 106 19 view .LVU12 74 0004 20409FE5 ldr r4, .L9 75 .L6: 106:apps/menu/main.c **** delay_ms(10); 76 .loc 1 106 19 is_stmt 1 view .LVU13 77 0008 0030D4E5 ldrb r3, [r4] @ zero_extendqisi2 78 000c 000053E3 cmp r3, #0 79 0010 0100000A beq .L7 110:apps/menu/main.c **** 80 .loc 1 110 1 is_stmt 0 view .LVU14 81 0014 1040BDE8 pop {r4, lr} 82 .LCFI1: 83 .cfi_remember_state 84 .cfi_restore 14 85 .cfi_restore 4 86 .cfi_def_cfa_offset 0 87 0018 1EFF2FE1 bx lr 88 .L7: 89 .LCFI2: 90 .cfi_restore_state 107:apps/menu/main.c **** keypad_poll(); 91 .loc 1 107 3 is_stmt 1 view .LVU15 92 001c 0A00A0E3 mov r0, #10 93 0020 FEFFFFEB bl delay_ms 94 .LVL1: 108:apps/menu/main.c **** } 95 .loc 1 108 3 view .LVU16 96 0024 FEFFFFEB bl keypad_poll 97 .LVL2: 98 0028 F6FFFFEA b .L6 99 .L10: 100 .align 2 101 .L9: 102 002c 00000000 .word .LANCHOR0 103 .cfi_endproc 104 .LFE101: 106 .section .text.load_app,"ax",%progbits 107 .align 2 108 .syntax unified 109 .arm 111 load_app: 112 .LFB102: 113:apps/menu/main.c **** static int i; 113 .loc 1 113 1 view -0 114 .cfi_startproc 115 @ Function supports interworking. 116 @ args = 0, pretend = 0, frame = 0 117 @ frame_needed = 0, uses_anonymous_args = 0 114:apps/menu/main.c **** static void (*f) (void) = (void (*)(void))RAM; 118 .loc 1 114 2 view .LVU18 115:apps/menu/main.c **** 119 .loc 1 115 2 view .LVU19 117:apps/menu/main.c **** 120 .loc 1 117 2 view .LVU20 113:apps/menu/main.c **** static int i; 121 .loc 1 113 1 is_stmt 0 view .LVU21 122 0000 10402DE9 push {r4, lr} 123 .LCFI3: 124 .cfi_def_cfa_offset 8 125 .cfi_offset 4, -8 126 .cfi_offset 14, -4 117:apps/menu/main.c **** 127 .loc 1 117 2 view .LVU22 128 0004 FEFFFFEB bl wait_key_release 129 .LVL3: 119:apps/menu/main.c **** 130 .loc 1 119 2 is_stmt 1 view .LVU23 131 .LBB56: 119:apps/menu/main.c **** 132 .loc 1 119 2 view .LVU24 119:apps/menu/main.c **** 133 .loc 1 119 2 view .LVU25 134 .syntax divided 135 @ 119 "apps/menu/main.c" 1 136 0008 00300FE1 mrs r3, cpsr @ local_irq_disable 137 000c 803083E3 orr r3, r3, #128 138 0010 03F021E1 msr cpsr_c, r3 139 @ 0 "" 2 140 .LVL4: 119:apps/menu/main.c **** 141 .loc 1 119 2 is_stmt 0 view .LVU26 142 .arm 143 .syntax unified 144 .LBE56: 121:apps/menu/main.c **** ((unsigned char *)RAM)[i] = ((unsigned char *)apps[cursor].start)[i]; 145 .loc 1 121 2 is_stmt 1 view .LVU27 121:apps/menu/main.c **** ((unsigned char *)RAM)[i] = ((unsigned char *)apps[cursor].start)[i]; 146 .loc 1 121 9 is_stmt 0 view .LVU28 147 0014 0020A0E3 mov r2, #0 121:apps/menu/main.c **** ((unsigned char *)RAM)[i] = ((unsigned char *)apps[cursor].start)[i]; 148 .loc 1 121 30 view .LVU29 149 0018 18C0A0E3 mov ip, #24 121:apps/menu/main.c **** ((unsigned char *)RAM)[i] = ((unsigned char *)apps[cursor].start)[i]; 150 .loc 1 121 2 view .LVU30 151 001c 0230A0E1 mov r3, r2 121:apps/menu/main.c **** ((unsigned char *)RAM)[i] = ((unsigned char *)apps[cursor].start)[i]; 152 .loc 1 121 9 view .LVU31 153 0020 44109FE5 ldr r1, .L19 121:apps/menu/main.c **** ((unsigned char *)RAM)[i] = ((unsigned char *)apps[cursor].start)[i]; 154 .loc 1 121 30 view .LVU32 155 0024 080091E5 ldr r0, [r1, #8] 156 0028 9C1020E0 mla r0, ip, r0, r1 121:apps/menu/main.c **** ((unsigned char *)RAM)[i] = ((unsigned char *)apps[cursor].start)[i]; 157 .loc 1 121 9 view .LVU33 158 002c 042081E5 str r2, [r1, #4] 159 .L12: 121:apps/menu/main.c **** ((unsigned char *)RAM)[i] = ((unsigned char *)apps[cursor].start)[i]; 160 .loc 1 121 16 is_stmt 1 discriminator 1 view .LVU34 161 0030 20C090E5 ldr ip, [r0, #32] 162 0034 03005CE1 cmp ip, r3 163 0038 040000CA bgt .L13 164 003c 000052E3 cmp r2, #0 165 0040 04308115 strne r3, [r1, #4] 123:apps/menu/main.c **** } 166 .loc 1 123 2 view .LVU35 124:apps/menu/main.c **** 167 .loc 1 124 1 is_stmt 0 view .LVU36 168 0044 1040BDE8 pop {r4, lr} 169 .LCFI4: 170 .cfi_remember_state 171 .cfi_restore 14 172 .cfi_restore 4 173 .cfi_def_cfa_offset 0 123:apps/menu/main.c **** } 174 .loc 1 123 2 view .LVU37 175 0048 8238A0E3 mov r3, #8519680 176 004c 13FF2FE1 bx r3 @ indirect register sibling call 177 .LVL5: 178 .L13: 179 .LCFI5: 180 .cfi_restore_state 122:apps/menu/main.c **** f(); 181 .loc 1 122 3 is_stmt 1 discriminator 3 view .LVU38 122:apps/menu/main.c **** f(); 182 .loc 1 122 68 is_stmt 0 discriminator 3 view .LVU39 183 0050 1C2090E5 ldr r2, [r0, #28] 184 0054 03C0D2E7 ldrb ip, [r2, r3] @ zero_extendqisi2 122:apps/menu/main.c **** f(); 185 .loc 1 122 29 discriminator 3 view .LVU40 186 0058 822883E2 add r2, r3, #8519680 187 005c 00C0C2E5 strb ip, [r2] 121:apps/menu/main.c **** ((unsigned char *)RAM)[i] = ((unsigned char *)apps[cursor].start)[i]; 188 .loc 1 121 37 is_stmt 1 discriminator 3 view .LVU41 189 0060 013083E2 add r3, r3, #1 190 0064 0120A0E3 mov r2, #1 191 0068 F0FFFFEA b .L12 192 .L20: 193 .align 2 194 .L19: 195 006c 00000000 .word .LANCHOR0 196 .cfi_endproc 197 .LFE102: 199 .section .text.fb_putstr.isra.0,"ax",%progbits 200 .align 2 201 .syntax unified 202 .arm 204 fb_putstr.isra.0: 205 .LVL6: 206 .LFB107: 207 .file 2 "include/fb/framebuffer.h" 1:include/fb/framebuffer.h **** #ifndef _FB_FRAMEBUFFER_H 2:include/fb/framebuffer.h **** #define _FB_FRAMEBUFFER_H 3:include/fb/framebuffer.h **** 4:include/fb/framebuffer.h **** #include 5:include/fb/framebuffer.h **** #include 6:include/fb/framebuffer.h **** 7:include/fb/framebuffer.h **** /* color is encoded as */ 8:include/fb/framebuffer.h **** /* if a color is "special", then the RGB components most likely 9:include/fb/framebuffer.h **** don't make sense. Use "special" colours when you have to 10:include/fb/framebuffer.h **** mask out bits with transparency or you have to encode 11:include/fb/framebuffer.h **** colours in a fixed color palette ... */ 12:include/fb/framebuffer.h **** 13:include/fb/framebuffer.h **** #define FB_COLOR_WHITE 0x00ffffffU 14:include/fb/framebuffer.h **** #define FB_COLOR_BLACK 0x00000000U 15:include/fb/framebuffer.h **** #define FB_COLOR_TRANSP 0x01ffffffU 16:include/fb/framebuffer.h **** 17:include/fb/framebuffer.h **** #define FB_COLOR_RGB(r,g,b) ((((r) & 0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)) 18:include/fb/framebuffer.h **** #define FB_COLOR_RED FB_COLOR_RGB(0xff,0x00,0x00) 19:include/fb/framebuffer.h **** #define FB_COLOR_GREEN FB_COLOR_RGB(0x00,0xff,0x00) 20:include/fb/framebuffer.h **** #define FB_COLOR_BLUE FB_COLOR_RGB(0x00,0x00,0xff) 21:include/fb/framebuffer.h **** 22:include/fb/framebuffer.h **** /* encode */ 23:include/fb/framebuffer.h **** 24:include/fb/framebuffer.h **** /* decode */ 25:include/fb/framebuffer.h **** #define FB_COLOR_IS_SPECIAL(v) (!!((v) & 0xff000000U)) 26:include/fb/framebuffer.h **** #define FB_COLOR_TO_R(v) (((v)>>16) & 0xff) 27:include/fb/framebuffer.h **** #define FB_COLOR_TO_G(v) (((v)>> 8) & 0xff) 28:include/fb/framebuffer.h **** #define FB_COLOR_TO_B(v) ( (v) & 0xff) 29:include/fb/framebuffer.h **** 30:include/fb/framebuffer.h **** struct framebuffer { 31:include/fb/framebuffer.h **** char name[8]; // keep it short! 32:include/fb/framebuffer.h **** void (*init)(); // (re)initialize 33:include/fb/framebuffer.h **** void (*clear)(); // clear display 34:include/fb/framebuffer.h **** void (*set_p)(uint16_t x,uint16_t y); // set pixel to fg color 35:include/fb/framebuffer.h **** void (*boxto)(uint16_t x,uint16_t y); // draw box to xy 36:include/fb/framebuffer.h **** void (*lineto)(uint16_t x,uint16_t y); // draw line to xy 37:include/fb/framebuffer.h **** int (*putstr)(char *c,int maxwidth); // put text in current font to fb 38:include/fb/framebuffer.h **** void (*flush)(); // flush changes 39:include/fb/framebuffer.h **** 40:include/fb/framebuffer.h **** uint16_t width,height; // width/height of fb 41:include/fb/framebuffer.h **** uint16_t cursor_x,cursor_y; // current cursor 42:include/fb/framebuffer.h **** uint32_t fg_color,bg_color; // current fg/bg color 43:include/fb/framebuffer.h **** enum fb_font_id font; // current font 44:include/fb/framebuffer.h **** }; 45:include/fb/framebuffer.h **** 46:include/fb/framebuffer.h **** /* there is a single framebuffer, the specific driver defines 47:include/fb/framebuffer.h **** the "framebuffer" symbol */ 48:include/fb/framebuffer.h **** extern struct framebuffer *framebuffer; 49:include/fb/framebuffer.h **** 50:include/fb/framebuffer.h **** static inline void 51:include/fb/framebuffer.h **** fb_init(){ 52:include/fb/framebuffer.h **** framebuffer->init(); 53:include/fb/framebuffer.h **** } 54:include/fb/framebuffer.h **** 55:include/fb/framebuffer.h **** static inline void 56:include/fb/framebuffer.h **** fb_clear(){ 57:include/fb/framebuffer.h **** framebuffer->clear(); 58:include/fb/framebuffer.h **** } 59:include/fb/framebuffer.h **** 60:include/fb/framebuffer.h **** static inline void 61:include/fb/framebuffer.h **** fb_boxto(uint16_t x,uint16_t y){ 62:include/fb/framebuffer.h **** framebuffer->boxto(x,y); 63:include/fb/framebuffer.h **** } 64:include/fb/framebuffer.h **** 65:include/fb/framebuffer.h **** static inline void 66:include/fb/framebuffer.h **** fb_lineto(uint16_t x,uint16_t y){ 67:include/fb/framebuffer.h **** framebuffer->lineto(x,y); 68:include/fb/framebuffer.h **** } 69:include/fb/framebuffer.h **** 70:include/fb/framebuffer.h **** static inline void 71:include/fb/framebuffer.h **** fb_set_p(uint16_t x,uint16_t y){ 72:include/fb/framebuffer.h **** framebuffer->set_p(x,y); 73:include/fb/framebuffer.h **** } 74:include/fb/framebuffer.h **** 75:include/fb/framebuffer.h **** static inline int 76:include/fb/framebuffer.h **** fb_putstr(char *str,int maxwidth){ 208 .loc 2 76 1 view -0 209 .cfi_startproc 210 @ Function supports interworking. 211 @ args = 0, pretend = 0, frame = 0 212 @ frame_needed = 0, uses_anonymous_args = 0 213 @ link register save eliminated. 77:include/fb/framebuffer.h **** return framebuffer->putstr(str,maxwidth); 214 .loc 2 77 2 view .LVU43 215 .loc 2 77 20 is_stmt 0 view .LVU44 216 0000 08309FE5 ldr r3, .L22 217 0004 003093E5 ldr r3, [r3] 218 .loc 2 77 9 view .LVU45 219 0008 1C3093E5 ldr r3, [r3, #28] 220 000c 13FF2FE1 bx r3 221 .LVL7: 222 .L23: 223 .loc 2 77 9 view .LVU46 224 .align 2 225 .L22: 226 0010 00000000 .word framebuffer 227 .cfi_endproc 228 .LFE107: 230 .section .rodata.str1.1,"aMS",%progbits,1 231 .LC0: 232 0000 4F736D6F .ascii "Osmocom Menu\000" 232 636F6D20 232 4D656E75 232 00 233 .LC1: 234 000d 47474547 .ascii "GGEGG\000" 234 4700 235 .section .text.refresh_display,"ax",%progbits 236 .align 2 237 .syntax unified 238 .arm 240 refresh_display: 241 .LFB103: 129:apps/menu/main.c **** #if 0 242 .loc 1 129 1 is_stmt 1 view -0 243 .cfi_startproc 244 @ Function supports interworking. 245 @ args = 0, pretend = 0, frame = 0 246 @ frame_needed = 0, uses_anonymous_args = 0 134:apps/menu/main.c **** 247 .loc 1 134 2 view .LVU48 136:apps/menu/main.c **** 248 .loc 1 136 2 view .LVU49 249 .LBB95: 250 .LBI95: 56:include/fb/framebuffer.h **** framebuffer->clear(); 251 .loc 2 56 1 view .LVU50 252 .LBB96: 57:include/fb/framebuffer.h **** } 253 .loc 2 57 2 view .LVU51 254 .LBE96: 255 .LBE95: 129:apps/menu/main.c **** #if 0 256 .loc 1 129 1 is_stmt 0 view .LVU52 257 0000 F0472DE9 push {r4, r5, r6, r7, r8, r9, r10, lr} 258 .LCFI6: 259 .cfi_def_cfa_offset 32 260 .cfi_offset 4, -32 261 .cfi_offset 5, -28 262 .cfi_offset 6, -24 263 .cfi_offset 7, -20 264 .cfi_offset 8, -16 265 .cfi_offset 9, -12 266 .cfi_offset 10, -8 267 .cfi_offset 14, -4 268 .LBB98: 269 .LBB97: 57:include/fb/framebuffer.h **** } 270 .loc 2 57 13 view .LVU53 271 0004 3C519FE5 ldr r5, .L30 272 0008 003095E5 ldr r3, [r5] 57:include/fb/framebuffer.h **** } 273 .loc 2 57 2 view .LVU54 274 000c 0C3093E5 ldr r3, [r3, #12] 275 0010 0FE0A0E1 mov lr, pc 276 0014 13FF2FE1 bx r3 277 .LVL8: 278 .LBE97: 279 .LBE98: 139:apps/menu/main.c **** if (1) { 280 .loc 1 139 2 is_stmt 1 view .LVU55 281 .LBB99: 282 .LBI99: 78:include/fb/framebuffer.h **** } 79:include/fb/framebuffer.h **** 80:include/fb/framebuffer.h **** static inline void 81:include/fb/framebuffer.h **** fb_flush(){ 82:include/fb/framebuffer.h **** framebuffer->flush(); 83:include/fb/framebuffer.h **** } 84:include/fb/framebuffer.h **** 85:include/fb/framebuffer.h **** static inline void 86:include/fb/framebuffer.h **** fb_gotoxy(uint16_t x,uint16_t y){ 87:include/fb/framebuffer.h **** framebuffer->cursor_x = x; 88:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 89:include/fb/framebuffer.h **** } 90:include/fb/framebuffer.h **** 91:include/fb/framebuffer.h **** static inline void 92:include/fb/framebuffer.h **** fb_setfg(uint32_t color){ 93:include/fb/framebuffer.h **** framebuffer->fg_color = color; 94:include/fb/framebuffer.h **** } 95:include/fb/framebuffer.h **** 96:include/fb/framebuffer.h **** static inline void 97:include/fb/framebuffer.h **** fb_setbg(uint32_t color){ 283 .loc 2 97 1 view .LVU56 284 .LBB100: 98:include/fb/framebuffer.h **** framebuffer->bg_color = color; 285 .loc 2 98 2 view .LVU57 286 .LBE100: 287 .LBE99: 288 .LBB104: 289 .LBB105: 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 290 .loc 2 87 24 is_stmt 0 view .LVU58 291 0018 0728A0E3 mov r2, #458752 292 .LBE105: 293 .LBE104: 294 .LBB107: 295 .LBB101: 296 .loc 2 98 13 view .LVU59 297 001c 003095E5 ldr r3, [r5] 298 .LVL9: 299 .loc 2 98 13 view .LVU60 300 .LBE101: 301 .LBE107: 140:apps/menu/main.c **** fb_setfg(FB_COLOR_BLUE); 302 .loc 1 140 2 is_stmt 1 view .LVU61 141:apps/menu/main.c **** fb_setfont(FB_FONT_HELVR08); 303 .loc 1 141 3 view .LVU62 304 .LBB108: 305 .LBI108: 92:include/fb/framebuffer.h **** framebuffer->fg_color = color; 306 .loc 2 92 1 view .LVU63 307 .LBB109: 93:include/fb/framebuffer.h **** } 308 .loc 2 93 2 view .LVU64 93:include/fb/framebuffer.h **** } 309 .loc 2 93 2 is_stmt 0 view .LVU65 310 .LBE109: 311 .LBE108: 142:apps/menu/main.c **** fb_gotoxy(0, 7); 312 .loc 1 142 3 is_stmt 1 view .LVU66 313 .LBB112: 314 .LBI112: 99:include/fb/framebuffer.h **** } 100:include/fb/framebuffer.h **** 101:include/fb/framebuffer.h **** static inline void 102:include/fb/framebuffer.h **** fb_setfont(enum fb_font_id fid){ 315 .loc 2 102 1 view .LVU67 316 .LBB113: 103:include/fb/framebuffer.h **** framebuffer->font = fid; 317 .loc 2 103 2 view .LVU68 318 .loc 2 103 2 is_stmt 0 view .LVU69 319 .LBE113: 320 .LBE112: 143:apps/menu/main.c **** fb_putstr("Osmocom Menu", -1); 321 .loc 1 143 3 is_stmt 1 view .LVU70 322 .LBB116: 323 .LBI104: 86:include/fb/framebuffer.h **** framebuffer->cursor_x = x; 324 .loc 2 86 1 view .LVU71 325 .LBB106: 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 326 .loc 2 87 2 view .LVU72 88:include/fb/framebuffer.h **** } 327 .loc 2 88 2 view .LVU73 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 328 .loc 2 87 24 is_stmt 0 view .LVU74 329 0020 282083E5 str r2, [r3, #40] 330 .LBE106: 331 .LBE116: 332 .LBB117: 333 .LBB110: 93:include/fb/framebuffer.h **** } 334 .loc 2 93 24 view .LVU75 335 0024 FF20A0E3 mov r2, #255 336 .LBE110: 337 .LBE117: 338 .LBB118: 339 .LBB114: 340 .loc 2 103 20 view .LVU76 341 0028 0040A0E3 mov r4, #0 342 .LBE114: 343 .LBE118: 344 .LBB119: 345 .LBB111: 93:include/fb/framebuffer.h **** } 346 .loc 2 93 24 view .LVU77 347 002c 2C2083E5 str r2, [r3, #44] 348 .LBE111: 349 .LBE119: 350 .LBB120: 351 .LBB102: 98:include/fb/framebuffer.h **** } 352 .loc 2 98 24 view .LVU78 353 0030 FF24E0E3 mvn r2, #-16777216 354 .LBE102: 355 .LBE120: 144:apps/menu/main.c **** fb_setfg(FB_COLOR_RGB(0xc0, 0xc0, 0x00)); 356 .loc 1 144 3 view .LVU79 357 0034 0010E0E3 mvn r1, #0 358 .LBB121: 359 .LBB103: 98:include/fb/framebuffer.h **** } 360 .loc 2 98 24 view .LVU80 361 0038 302083E5 str r2, [r3, #48] 362 .LBE103: 363 .LBE121: 364 .LBB122: 365 .LBB115: 366 .loc 2 103 20 view .LVU81 367 003c 3440C3E5 strb r4, [r3, #52] 368 .LVL10: 369 .loc 2 103 20 view .LVU82 370 .LBE115: 371 .LBE122: 144:apps/menu/main.c **** fb_setfg(FB_COLOR_RGB(0xc0, 0xc0, 0x00)); 372 .loc 1 144 3 is_stmt 1 view .LVU83 373 0040 04019FE5 ldr r0, .L30+4 374 0044 FEFFFFEB bl fb_putstr.isra.0 375 .LVL11: 145:apps/menu/main.c **** fb_setfont(FB_FONT_SYMBOLS); 376 .loc 1 145 3 view .LVU84 377 .LBB123: 378 .LBI123: 92:include/fb/framebuffer.h **** framebuffer->fg_color = color; 379 .loc 2 92 1 view .LVU85 380 .LBB124: 93:include/fb/framebuffer.h **** } 381 .loc 2 93 2 view .LVU86 382 .LBE124: 383 .LBE123: 384 .LBB128: 385 .LBB129: 386 .loc 2 103 20 is_stmt 0 view .LVU87 387 0048 0320A0E3 mov r2, #3 388 .LBE129: 389 .LBE128: 390 .LBB131: 391 .LBB125: 93:include/fb/framebuffer.h **** } 392 .loc 2 93 13 view .LVU88 393 004c 003095E5 ldr r3, [r5] 394 .LVL12: 93:include/fb/framebuffer.h **** } 395 .loc 2 93 13 view .LVU89 396 .LBE125: 397 .LBE131: 146:apps/menu/main.c **** #if 0 398 .loc 1 146 3 is_stmt 1 view .LVU90 399 .LBB132: 400 .LBI128: 102:include/fb/framebuffer.h **** framebuffer->font = fid; 401 .loc 2 102 1 view .LVU91 402 .LBB130: 403 .loc 2 103 2 view .LVU92 404 .loc 2 103 20 is_stmt 0 view .LVU93 405 0050 3420C3E5 strb r2, [r3, #52] 406 .LVL13: 407 .loc 2 103 20 view .LVU94 408 .LBE130: 409 .LBE132: 158:apps/menu/main.c **** fb_putstr("GGEGG", framebuffer->width); 410 .loc 1 158 3 is_stmt 1 view .LVU95 411 .LBB133: 412 .LBI133: 86:include/fb/framebuffer.h **** framebuffer->cursor_x = x; 413 .loc 2 86 1 view .LVU96 414 .LBB134: 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 415 .loc 2 87 2 view .LVU97 88:include/fb/framebuffer.h **** } 416 .loc 2 88 2 view .LVU98 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 417 .loc 2 87 24 is_stmt 0 view .LVU99 418 0054 0227A0E3 mov r2, #524288 419 0058 282083E5 str r2, [r3, #40] 420 .LBE134: 421 .LBE133: 422 .LBB135: 423 .LBB126: 93:include/fb/framebuffer.h **** } 424 .loc 2 93 24 view .LVU100 425 005c EC209FE5 ldr r2, .L30+8 426 .LBE126: 427 .LBE135: 159:apps/menu/main.c **** fb_setfg(FB_COLOR_GREEN); 428 .loc 1 159 3 view .LVU101 429 0060 B412D3E1 ldrh r1, [r3, #36] 430 .LBB136: 431 .LBB127: 93:include/fb/framebuffer.h **** } 432 .loc 2 93 24 view .LVU102 433 0064 2C2083E5 str r2, [r3, #44] 434 .LVL14: 93:include/fb/framebuffer.h **** } 435 .loc 2 93 24 view .LVU103 436 .LBE127: 437 .LBE136: 159:apps/menu/main.c **** fb_setfg(FB_COLOR_GREEN); 438 .loc 1 159 3 is_stmt 1 view .LVU104 439 0068 E4009FE5 ldr r0, .L30+12 440 006c FEFFFFEB bl fb_putstr.isra.0 441 .LVL15: 160:apps/menu/main.c **** fb_gotoxy(0, 10); 442 .loc 1 160 3 view .LVU105 443 .LBB137: 444 .LBI137: 92:include/fb/framebuffer.h **** framebuffer->fg_color = color; 445 .loc 2 92 1 view .LVU106 446 .LBB138: 93:include/fb/framebuffer.h **** } 447 .loc 2 93 2 view .LVU107 448 .LBE138: 449 .LBE137: 450 .LBB142: 451 .LBB143: 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 452 .loc 2 87 24 is_stmt 0 view .LVU108 453 0070 0A28A0E3 mov r2, #655360 454 .LBE143: 455 .LBE142: 456 .LBB145: 457 .LBB139: 93:include/fb/framebuffer.h **** } 458 .loc 2 93 13 view .LVU109 459 0074 003095E5 ldr r3, [r5] 460 .LVL16: 93:include/fb/framebuffer.h **** } 461 .loc 2 93 13 view .LVU110 462 .LBE139: 463 .LBE145: 161:apps/menu/main.c **** fb_boxto(framebuffer->width - 1, 10); 464 .loc 1 161 3 is_stmt 1 view .LVU111 465 .LBB146: 466 .LBI142: 86:include/fb/framebuffer.h **** framebuffer->cursor_x = x; 467 .loc 2 86 1 view .LVU112 468 .LBB144: 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 469 .loc 2 87 2 view .LVU113 88:include/fb/framebuffer.h **** } 470 .loc 2 88 2 view .LVU114 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 471 .loc 2 87 24 is_stmt 0 view .LVU115 472 0078 282083E5 str r2, [r3, #40] 473 .LBE144: 474 .LBE146: 475 .LBB147: 476 .LBB140: 93:include/fb/framebuffer.h **** } 477 .loc 2 93 24 view .LVU116 478 007c FF2CA0E3 mov r2, #65280 479 .LBE140: 480 .LBE147: 162:apps/menu/main.c **** } 481 .loc 1 162 3 view .LVU117 482 0080 B402D3E1 ldrh r0, [r3, #36] 483 0084 010040E2 sub r0, r0, #1 484 .LBB148: 485 .LBB149: 62:include/fb/framebuffer.h **** } 486 .loc 2 62 2 view .LVU118 487 0088 0008A0E1 lsl r0, r0, #16 488 .LBE149: 489 .LBE148: 490 .LBB151: 491 .LBB141: 93:include/fb/framebuffer.h **** } 492 .loc 2 93 24 view .LVU119 493 008c 2C2083E5 str r2, [r3, #44] 494 .LVL17: 93:include/fb/framebuffer.h **** } 495 .loc 2 93 24 view .LVU120 496 .LBE141: 497 .LBE151: 162:apps/menu/main.c **** } 498 .loc 1 162 3 is_stmt 1 view .LVU121 499 .LBB152: 500 .LBI148: 61:include/fb/framebuffer.h **** framebuffer->boxto(x,y); 501 .loc 2 61 1 view .LVU122 502 .LBB150: 62:include/fb/framebuffer.h **** } 503 .loc 2 62 2 view .LVU123 504 0090 0A10A0E3 mov r1, #10 505 0094 143093E5 ldr r3, [r3, #20] 506 .LVL18: 62:include/fb/framebuffer.h **** } 507 .loc 2 62 2 is_stmt 0 view .LVU124 508 0098 2008A0E1 lsr r0, r0, #16 509 009c 0FE0A0E1 mov lr, pc 510 00a0 13FF2FE1 bx r3 511 .LVL19: 62:include/fb/framebuffer.h **** } 512 .loc 2 62 2 view .LVU125 513 .LBE150: 514 .LBE152: 164:apps/menu/main.c **** fb_setfont(FB_FONT_C64); 515 .loc 1 164 2 is_stmt 1 view .LVU126 516 .LBB153: 517 .LBI153: 92:include/fb/framebuffer.h **** framebuffer->fg_color = color; 518 .loc 2 92 1 view .LVU127 519 .LBB154: 93:include/fb/framebuffer.h **** } 520 .loc 2 93 2 view .LVU128 521 .LBE154: 522 .LBE153: 523 .LBB157: 524 .LBB158: 525 .loc 2 103 20 is_stmt 0 view .LVU129 526 00a4 0220A0E3 mov r2, #2 527 00a8 1460A0E3 mov r6, #20 528 .LBE158: 529 .LBE157: 530 .LBB160: 531 .LBB155: 93:include/fb/framebuffer.h **** } 532 .loc 2 93 13 view .LVU130 533 00ac 003095E5 ldr r3, [r5] 534 .LBE155: 535 .LBE160: 171:apps/menu/main.c **** fb_setfg(FB_COLOR_WHITE); 536 .loc 1 171 19 view .LVU131 537 00b0 A0709FE5 ldr r7, .L30+16 538 .LBB161: 539 .LBB156: 93:include/fb/framebuffer.h **** } 540 .loc 2 93 24 view .LVU132 541 00b4 2C4083E5 str r4, [r3, #44] 542 .LVL20: 93:include/fb/framebuffer.h **** } 543 .loc 2 93 24 view .LVU133 544 .LBE156: 545 .LBE161: 165:apps/menu/main.c **** 546 .loc 1 165 2 is_stmt 1 view .LVU134 547 .LBB162: 548 .LBI157: 102:include/fb/framebuffer.h **** framebuffer->font = fid; 549 .loc 2 102 1 view .LVU135 550 .LBB159: 551 .loc 2 103 2 view .LVU136 552 .loc 2 103 20 is_stmt 0 view .LVU137 553 00b8 3420C3E5 strb r2, [r3, #52] 554 .LVL21: 555 .loc 2 103 20 view .LVU138 556 .LBE159: 557 .LBE162: 168:apps/menu/main.c **** if (!apps[scroll_apps + i].name) 558 .loc 1 168 2 is_stmt 1 view .LVU139 168:apps/menu/main.c **** if (!apps[scroll_apps + i].name) 559 .loc 1 168 16 view .LVU140 176:apps/menu/main.c **** framebuffer->width); 560 .loc 1 176 34 is_stmt 0 view .LVU141 561 00bc 0C8087E2 add r8, r7, #12 562 .LVL22: 563 .L27: 169:apps/menu/main.c **** break; 564 .loc 1 169 3 is_stmt 1 view .LVU142 171:apps/menu/main.c **** fb_setfg(FB_COLOR_WHITE); 565 .loc 1 171 3 view .LVU143 171:apps/menu/main.c **** fb_setfg(FB_COLOR_WHITE); 566 .loc 1 171 19 is_stmt 0 view .LVU144 567 00c0 0C2397E5 ldr r2, [r7, #780] 171:apps/menu/main.c **** fb_setfg(FB_COLOR_WHITE); 568 .loc 1 171 6 view .LVU145 569 00c4 081097E5 ldr r1, [r7, #8] 171:apps/menu/main.c **** fb_setfg(FB_COLOR_WHITE); 570 .loc 1 171 19 view .LVU146 571 00c8 022084E0 add r2, r4, r2 171:apps/menu/main.c **** fb_setfg(FB_COLOR_WHITE); 572 .loc 1 171 6 view .LVU147 573 00cc 010052E1 cmp r2, r1 172:apps/menu/main.c **** fb_setbg(FB_COLOR_BLUE); 574 .loc 1 172 4 is_stmt 1 view .LVU148 575 .LVL23: 576 .LBB163: 577 .LBI163: 92:include/fb/framebuffer.h **** framebuffer->fg_color = color; 578 .loc 2 92 1 view .LVU149 579 .LBB164: 93:include/fb/framebuffer.h **** } 580 .loc 2 93 2 view .LVU150 93:include/fb/framebuffer.h **** } 581 .loc 2 93 24 is_stmt 0 view .LVU151 582 00d0 FF14E003 mvneq r1, #-16777216 93:include/fb/framebuffer.h **** } 583 .loc 2 93 13 view .LVU152 584 00d4 003095E5 ldr r3, [r5] 585 .LBE164: 586 .LBE163: 587 .LBB166: 588 .LBB167: 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 589 .loc 2 87 24 view .LVU153 590 00d8 0090A0E3 mov r9, #0 591 .LBE167: 592 .LBE166: 593 .LBB171: 594 .LBB165: 93:include/fb/framebuffer.h **** } 595 .loc 2 93 24 view .LVU154 596 00dc 2C108305 streq r1, [r3, #44] 597 .LVL24: 93:include/fb/framebuffer.h **** } 598 .loc 2 93 24 view .LVU155 599 .LBE165: 600 .LBE171: 173:apps/menu/main.c **** } 601 .loc 1 173 4 is_stmt 1 view .LVU156 602 .LBB172: 603 .LBI172: 97:include/fb/framebuffer.h **** framebuffer->bg_color = color; 604 .loc 2 97 1 view .LVU157 605 .LBB173: 98:include/fb/framebuffer.h **** } 606 .loc 2 98 2 view .LVU158 607 .LBE173: 608 .LBE172: 176:apps/menu/main.c **** framebuffer->width); 609 .loc 1 176 3 is_stmt 0 view .LVU159 610 00e0 1800A0E3 mov r0, #24 611 .LBB176: 612 .LBB174: 98:include/fb/framebuffer.h **** } 613 .loc 2 98 24 view .LVU160 614 00e4 FF10A003 moveq r1, #255 615 .LBE174: 616 .LBE176: 617 .LBB177: 618 .LBB168: 88:include/fb/framebuffer.h **** } 619 .loc 2 88 24 view .LVU161 620 00e8 BA62C3E1 strh r6, [r3, #42] @ movhi 621 .LBE168: 622 .LBE177: 623 .LBB178: 624 .LBB175: 98:include/fb/framebuffer.h **** } 625 .loc 2 98 24 view .LVU162 626 00ec 30108305 streq r1, [r3, #48] 627 .LVL25: 98:include/fb/framebuffer.h **** } 628 .loc 2 98 24 view .LVU163 629 .LBE175: 630 .LBE178: 175:apps/menu/main.c **** fb_putstr(apps[scroll_apps + i].name, 631 .loc 1 175 3 is_stmt 1 view .LVU164 632 .LBB179: 633 .LBI166: 86:include/fb/framebuffer.h **** framebuffer->cursor_x = x; 634 .loc 2 86 1 view .LVU165 635 .LBB169: 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 636 .loc 2 87 2 view .LVU166 637 .LBE169: 638 .LBE179: 176:apps/menu/main.c **** framebuffer->width); 639 .loc 1 176 3 is_stmt 0 view .LVU167 640 00f0 928020E0 mla r0, r2, r0, r8 641 .LBB180: 642 .LBB170: 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 643 .loc 2 87 24 view .LVU168 644 00f4 B892C3E1 strh r9, [r3, #40] @ movhi 88:include/fb/framebuffer.h **** } 645 .loc 2 88 2 is_stmt 1 view .LVU169 646 .LVL26: 88:include/fb/framebuffer.h **** } 647 .loc 2 88 2 is_stmt 0 view .LVU170 648 .LBE170: 649 .LBE180: 176:apps/menu/main.c **** framebuffer->width); 650 .loc 1 176 3 is_stmt 1 view .LVU171 651 00f8 B412D3E1 ldrh r1, [r3, #36] 652 00fc FEFFFFEB bl fb_putstr.isra.0 653 .LVL27: 178:apps/menu/main.c **** fb_setfg(FB_COLOR_BLACK); 654 .loc 1 178 3 view .LVU172 178:apps/menu/main.c **** fb_setfg(FB_COLOR_BLACK); 655 .loc 1 178 19 is_stmt 0 view .LVU173 656 0100 0C3397E5 ldr r3, [r7, #780] 178:apps/menu/main.c **** fb_setfg(FB_COLOR_BLACK); 657 .loc 1 178 6 view .LVU174 658 0104 082097E5 ldr r2, [r7, #8] 178:apps/menu/main.c **** fb_setfg(FB_COLOR_BLACK); 659 .loc 1 178 19 view .LVU175 660 0108 033084E0 add r3, r4, r3 178:apps/menu/main.c **** fb_setfg(FB_COLOR_BLACK); 661 .loc 1 178 6 view .LVU176 662 010c 020053E1 cmp r3, r2 179:apps/menu/main.c **** fb_setbg(FB_COLOR_WHITE); 663 .loc 1 179 4 is_stmt 1 view .LVU177 664 .LVL28: 665 .LBB181: 666 .LBI181: 92:include/fb/framebuffer.h **** framebuffer->fg_color = color; 667 .loc 2 92 1 view .LVU178 668 .LBB182: 93:include/fb/framebuffer.h **** } 669 .loc 2 93 2 view .LVU179 670 .LBE182: 671 .LBE181: 672 .LBB185: 673 .LBB186: 98:include/fb/framebuffer.h **** } 674 .loc 2 98 24 is_stmt 0 view .LVU180 675 0110 FF24E003 mvneq r2, #-16777216 676 .LBE186: 677 .LBE185: 678 .LBB188: 679 .LBB183: 93:include/fb/framebuffer.h **** } 680 .loc 2 93 13 view .LVU181 681 0114 00309505 ldreq r3, [r5] 682 .LBE183: 683 .LBE188: 168:apps/menu/main.c **** if (!apps[scroll_apps + i].name) 684 .loc 1 168 22 view .LVU182 685 0118 014084E2 add r4, r4, #1 686 .LVL29: 168:apps/menu/main.c **** if (!apps[scroll_apps + i].name) 687 .loc 1 168 16 view .LVU183 688 011c 0A6086E2 add r6, r6, #10 689 .LBB189: 690 .LBB184: 93:include/fb/framebuffer.h **** } 691 .loc 2 93 24 view .LVU184 692 0120 2C908305 streq r9, [r3, #44] 693 .LVL30: 93:include/fb/framebuffer.h **** } 694 .loc 2 93 24 view .LVU185 695 .LBE184: 696 .LBE189: 180:apps/menu/main.c **** } 697 .loc 1 180 4 is_stmt 1 view .LVU186 698 .LBB190: 699 .LBI185: 97:include/fb/framebuffer.h **** framebuffer->bg_color = color; 700 .loc 2 97 1 view .LVU187 701 .LBB187: 98:include/fb/framebuffer.h **** } 702 .loc 2 98 2 view .LVU188 98:include/fb/framebuffer.h **** } 703 .loc 2 98 24 is_stmt 0 view .LVU189 704 0124 30208305 streq r2, [r3, #48] 705 .LVL31: 98:include/fb/framebuffer.h **** } 706 .loc 2 98 24 view .LVU190 707 .LBE187: 708 .LBE190: 168:apps/menu/main.c **** if (!apps[scroll_apps + i].name) 709 .loc 1 168 22 is_stmt 1 view .LVU191 168:apps/menu/main.c **** if (!apps[scroll_apps + i].name) 710 .loc 1 168 16 view .LVU192 711 0128 0668A0E1 lsl r6, r6, #16 712 012c 050054E3 cmp r4, #5 713 0130 2668A0E1 lsr r6, r6, #16 714 0134 E1FFFF1A bne .L27 183:apps/menu/main.c **** fb_gotoxy(0, 50); 715 .loc 1 183 2 view .LVU193 188:apps/menu/main.c **** } 716 .loc 1 188 2 view .LVU194 717 .LBB191: 718 .LBI191: 81:include/fb/framebuffer.h **** framebuffer->flush(); 719 .loc 2 81 1 view .LVU195 720 .LBB192: 82:include/fb/framebuffer.h **** } 721 .loc 2 82 2 view .LVU196 82:include/fb/framebuffer.h **** } 722 .loc 2 82 13 is_stmt 0 view .LVU197 723 0138 003095E5 ldr r3, [r5] 724 .LBE192: 725 .LBE191: 189:apps/menu/main.c **** 726 .loc 1 189 1 view .LVU198 727 013c F047BDE8 pop {r4, r5, r6, r7, r8, r9, r10, lr} 728 .LCFI7: 729 .cfi_restore 14 730 .cfi_restore 10 731 .cfi_restore 9 732 .cfi_restore 8 733 .cfi_restore 7 734 .cfi_restore 6 735 .cfi_restore 5 736 .cfi_restore 4 737 .cfi_def_cfa_offset 0 738 .LVL32: 739 .LBB194: 740 .LBB193: 82:include/fb/framebuffer.h **** } 741 .loc 2 82 2 view .LVU199 742 0140 203093E5 ldr r3, [r3, #32] 743 0144 13FF2FE1 bx r3 @ indirect register sibling call 744 .LVL33: 745 .L31: 746 .align 2 747 .L30: 748 0148 00000000 .word framebuffer 749 014c 00000000 .word .LC0 750 0150 00C0C000 .word 12632064 751 0154 0D000000 .word .LC1 752 0158 00000000 .word .LANCHOR0 753 .LBE193: 754 .LBE194: 755 .cfi_endproc 756 .LFE103: 758 .section .rodata.str1.1 759 .LC2: 760 0013 0A0A4F73 .ascii "\012\012OsmocomBB Menu (revision osmocon_v0.0.0-330" 760 6D6F636F 760 6D424220 760 4D656E75 760 20287265 761 0040 362D6730 .ascii "6-g04ea6f9c)\012\000" 761 34656136 761 66396329 761 0A00 762 .LC3: 763 004e 6D656E75 .ascii "menu\000" 763 00 764 .LC4: 765 0053 6F736D6F .ascii "osmocom-bb\000" 765 636F6D2D 765 626200 766 .LC5: 767 005e 68696768 .ascii "highram:\000" 767 72616D3A 767 00 768 .LC6: 769 0067 666F756E .ascii "found highram image at flash mem address 0x%p\012\000" 769 64206869 769 67687261 769 6D20696D 769 61676520 770 .LC7: 771 0096 736B6970 .ascii "skipping: corrupt highram header, no '\\n' after im" 771 70696E67 771 3A20636F 771 72727570 771 74206869 772 00c8 61676520 .ascii "age name or name more larger than %d digits\012\000" 772 6E616D65 772 206F7220 772 6E616D65 772 206D6F72 773 .section .text.startup.main,"ax",%progbits 774 .align 2 775 .global main 776 .syntax unified 777 .arm 779 main: 780 .LFB106: 260:apps/menu/main.c **** 261:apps/menu/main.c **** extern void putchar_asm(uint32_t c); 262:apps/menu/main.c **** 263:apps/menu/main.c **** static const uint8_t phone_ack[] = { 0x1b, 0xf6, 0x02, 0x00, 0x41, 0x03, 0x42 }; 264:apps/menu/main.c **** 265:apps/menu/main.c **** int main(void) 266:apps/menu/main.c **** { 781 .loc 1 266 1 is_stmt 1 view -0 782 .cfi_startproc 783 @ Function supports interworking. 784 @ args = 0, pretend = 0, frame = 0 785 @ frame_needed = 0, uses_anonymous_args = 0 267:apps/menu/main.c **** int i; 786 .loc 1 267 2 view .LVU201 268:apps/menu/main.c **** 269:apps/menu/main.c **** /* Simulate a compal loader saying "ACK" */ 270:apps/menu/main.c **** for (i = 0; i < (int)sizeof(phone_ack); i++) { 787 .loc 1 270 2 view .LVU202 788 .LVL34: 789 .loc 1 270 16 view .LVU203 266:apps/menu/main.c **** int i; 790 .loc 1 266 1 is_stmt 0 view .LVU204 791 0000 F84F2DE9 push {r3, r4, r5, r6, r7, r8, r9, r10, fp, lr} 792 .LCFI8: 793 .cfi_def_cfa_offset 40 794 .cfi_offset 3, -40 795 .cfi_offset 4, -36 796 .cfi_offset 5, -32 797 .cfi_offset 6, -28 798 .cfi_offset 7, -24 799 .cfi_offset 8, -20 800 .cfi_offset 9, -16 801 .cfi_offset 10, -12 802 .cfi_offset 11, -8 803 .cfi_offset 14, -4 804 .loc 1 270 9 view .LVU205 805 0004 0040A0E3 mov r4, #0 806 0008 60539FE5 ldr r5, .L83 807 .LVL35: 808 .L33: 271:apps/menu/main.c **** putchar_asm(phone_ack[i]); 809 .loc 1 271 3 is_stmt 1 discriminator 3 view .LVU206 810 000c 0100D5E4 ldrb r0, [r5], #1 @ zero_extendqisi2 270:apps/menu/main.c **** putchar_asm(phone_ack[i]); 811 .loc 1 270 43 is_stmt 0 discriminator 3 view .LVU207 812 0010 014084E2 add r4, r4, #1 813 .LVL36: 814 .loc 1 271 3 discriminator 3 view .LVU208 815 0014 FEFFFFEB bl putchar_asm 816 .LVL37: 270:apps/menu/main.c **** putchar_asm(phone_ack[i]); 817 .loc 1 270 43 is_stmt 1 discriminator 3 view .LVU209 270:apps/menu/main.c **** putchar_asm(phone_ack[i]); 818 .loc 1 270 16 discriminator 3 view .LVU210 819 0018 070054E3 cmp r4, #7 820 001c FAFFFF1A bne .L33 272:apps/menu/main.c **** } 273:apps/menu/main.c **** 274:apps/menu/main.c **** board_init(0); 821 .loc 1 274 2 view .LVU211 275:apps/menu/main.c **** 276:apps/menu/main.c **** puts("\n\nOsmocomBB Menu (revision " GIT_REVISION ")\n"); 277:apps/menu/main.c **** puts(hr); 822 .loc 1 277 2 is_stmt 0 view .LVU212 823 0020 4C639FE5 ldr r6, .L83+4 274:apps/menu/main.c **** 824 .loc 1 274 2 view .LVU213 825 0024 0000A0E3 mov r0, #0 826 0028 FEFFFFEB bl board_init 827 .LVL38: 276:apps/menu/main.c **** puts(hr); 828 .loc 1 276 2 is_stmt 1 view .LVU214 829 .LBB225: 830 .LBB226: 57:include/fb/framebuffer.h **** } 831 .loc 2 57 13 is_stmt 0 view .LVU215 832 002c 44539FE5 ldr r5, .L83+8 833 .LBE226: 834 .LBE225: 276:apps/menu/main.c **** puts(hr); 835 .loc 1 276 2 view .LVU216 836 0030 44039FE5 ldr r0, .L83+12 837 0034 FEFFFFEB bl puts 838 .LVL39: 839 .loc 1 277 2 is_stmt 1 view .LVU217 840 0038 040096E5 ldr r0, [r6, #4] 841 003c FEFFFFEB bl puts 842 .LVL40: 278:apps/menu/main.c **** 279:apps/menu/main.c **** fb_clear(); 843 .loc 1 279 2 view .LVU218 844 .LBB228: 845 .LBI225: 56:include/fb/framebuffer.h **** framebuffer->clear(); 846 .loc 2 56 1 view .LVU219 847 .LBB227: 57:include/fb/framebuffer.h **** } 848 .loc 2 57 2 view .LVU220 57:include/fb/framebuffer.h **** } 849 .loc 2 57 13 is_stmt 0 view .LVU221 850 0040 003095E5 ldr r3, [r5] 57:include/fb/framebuffer.h **** } 851 .loc 2 57 2 view .LVU222 852 0044 0C3093E5 ldr r3, [r3, #12] 853 0048 0FE0A0E1 mov lr, pc 854 004c 13FF2FE1 bx r3 855 .LVL41: 856 .LBE227: 857 .LBE228: 280:apps/menu/main.c **** 281:apps/menu/main.c **** fb_setfg(FB_COLOR_BLACK); 858 .loc 1 281 2 is_stmt 1 view .LVU223 859 .LBB229: 860 .LBI229: 92:include/fb/framebuffer.h **** framebuffer->fg_color = color; 861 .loc 2 92 1 view .LVU224 862 .LBB230: 93:include/fb/framebuffer.h **** } 863 .loc 2 93 2 view .LVU225 93:include/fb/framebuffer.h **** } 864 .loc 2 93 13 is_stmt 0 view .LVU226 865 0050 003095E5 ldr r3, [r5] 866 .LVL42: 93:include/fb/framebuffer.h **** } 867 .loc 2 93 13 view .LVU227 868 .LBE230: 869 .LBE229: 282:apps/menu/main.c **** fb_setbg(FB_COLOR_WHITE); 870 .loc 1 282 2 is_stmt 1 view .LVU228 871 .LBB233: 872 .LBI233: 97:include/fb/framebuffer.h **** framebuffer->bg_color = color; 873 .loc 2 97 1 view .LVU229 874 .LBB234: 98:include/fb/framebuffer.h **** } 875 .loc 2 98 2 view .LVU230 98:include/fb/framebuffer.h **** } 876 .loc 2 98 2 is_stmt 0 view .LVU231 877 .LBE234: 878 .LBE233: 283:apps/menu/main.c **** fb_setfont(FB_FONT_HELVB14); 879 .loc 1 283 2 is_stmt 1 view .LVU232 880 .LBB237: 881 .LBI237: 102:include/fb/framebuffer.h **** framebuffer->font = fid; 882 .loc 2 102 1 view .LVU233 883 .LBB238: 884 .loc 2 103 2 view .LVU234 885 .loc 2 103 2 is_stmt 0 view .LVU235 886 .LBE238: 887 .LBE237: 284:apps/menu/main.c **** 285:apps/menu/main.c **** fb_gotoxy(2,20); 888 .loc 1 285 2 is_stmt 1 view .LVU236 889 .LBB241: 890 .LBI241: 86:include/fb/framebuffer.h **** framebuffer->cursor_x = x; 891 .loc 2 86 1 view .LVU237 892 .LBB242: 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 893 .loc 2 87 2 view .LVU238 88:include/fb/framebuffer.h **** } 894 .loc 2 88 2 view .LVU239 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 895 .loc 2 87 24 is_stmt 0 view .LVU240 896 0054 24239FE5 ldr r2, .L83+16 897 .LBE242: 898 .LBE241: 899 .LBB244: 900 .LBB231: 93:include/fb/framebuffer.h **** } 901 .loc 2 93 24 view .LVU241 902 0058 0040A0E3 mov r4, #0 903 .LVL43: 93:include/fb/framebuffer.h **** } 904 .loc 2 93 24 view .LVU242 905 .LBE231: 906 .LBE244: 907 .LBB245: 908 .LBB235: 98:include/fb/framebuffer.h **** } 909 .loc 2 98 24 view .LVU243 910 005c FF74E0E3 mvn r7, #-16777216 911 .LBE235: 912 .LBE245: 913 .LBB246: 914 .LBB243: 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 915 .loc 2 87 24 view .LVU244 916 0060 282083E5 str r2, [r3, #40] 917 .LBE243: 918 .LBE246: 919 .LBB247: 920 .LBB239: 921 .loc 2 103 20 view .LVU245 922 0064 0120A0E3 mov r2, #1 923 .LBE239: 924 .LBE247: 286:apps/menu/main.c **** fb_putstr("menu",framebuffer->width-4); 925 .loc 1 286 30 view .LVU246 926 0068 B412D3E1 ldrh r1, [r3, #36] 927 .LBB248: 928 .LBB236: 98:include/fb/framebuffer.h **** } 929 .loc 2 98 24 view .LVU247 930 006c 307083E5 str r7, [r3, #48] 931 .LBE236: 932 .LBE248: 933 .LBB249: 934 .LBB240: 935 .loc 2 103 20 view .LVU248 936 0070 3420C3E5 strb r2, [r3, #52] 937 .LVL44: 938 .loc 2 103 20 view .LVU249 939 .LBE240: 940 .LBE249: 941 .loc 1 286 2 is_stmt 1 view .LVU250 942 .LBB250: 943 .LBB232: 93:include/fb/framebuffer.h **** } 944 .loc 2 93 24 is_stmt 0 view .LVU251 945 0074 2C4083E5 str r4, [r3, #44] 946 .LBE232: 947 .LBE250: 948 .loc 1 286 2 view .LVU252 949 0078 04039FE5 ldr r0, .L83+20 950 007c 041041E2 sub r1, r1, #4 951 0080 FEFFFFEB bl fb_putstr.isra.0 952 .LVL45: 287:apps/menu/main.c **** 288:apps/menu/main.c **** fb_setfg(FB_COLOR_RED); 953 .loc 1 288 2 is_stmt 1 view .LVU253 954 .LBB251: 955 .LBI251: 92:include/fb/framebuffer.h **** framebuffer->fg_color = color; 956 .loc 2 92 1 view .LVU254 957 .LBB252: 93:include/fb/framebuffer.h **** } 958 .loc 2 93 2 view .LVU255 93:include/fb/framebuffer.h **** } 959 .loc 2 93 13 is_stmt 0 view .LVU256 960 0084 003095E5 ldr r3, [r5] 961 .LVL46: 93:include/fb/framebuffer.h **** } 962 .loc 2 93 13 view .LVU257 963 .LBE252: 964 .LBE251: 289:apps/menu/main.c **** fb_setbg(FB_COLOR_BLUE); 965 .loc 1 289 2 is_stmt 1 view .LVU258 966 .LBB254: 967 .LBI254: 97:include/fb/framebuffer.h **** framebuffer->bg_color = color; 968 .loc 2 97 1 view .LVU259 969 .LBB255: 98:include/fb/framebuffer.h **** } 970 .loc 2 98 2 view .LVU260 98:include/fb/framebuffer.h **** } 971 .loc 2 98 2 is_stmt 0 view .LVU261 972 .LBE255: 973 .LBE254: 290:apps/menu/main.c **** 291:apps/menu/main.c **** fb_gotoxy(2,25); 974 .loc 1 291 2 is_stmt 1 view .LVU262 975 .LBB258: 976 .LBI258: 86:include/fb/framebuffer.h **** framebuffer->cursor_x = x; 977 .loc 2 86 1 view .LVU263 978 .LBB259: 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 979 .loc 2 87 2 view .LVU264 88:include/fb/framebuffer.h **** } 980 .loc 2 88 2 view .LVU265 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 981 .loc 2 87 24 is_stmt 0 view .LVU266 982 0088 F8229FE5 ldr r2, .L83+24 983 008c 282083E5 str r2, [r3, #40] 984 .LBE259: 985 .LBE258: 986 .LBB260: 987 .LBB253: 93:include/fb/framebuffer.h **** } 988 .loc 2 93 24 view .LVU267 989 0090 FF28A0E3 mov r2, #16711680 990 0094 2C2083E5 str r2, [r3, #44] 991 .LBE253: 992 .LBE260: 993 .LBB261: 994 .LBB256: 98:include/fb/framebuffer.h **** } 995 .loc 2 98 24 view .LVU268 996 0098 FF20A0E3 mov r2, #255 997 .LBE256: 998 .LBE261: 292:apps/menu/main.c **** fb_boxto(framebuffer->width-3,38); 999 .loc 1 292 2 view .LVU269 1000 009c B402D3E1 ldrh r0, [r3, #36] 1001 00a0 030040E2 sub r0, r0, #3 1002 .LBB262: 1003 .LBB263: 62:include/fb/framebuffer.h **** } 1004 .loc 2 62 2 view .LVU270 1005 00a4 0008A0E1 lsl r0, r0, #16 1006 .LBE263: 1007 .LBE262: 1008 .LBB265: 1009 .LBB257: 98:include/fb/framebuffer.h **** } 1010 .loc 2 98 24 view .LVU271 1011 00a8 302083E5 str r2, [r3, #48] 1012 .LVL47: 98:include/fb/framebuffer.h **** } 1013 .loc 2 98 24 view .LVU272 1014 .LBE257: 1015 .LBE265: 1016 .loc 1 292 2 is_stmt 1 view .LVU273 1017 .LBB266: 1018 .LBI262: 61:include/fb/framebuffer.h **** framebuffer->boxto(x,y); 1019 .loc 2 61 1 view .LVU274 1020 .LBB264: 62:include/fb/framebuffer.h **** } 1021 .loc 2 62 2 view .LVU275 1022 00ac 2610A0E3 mov r1, #38 1023 00b0 143093E5 ldr r3, [r3, #20] 1024 .LVL48: 62:include/fb/framebuffer.h **** } 1025 .loc 2 62 2 is_stmt 0 view .LVU276 1026 00b4 2008A0E1 lsr r0, r0, #16 1027 00b8 0FE0A0E1 mov lr, pc 1028 00bc 13FF2FE1 bx r3 1029 .LVL49: 62:include/fb/framebuffer.h **** } 1030 .loc 2 62 2 view .LVU277 1031 .LBE264: 1032 .LBE266: 293:apps/menu/main.c **** 294:apps/menu/main.c **** fb_setfg(FB_COLOR_WHITE); 1033 .loc 1 294 2 is_stmt 1 view .LVU278 1034 .LBB267: 1035 .LBI267: 92:include/fb/framebuffer.h **** framebuffer->fg_color = color; 1036 .loc 2 92 1 view .LVU279 1037 .LBB268: 93:include/fb/framebuffer.h **** } 1038 .loc 2 93 2 view .LVU280 93:include/fb/framebuffer.h **** } 1039 .loc 2 93 13 is_stmt 0 view .LVU281 1040 00c0 003095E5 ldr r3, [r5] 1041 .LVL50: 93:include/fb/framebuffer.h **** } 1042 .loc 2 93 13 view .LVU282 1043 .LBE268: 1044 .LBE267: 295:apps/menu/main.c **** fb_setfont(FB_FONT_HELVR08); 1045 .loc 1 295 2 is_stmt 1 view .LVU283 1046 .LBB270: 1047 .LBI270: 102:include/fb/framebuffer.h **** framebuffer->font = fid; 1048 .loc 2 102 1 view .LVU284 1049 .LBB271: 1050 .loc 2 103 2 view .LVU285 1051 .LBE271: 1052 .LBE270: 1053 .LBB273: 1054 .LBB274: 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 1055 .loc 2 87 24 is_stmt 0 view .LVU286 1056 00c4 C0229FE5 ldr r2, .L83+28 1057 .LBE274: 1058 .LBE273: 296:apps/menu/main.c **** fb_gotoxy(8,33); 297:apps/menu/main.c **** fb_putstr("osmocom-bb",framebuffer->width-4); 1059 .loc 1 297 36 view .LVU287 1060 00c8 B412D3E1 ldrh r1, [r3, #36] 1061 .LBB277: 1062 .LBB275: 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 1063 .loc 2 87 24 view .LVU288 1064 00cc 282083E5 str r2, [r3, #40] 1065 .LBE275: 1066 .LBE277: 1067 .loc 1 297 2 view .LVU289 1068 00d0 041041E2 sub r1, r1, #4 1069 00d4 B4029FE5 ldr r0, .L83+32 1070 .LBB278: 1071 .LBB269: 93:include/fb/framebuffer.h **** } 1072 .loc 2 93 24 view .LVU290 1073 00d8 2C7083E5 str r7, [r3, #44] 1074 .LBE269: 1075 .LBE278: 1076 .LBB279: 1077 .LBB272: 1078 .loc 2 103 20 view .LVU291 1079 00dc 3440C3E5 strb r4, [r3, #52] 1080 .LVL51: 1081 .loc 2 103 20 view .LVU292 1082 .LBE272: 1083 .LBE279: 296:apps/menu/main.c **** fb_gotoxy(8,33); 1084 .loc 1 296 2 is_stmt 1 view .LVU293 1085 .LBB280: 1086 .LBI273: 86:include/fb/framebuffer.h **** framebuffer->cursor_x = x; 1087 .loc 2 86 1 view .LVU294 1088 .LBB276: 87:include/fb/framebuffer.h **** framebuffer->cursor_y = y; 1089 .loc 2 87 2 view .LVU295 88:include/fb/framebuffer.h **** } 1090 .loc 2 88 2 view .LVU296 88:include/fb/framebuffer.h **** } 1091 .loc 2 88 2 is_stmt 0 view .LVU297 1092 .LBE276: 1093 .LBE280: 1094 .loc 1 297 2 is_stmt 1 view .LVU298 1095 00e0 FEFFFFEB bl fb_putstr.isra.0 1096 .LVL52: 298:apps/menu/main.c **** 299:apps/menu/main.c **** fb_flush(); 1097 .loc 1 299 2 view .LVU299 1098 .LBB281: 1099 .LBI281: 81:include/fb/framebuffer.h **** framebuffer->flush(); 1100 .loc 2 81 1 view .LVU300 1101 .LBB282: 82:include/fb/framebuffer.h **** } 1102 .loc 2 82 2 view .LVU301 82:include/fb/framebuffer.h **** } 1103 .loc 2 82 13 is_stmt 0 view .LVU302 1104 00e4 003095E5 ldr r3, [r5] 82:include/fb/framebuffer.h **** } 1105 .loc 2 82 2 view .LVU303 1106 00e8 203093E5 ldr r3, [r3, #32] 1107 00ec 0FE0A0E1 mov lr, pc 1108 00f0 13FF2FE1 bx r3 1109 .LVL53: 1110 .LBE282: 1111 .LBE281: 300:apps/menu/main.c **** 301:apps/menu/main.c **** /* Dump device identification */ 302:apps/menu/main.c **** dump_dev_id(); 1112 .loc 1 302 2 is_stmt 1 view .LVU304 1113 00f4 FEFFFFEB bl dump_dev_id 1114 .LVL54: 303:apps/menu/main.c **** puts(hr); 1115 .loc 1 303 2 view .LVU305 1116 00f8 040096E5 ldr r0, [r6, #4] 1117 00fc FEFFFFEB bl puts 1118 .LVL55: 304:apps/menu/main.c **** 305:apps/menu/main.c **** /* Dump clock config before PLL set */ 306:apps/menu/main.c **** calypso_clk_dump(); 1119 .loc 1 306 2 view .LVU306 1120 0100 FEFFFFEB bl calypso_clk_dump 1121 .LVL56: 307:apps/menu/main.c **** puts(hr); 1122 .loc 1 307 2 view .LVU307 1123 0104 040096E5 ldr r0, [r6, #4] 1124 0108 FEFFFFEB bl puts 1125 .LVL57: 308:apps/menu/main.c **** 309:apps/menu/main.c **** keypad_set_handler(&key_handler); 1126 .loc 1 309 2 view .LVU308 1127 010c 80029FE5 ldr r0, .L83+36 1128 0110 FEFFFFEB bl keypad_set_handler 1129 .LVL58: 310:apps/menu/main.c **** 311:apps/menu/main.c **** /* Dump clock config after PLL set */ 312:apps/menu/main.c **** calypso_clk_dump(); 1130 .loc 1 312 2 view .LVU309 1131 0114 FEFFFFEB bl calypso_clk_dump 1132 .LVL59: 313:apps/menu/main.c **** puts(hr); 1133 .loc 1 313 2 view .LVU310 1134 0118 040096E5 ldr r0, [r6, #4] 1135 011c FEFFFFEB bl puts 1136 .LVL60: 314:apps/menu/main.c **** 315:apps/menu/main.c **** // display_unset_attr(DISP_ATTR_INVERT); 316:apps/menu/main.c **** 317:apps/menu/main.c **** locate_apps(); 1137 .loc 1 317 2 view .LVU311 1138 .LBB283: 1139 .LBI283: 61:apps/menu/main.c **** { 1140 .loc 1 61 13 view .LVU312 1141 .LBB284: 63:apps/menu/main.c **** char *p; 1142 .loc 1 63 2 view .LVU313 64:apps/menu/main.c **** 1143 .loc 1 64 2 view .LVU314 66:apps/menu/main.c **** 1144 .loc 1 66 2 view .LVU315 1145 0120 032CA0E3 mov r2, #768 1146 0124 0410A0E1 mov r1, r4 1147 0128 68029FE5 ldr r0, .L83+40 1148 012c FEFFFFEB bl memset 1149 .LVL61: 68:apps/menu/main.c **** p = (char *)i; 1150 .loc 1 68 2 view .LVU316 68:apps/menu/main.c **** p = (char *)i; 1151 .loc 1 68 30 view .LVU317 68:apps/menu/main.c **** p = (char *)i; 1152 .loc 1 68 16 is_stmt 0 view .LVU318 1153 0130 0178A0E3 mov r7, #65536 75:apps/menu/main.c **** (char *)i); 1154 .loc 1 75 3 view .LVU319 1155 0134 60B29FE5 ldr fp, .L83+44 1156 0138 60929FE5 ldr r9, .L83+48 1157 .LVL62: 1158 .L42: 69:apps/menu/main.c **** /* check for highram header: "highram:" */ 1159 .loc 1 69 3 is_stmt 1 view .LVU320 71:apps/menu/main.c **** continue; 1160 .loc 1 71 3 view .LVU321 71:apps/menu/main.c **** continue; 1161 .loc 1 71 9 is_stmt 0 view .LVU322 1162 013c 0820A0E3 mov r2, #8 1163 0140 0700A0E1 mov r0, r7 1164 0144 58129FE5 ldr r1, .L83+52 1165 0148 FEFFFFEB bl memcmp 1166 .LVL63: 71:apps/menu/main.c **** continue; 1167 .loc 1 71 6 view .LVU323 1168 014c 005050E2 subs r5, r0, #0 1169 0150 2B00001A bne .L38 73:apps/menu/main.c **** /* check for app name after header: "highram:\n" */ 1170 .loc 1 73 3 is_stmt 1 view .LVU324 75:apps/menu/main.c **** (char *)i); 1171 .loc 1 75 3 is_stmt 0 view .LVU325 1172 0154 0710A0E1 mov r1, r7 1173 0158 0B00A0E1 mov r0, fp 1174 015c 088087E2 add r8, r7, #8 1175 .LVL64: 75:apps/menu/main.c **** (char *)i); 1176 .loc 1 75 3 is_stmt 1 view .LVU326 1177 0160 FEFFFFEB bl printf 1178 .LVL65: 77:apps/menu/main.c **** if (p[k] == '\n') 1179 .loc 1 77 3 view .LVU327 77:apps/menu/main.c **** if (p[k] == '\n') 1180 .loc 1 77 17 view .LVU328 1181 .L36: 78:apps/menu/main.c **** break; 1182 .loc 1 78 4 view .LVU329 78:apps/menu/main.c **** break; 1183 .loc 1 78 7 is_stmt 0 view .LVU330 1184 0164 0830D5E7 ldrb r3, [r5, r8] @ zero_extendqisi2 1185 0168 0A0053E3 cmp r3, #10 1186 016c 1F00000A beq .L35 77:apps/menu/main.c **** if (p[k] == '\n') 1187 .loc 1 77 51 is_stmt 1 view .LVU331 1188 0170 015085E2 add r5, r5, #1 1189 .LVL66: 77:apps/menu/main.c **** if (p[k] == '\n') 1190 .loc 1 77 17 view .LVU332 1191 0174 0F0055E3 cmp r5, #15 1192 0178 F9FFFF1A bne .L36 1193 .L37: 87:apps/menu/main.c **** apps[j].name[0] = '1' + j; 1194 .loc 1 87 3 view .LVU333 1195 017c 1830A0E3 mov r3, #24 87:apps/menu/main.c **** apps[j].name[0] = '1' + j; 1196 .loc 1 87 6 is_stmt 0 view .LVU334 1197 0180 080054E3 cmp r4, #8 88:apps/menu/main.c **** else if (j == 9) 1198 .loc 1 88 20 view .LVU335 1199 0184 949323D0 mlale r3, r4, r3, r9 88:apps/menu/main.c **** else if (j == 9) 1200 .loc 1 88 26 view .LVU336 1201 0188 312084D2 addle r2, r4, #49 87:apps/menu/main.c **** apps[j].name[0] = '1' + j; 1202 .loc 1 87 6 view .LVU337 1203 018c 050000DA ble .L80 89:apps/menu/main.c **** apps[j].name[0] = '0'; 1204 .loc 1 89 8 is_stmt 1 view .LVU338 89:apps/menu/main.c **** apps[j].name[0] = '0'; 1205 .loc 1 89 11 is_stmt 0 view .LVU339 1206 0190 090054E3 cmp r4, #9 90:apps/menu/main.c **** else 1207 .loc 1 90 20 view .LVU340 1208 0194 3030A003 moveq r3, #48 1209 0198 E430C905 strbeq r3, [r9, #228] 89:apps/menu/main.c **** apps[j].name[0] = '0'; 1210 .loc 1 89 11 view .LVU341 1211 019c 0200000A beq .L40 92:apps/menu/main.c **** apps[j].name[1] = ' '; 1212 .loc 1 92 4 is_stmt 1 view .LVU342 92:apps/menu/main.c **** apps[j].name[1] = ' '; 1213 .loc 1 92 20 is_stmt 0 view .LVU343 1214 01a0 2020A0E3 mov r2, #32 1215 01a4 949323E0 mla r3, r4, r3, r9 1216 .L80: 1217 01a8 0C20C3E5 strb r2, [r3, #12] 1218 .L40: 93:apps/menu/main.c **** memcpy(apps[j].name + 2, p, k); 1219 .loc 1 93 3 is_stmt 1 view .LVU344 93:apps/menu/main.c **** memcpy(apps[j].name + 2, p, k); 1220 .loc 1 93 19 is_stmt 0 view .LVU345 1221 01ac 1800A0E3 mov r0, #24 1222 01b0 2020A0E3 mov r2, #32 1223 01b4 940000E0 mul r0, r4, r0 94:apps/menu/main.c **** apps[j].len = 0x20000; 1224 .loc 1 94 3 view .LVU346 1225 01b8 E8C19FE5 ldr ip, .L83+56 93:apps/menu/main.c **** memcpy(apps[j].name + 2, p, k); 1226 .loc 1 93 19 view .LVU347 1227 01bc 00A089E0 add r10, r9, r0 94:apps/menu/main.c **** apps[j].len = 0x20000; 1228 .loc 1 94 3 view .LVU348 1229 01c0 0810A0E1 mov r1, r8 93:apps/menu/main.c **** memcpy(apps[j].name + 2, p, k); 1230 .loc 1 93 19 view .LVU349 1231 01c4 0D20CAE5 strb r2, [r10, #13] 94:apps/menu/main.c **** apps[j].len = 0x20000; 1232 .loc 1 94 3 is_stmt 1 view .LVU350 1233 01c8 0C0080E0 add r0, r0, ip 1234 01cc 0520A0E1 mov r2, r5 1235 01d0 FEFFFFEB bl memcpy 1236 .LVL67: 95:apps/menu/main.c **** p += k + 1; 1237 .loc 1 95 3 view .LVU351 95:apps/menu/main.c **** p += k + 1; 1238 .loc 1 95 15 is_stmt 0 view .LVU352 1239 01d4 0228A0E3 mov r2, #131072 96:apps/menu/main.c **** /* p points to highram image after header */ 1240 .loc 1 96 5 view .LVU353 1241 01d8 015085E2 add r5, r5, #1 1242 .LVL68: 96:apps/menu/main.c **** /* p points to highram image after header */ 1243 .loc 1 96 5 view .LVU354 1244 01dc 058088E0 add r8, r8, r5 1245 .LVL69: 95:apps/menu/main.c **** p += k + 1; 1246 .loc 1 95 15 view .LVU355 1247 01e0 20208AE5 str r2, [r10, #32] 96:apps/menu/main.c **** /* p points to highram image after header */ 1248 .loc 1 96 3 is_stmt 1 view .LVU356 1249 .LVL70: 98:apps/menu/main.c **** j++; 1250 .loc 1 98 3 view .LVU357 98:apps/menu/main.c **** j++; 1251 .loc 1 98 17 is_stmt 0 view .LVU358 1252 01e4 1C808AE5 str r8, [r10, #28] 99:apps/menu/main.c **** } 1253 .loc 1 99 3 is_stmt 1 view .LVU359 99:apps/menu/main.c **** } 1254 .loc 1 99 4 is_stmt 0 view .LVU360 1255 01e8 014084E2 add r4, r4, #1 1256 .LVL71: 99:apps/menu/main.c **** } 1257 .loc 1 99 4 view .LVU361 1258 01ec 040000EA b .L38 1259 .LVL72: 1260 .L35: 81:apps/menu/main.c **** printf("skipping: corrupt highram header, no '\\n' " 1261 .loc 1 81 3 is_stmt 1 view .LVU362 81:apps/menu/main.c **** printf("skipping: corrupt highram header, no '\\n' " 1262 .loc 1 81 6 is_stmt 0 view .LVU363 1263 01f0 0D0055E3 cmp r5, #13 1264 01f4 E0FFFF1A bne .L37 82:apps/menu/main.c **** "after image name or name more larger than %d " 1265 .loc 1 82 4 is_stmt 1 view .LVU364 1266 01f8 0510A0E1 mov r1, r5 1267 01fc A8019FE5 ldr r0, .L83+60 1268 0200 FEFFFFEB bl printf 1269 .LVL73: 85:apps/menu/main.c **** } 1270 .loc 1 85 5 view .LVU365 1271 .L38: 68:apps/menu/main.c **** p = (char *)i; 1272 .loc 1 68 44 view .LVU366 1273 0204 017887E2 add r7, r7, #65536 1274 .LVL74: 68:apps/menu/main.c **** p = (char *)i; 1275 .loc 1 68 30 view .LVU367 1276 0208 020657E3 cmp r7, #2097152 1277 020c CAFFFF1A bne .L42 68:apps/menu/main.c **** p = (char *)i; 1278 .loc 1 68 30 is_stmt 0 view .LVU368 1279 .LBE284: 1280 .LBE283: 1281 .LBB286: 1282 .LBB287: 234:apps/menu/main.c **** load_app(); 1283 .loc 1 234 19 view .LVU369 1284 0210 88419FE5 ldr r4, .L83+48 1285 .LVL75: 1286 .L56: 234:apps/menu/main.c **** load_app(); 1287 .loc 1 234 19 view .LVU370 1288 .LBE287: 1289 .LBE286: 318:apps/menu/main.c **** 319:apps/menu/main.c **** while (1) { 1290 .loc 1 319 2 is_stmt 1 view .LVU371 320:apps/menu/main.c **** for (i = 0; i < 50; i++) { 1291 .loc 1 320 3 view .LVU372 1292 .loc 1 320 17 view .LVU373 1293 .LBB291: 1294 .LBB285: 68:apps/menu/main.c **** p = (char *)i; 1295 .loc 1 68 16 is_stmt 0 view .LVU374 1296 0214 3250A0E3 mov r5, #50 1297 .LBE285: 1298 .LBE291: 1299 .LBB292: 1300 .LBB288: 245:apps/menu/main.c **** } 1301 .loc 1 245 11 view .LVU375 1302 0218 0070E0E3 mvn r7, #0 1303 .LVL76: 1304 .L55: 245:apps/menu/main.c **** } 1305 .loc 1 245 11 view .LVU376 1306 .LBE288: 1307 .LBE292: 321:apps/menu/main.c **** keypad_poll(); 1308 .loc 1 321 4 is_stmt 1 discriminator 3 view .LVU377 1309 021c FEFFFFEB bl keypad_poll 1310 .LVL77: 322:apps/menu/main.c **** delay_ms(10); 1311 .loc 1 322 4 discriminator 3 view .LVU378 1312 0220 0A00A0E3 mov r0, #10 1313 0224 FEFFFFEB bl delay_ms 1314 .LVL78: 323:apps/menu/main.c **** osmo_timers_update(); 1315 .loc 1 323 4 discriminator 3 view .LVU379 1316 0228 FEFFFFEB bl osmo_timers_update 1317 .LVL79: 324:apps/menu/main.c **** handle_key_code(); 1318 .loc 1 324 4 discriminator 3 view .LVU380 1319 .LBB293: 1320 .LBI286: 191:apps/menu/main.c **** { 1321 .loc 1 191 13 discriminator 3 view .LVU381 1322 .LBB289: 193:apps/menu/main.c **** return; 1323 .loc 1 193 2 discriminator 3 view .LVU382 193:apps/menu/main.c **** return; 1324 .loc 1 193 15 is_stmt 0 discriminator 3 view .LVU383 1325 022c 0030D6E5 ldrb r3, [r6] @ zero_extendqisi2 193:apps/menu/main.c **** return; 1326 .loc 1 193 5 discriminator 3 view .LVU384 1327 0230 FF0053E3 cmp r3, #255 1328 0234 2000000A beq .L43 196:apps/menu/main.c **** case KEY_1: 1329 .loc 1 196 2 is_stmt 1 view .LVU385 1330 0238 140053E3 cmp r3, #20 1331 023c 03F19F97 ldrls pc, [pc, r3, asl #2] 1332 0240 1C0000EA b .L44 1333 .L46: 1334 0244 CC020000 .word .L51 1335 0248 98020000 .word .L50 1336 024c 98020000 .word .L50 1337 0250 98020000 .word .L50 1338 0254 98020000 .word .L50 1339 0258 98020000 .word .L50 1340 025c 98020000 .word .L50 1341 0260 98020000 .word .L50 1342 0264 98020000 .word .L50 1343 0268 98020000 .word .L50 1344 026c B8020000 .word .L44 1345 0270 B8020000 .word .L44 1346 0274 B8020000 .word .L44 1347 0278 B8020000 .word .L44 1348 027c B8020000 .word .L44 1349 0280 E0020000 .word .L49 1350 0284 08030000 .word .L48 1351 0288 B8020000 .word .L44 1352 028c B8020000 .word .L44 1353 0290 48030000 .word .L47 1354 0294 64030000 .word .L45 1355 .L50: 206:apps/menu/main.c **** cursor = key_code - KEY_1; 1356 .loc 1 206 3 view .LVU386 206:apps/menu/main.c **** cursor = key_code - KEY_1; 1357 .loc 1 206 29 is_stmt 0 view .LVU387 1358 0298 1820A0E3 mov r2, #24 206:apps/menu/main.c **** cursor = key_code - KEY_1; 1359 .loc 1 206 21 view .LVU388 1360 029c 013043E2 sub r3, r3, #1 206:apps/menu/main.c **** cursor = key_code - KEY_1; 1361 .loc 1 206 29 view .LVU389 1362 02a0 934222E0 mla r2, r3, r2, r4 206:apps/menu/main.c **** cursor = key_code - KEY_1; 1363 .loc 1 206 6 view .LVU390 1364 02a4 202092E5 ldr r2, [r2, #32] 1365 02a8 000052E3 cmp r2, #0 1366 02ac 0100000A beq .L44 1367 .L81: 213:apps/menu/main.c **** load_app(); 1368 .loc 1 213 11 view .LVU391 1369 02b0 083084E5 str r3, [r4, #8] 1370 .L82: 214:apps/menu/main.c **** } 1371 .loc 1 214 4 is_stmt 1 view .LVU392 1372 02b4 FEFFFFEB bl load_app 1373 .LVL80: 1374 .L44: 245:apps/menu/main.c **** } 1375 .loc 1 245 2 view .LVU393 245:apps/menu/main.c **** } 1376 .loc 1 245 11 is_stmt 0 view .LVU394 1377 02b8 0070C6E5 strb r7, [r6] 1378 .L43: 1379 .LBE289: 1380 .LBE293: 320:apps/menu/main.c **** keypad_poll(); 1381 .loc 1 320 24 is_stmt 1 view .LVU395 1382 .LVL81: 320:apps/menu/main.c **** keypad_poll(); 1383 .loc 1 320 17 view .LVU396 1384 02bc 015055E2 subs r5, r5, #1 1385 .LVL82: 320:apps/menu/main.c **** keypad_poll(); 1386 .loc 1 320 17 is_stmt 0 view .LVU397 1387 02c0 D5FFFF1A bne .L55 325:apps/menu/main.c **** } 326:apps/menu/main.c **** refresh_display(); 1388 .loc 1 326 3 is_stmt 1 view .LVU398 1389 02c4 FEFFFFEB bl refresh_display 1390 .LVL83: 319:apps/menu/main.c **** for (i = 0; i < 50; i++) { 1391 .loc 1 319 8 view .LVU399 320:apps/menu/main.c **** keypad_poll(); 1392 .loc 1 320 10 is_stmt 0 view .LVU400 1393 02c8 D1FFFFEA b .L56 1394 .L51: 1395 .LBB294: 1396 .LBB290: 212:apps/menu/main.c **** cursor = 9; 1397 .loc 1 212 3 is_stmt 1 view .LVU401 212:apps/menu/main.c **** cursor = 9; 1398 .loc 1 212 6 is_stmt 0 view .LVU402 1399 02cc F83094E5 ldr r3, [r4, #248] 1400 02d0 000053E3 cmp r3, #0 1401 02d4 F7FFFF0A beq .L44 213:apps/menu/main.c **** load_app(); 1402 .loc 1 213 4 is_stmt 1 view .LVU403 213:apps/menu/main.c **** load_app(); 1403 .loc 1 213 11 is_stmt 0 view .LVU404 1404 02d8 0930A0E3 mov r3, #9 1405 02dc F3FFFFEA b .L81 1406 .L49: 218:apps/menu/main.c **** return; 1407 .loc 1 218 3 is_stmt 1 view .LVU405 218:apps/menu/main.c **** return; 1408 .loc 1 218 14 is_stmt 0 view .LVU406 1409 02e0 083094E5 ldr r3, [r4, #8] 218:apps/menu/main.c **** return; 1410 .loc 1 218 6 view .LVU407 1411 02e4 000053E3 cmp r3, #0 1412 02e8 F3FFFF0A beq .L43 220:apps/menu/main.c **** if (cursor < scroll_apps) 1413 .loc 1 220 3 is_stmt 1 view .LVU408 221:apps/menu/main.c **** scroll_apps = cursor; 1414 .loc 1 221 6 is_stmt 0 view .LVU409 1415 02ec 0C2394E5 ldr r2, [r4, #780] 220:apps/menu/main.c **** if (cursor < scroll_apps) 1416 .loc 1 220 9 view .LVU410 1417 02f0 013043E2 sub r3, r3, #1 221:apps/menu/main.c **** scroll_apps = cursor; 1418 .loc 1 221 6 view .LVU411 1419 02f4 020053E1 cmp r3, r2 220:apps/menu/main.c **** if (cursor < scroll_apps) 1420 .loc 1 220 9 view .LVU412 1421 02f8 083084E5 str r3, [r4, #8] 221:apps/menu/main.c **** scroll_apps = cursor; 1422 .loc 1 221 3 is_stmt 1 view .LVU413 222:apps/menu/main.c **** refresh_display(); 1423 .loc 1 222 4 view .LVU414 222:apps/menu/main.c **** refresh_display(); 1424 .loc 1 222 16 is_stmt 0 view .LVU415 1425 02fc 0C3384B5 strlt r3, [r4, #780] 1426 .L53: 223:apps/menu/main.c **** break; 1427 .loc 1 223 3 is_stmt 1 view .LVU416 1428 0300 FEFFFFEB bl refresh_display 1429 .LVL84: 224:apps/menu/main.c **** case KEY_DOWN: 1430 .loc 1 224 3 view .LVU417 1431 0304 EBFFFFEA b .L44 1432 .L48: 226:apps/menu/main.c **** return; 1433 .loc 1 226 3 view .LVU418 226:apps/menu/main.c **** return; 1434 .loc 1 226 29 is_stmt 0 view .LVU419 1435 0308 1830A0E3 mov r3, #24 1436 030c 0300A0E1 mov r0, r3 226:apps/menu/main.c **** return; 1437 .loc 1 226 20 view .LVU420 1438 0310 082094E5 ldr r2, [r4, #8] 226:apps/menu/main.c **** return; 1439 .loc 1 226 29 view .LVU421 1440 0314 920320E0 mla r0, r2, r3, r0 1441 0318 003084E0 add r3, r4, r0 226:apps/menu/main.c **** return; 1442 .loc 1 226 6 view .LVU422 1443 031c 0C30D3E5 ldrb r3, [r3, #12] @ zero_extendqisi2 1444 0320 000053E3 cmp r3, #0 226:apps/menu/main.c **** return; 1445 .loc 1 226 20 view .LVU423 1446 0324 011082E2 add r1, r2, #1 226:apps/menu/main.c **** return; 1447 .loc 1 226 6 view .LVU424 1448 0328 E3FFFF0A beq .L43 228:apps/menu/main.c **** if (cursor >= scroll_apps + 5) 1449 .loc 1 228 3 is_stmt 1 view .LVU425 229:apps/menu/main.c **** scroll_apps = cursor - 4; 1450 .loc 1 229 14 is_stmt 0 view .LVU426 1451 032c 0C3394E5 ldr r3, [r4, #780] 1452 0330 043083E2 add r3, r3, #4 229:apps/menu/main.c **** scroll_apps = cursor - 4; 1453 .loc 1 229 6 view .LVU427 1454 0334 030051E1 cmp r1, r3 230:apps/menu/main.c **** refresh_display(); 1455 .loc 1 230 25 view .LVU428 1456 0338 032042C2 subgt r2, r2, #3 228:apps/menu/main.c **** if (cursor >= scroll_apps + 5) 1457 .loc 1 228 9 view .LVU429 1458 033c 081084E5 str r1, [r4, #8] 229:apps/menu/main.c **** scroll_apps = cursor - 4; 1459 .loc 1 229 3 is_stmt 1 view .LVU430 230:apps/menu/main.c **** refresh_display(); 1460 .loc 1 230 16 is_stmt 0 view .LVU431 1461 0340 0C2384C5 strgt r2, [r4, #780] 1462 0344 EDFFFFEA b .L53 1463 .L47: 234:apps/menu/main.c **** load_app(); 1464 .loc 1 234 3 is_stmt 1 view .LVU432 234:apps/menu/main.c **** load_app(); 1465 .loc 1 234 19 is_stmt 0 view .LVU433 1466 0348 1820A0E3 mov r2, #24 1467 034c 083094E5 ldr r3, [r4, #8] 1468 0350 924323E0 mla r3, r2, r3, r4 234:apps/menu/main.c **** load_app(); 1469 .loc 1 234 6 view .LVU434 1470 0354 203093E5 ldr r3, [r3, #32] 1471 0358 000053E3 cmp r3, #0 1472 035c D5FFFF0A beq .L44 1473 0360 D3FFFFEA b .L82 1474 .L45: 238:apps/menu/main.c **** twl3025_power_off(); 1475 .loc 1 238 3 is_stmt 1 view .LVU435 1476 0364 FEFFFFEB bl wait_key_release 1477 .LVL85: 239:apps/menu/main.c **** break; 1478 .loc 1 239 3 view .LVU436 1479 0368 FEFFFFEB bl twl3025_power_off 1480 .LVL86: 240:apps/menu/main.c **** default: 1481 .loc 1 240 3 view .LVU437 1482 036c D1FFFFEA b .L44 1483 .L84: 1484 .align 2 1485 .L83: 1486 0370 00000000 .word .LANCHOR2 1487 0374 00000000 .word .LANCHOR1 1488 0378 00000000 .word framebuffer 1489 037c 13000000 .word .LC2 1490 0380 02001400 .word 1310722 1491 0384 4E000000 .word .LC3 1492 0388 02001900 .word 1638402 1493 038c 08002100 .word 2162696 1494 0390 53000000 .word .LC4 1495 0394 00000000 .word key_handler 1496 0398 0C000000 .word .LANCHOR0+12 1497 039c 67000000 .word .LC6 1498 03a0 00000000 .word .LANCHOR0 1499 03a4 5E000000 .word .LC5 1500 03a8 0E000000 .word .LANCHOR0+14 1501 03ac 96000000 .word .LC7 1502 .LBE290: 1503 .LBE294: 1504 .cfi_endproc 1505 .LFE106: 1507 .global hr 1508 .section .rodata.str1.1 1509 .LC8: 1510 00f5 3D3D3D3D .ascii "===================================================" 1510 3D3D3D3D 1510 3D3D3D3D 1510 3D3D3D3D 1510 3D3D3D3D 1511 0128 3D3D3D3D .ascii "===================\012\000" 1511 3D3D3D3D 1511 3D3D3D3D 1511 3D3D3D3D 1511 3D3D3D0A 1512 .section .rodata 1513 .set .LANCHOR2,. + 0 1516 phone_ack: 1517 0000 1BF60200 .ascii "\033\366\002\000A\003B" 1517 410342 1518 .data 1519 .align 2 1520 .set .LANCHOR1,. + 0 1523 key_code: 1524 0000 FF .byte -1 1525 0001 000000 .space 3 1528 hr: 1529 0004 F5000000 .word .LC8 1530 .bss 1531 .align 2 1532 .set .LANCHOR0,. + 0 1535 key_state: 1536 0000 00 .space 1 1537 0001 000000 .space 3 1540 i.1: 1541 0004 00000000 .space 4 1544 cursor: 1545 0008 00000000 .space 4 1548 apps: 1549 000c 00000000 .space 768 1549 00000000 1549 00000000 1549 00000000 1549 00000000 1552 scroll_apps: 1553 030c 00000000 .space 4 1554 .text 1555 .Letext0: 1556 .file 3 "/usr/lib/gcc/arm-none-eabi/12.2.1/include/stdint.h" 1557 .file 4 "/usr/lib/gcc/arm-none-eabi/12.2.1/include/stddef.h" 1558 .file 5 "include/keypad.h" 1559 .file 6 "include/fb/font.h" 1560 .file 7 "include/string.h" 1561 .file 8 "include/stdio.h" 1562 .file 9 "include/delay.h" 1563 .file 10 "include/abb/twl3025.h" 1564 .file 11 "include/calypso/clock.h" 1565 .file 12 "include/calypso/misc.h" 1566 .file 13 "include/board.h" 1567 .file 14 "" 1568 .file 15 "include/comm/timer.h" DEFINED SYMBOLS *ABS*:00000000 main.c /tmp/ccbpYRZH.s:19 .text.key_handler:00000000 $a /tmp/ccbpYRZH.s:23 .text.key_handler:00000000 key_handler /tmp/ccbpYRZH.s:49 .text.key_handler:00000018 $d /tmp/ccbpYRZH.s:55 .text.wait_key_release:00000000 $a /tmp/ccbpYRZH.s:59 .text.wait_key_release:00000000 wait_key_release /tmp/ccbpYRZH.s:102 .text.wait_key_release:0000002c $d /tmp/ccbpYRZH.s:107 .text.load_app:00000000 $a /tmp/ccbpYRZH.s:111 .text.load_app:00000000 load_app /tmp/ccbpYRZH.s:195 .text.load_app:0000006c $d /tmp/ccbpYRZH.s:200 .text.fb_putstr.isra.0:00000000 $a /tmp/ccbpYRZH.s:204 .text.fb_putstr.isra.0:00000000 fb_putstr.isra.0 /tmp/ccbpYRZH.s:226 .text.fb_putstr.isra.0:00000010 $d /tmp/ccbpYRZH.s:236 .text.refresh_display:00000000 $a /tmp/ccbpYRZH.s:240 .text.refresh_display:00000000 refresh_display /tmp/ccbpYRZH.s:748 .text.refresh_display:00000148 $d /tmp/ccbpYRZH.s:774 .text.startup.main:00000000 $a /tmp/ccbpYRZH.s:779 .text.startup.main:00000000 main /tmp/ccbpYRZH.s:1334 .text.startup.main:00000244 $d /tmp/ccbpYRZH.s:1358 .text.startup.main:00000298 $a /tmp/ccbpYRZH.s:1486 .text.startup.main:00000370 $d /tmp/ccbpYRZH.s:1528 .data:00000004 hr /tmp/ccbpYRZH.s:1516 .rodata:00000000 phone_ack /tmp/ccbpYRZH.s:1519 .data:00000000 $d /tmp/ccbpYRZH.s:1523 .data:00000000 key_code /tmp/ccbpYRZH.s:1531 .bss:00000000 $d /tmp/ccbpYRZH.s:1535 .bss:00000000 key_state /tmp/ccbpYRZH.s:1540 .bss:00000004 i.1 /tmp/ccbpYRZH.s:1544 .bss:00000008 cursor /tmp/ccbpYRZH.s:1548 .bss:0000000c apps /tmp/ccbpYRZH.s:1552 .bss:0000030c scroll_apps UNDEFINED SYMBOLS delay_ms keypad_poll framebuffer putchar_asm board_init puts dump_dev_id calypso_clk_dump keypad_set_handler memset memcmp printf memcpy osmo_timers_update twl3025_power_off