Automatic control of brightness v2

- data base G502 SW-R1FA037
- portado W760 R3EF001


Código:
include "x.inc"
include "w760.lib.asm"

;w760 R3EF001
;Automatic control of brightness v2
;Much improved version of BrightnessController patch/elf
;Ability to set brightness level in four time intervals
;Ability to decrease brightness level if battery is low
;Special menu with option to enable / disable automatic mode
;Showing icon in Tray, if automatic mode is enabled
;Configuration menu for intervals / brightness levels
;Showing work mode under "Brightness" in menu (example: Automatic : 70%)
;After phone restart, automatic mode is disabled! You need to enable it again in menu
;
;What edited:
;+change some code for proper work on db3150v1
;+Ability to run item with numeric keys
;
;(!) You must add new item "Brightness_AdvancedSettings" in menu.ml
;(!) Dont remove "Settings_Brightness_Id" in menu.ml
;(!) Heapshift(4BBF32F0-4BBF32F2)
;(c) mc_kibel
;(e) farid
;(P) josthyn05

org 0x11C285E0 ; 11A6EA14
                 DCD aBrightness_adv     ; "Brightness_AdvancedSettings"
                 DCD body+1

org 0x12840470
body:                
        PUSH    {R4,LR}
        ADD    R4, R0,    0
        BL    sub_121868AE
        CMP    R0, 0
        BEQ    loc_12186892
        CMP    R0, 1
        BEQ    loc_1218689E
        POP    {R4,PC}


loc_12186892:                
        ADD    R0, R4,    0
        CMP    R0, 0
        BEQ    loc_1218689C
        BL    sub_12187138

loc_1218689C:                
        POP    {R4,PC}


loc_1218689E:                
        MOV    R0, 0
        BL    sub_121870F8
        ADD    R1, R0,    0
        ADD    R0, R4,    0
        BL    sub_121868B2
        POP    {R4,PC}




sub_121868AE:                



        LDR    R3, off_121868B8
        BX    R3






sub_121868B2:                



        LDR    R3, off_121868BC
        BX    R3



        db    0
        db    0
off_121868B8    dw 0x10E75B70+1 ; 0x116C4FCC+1    
off_121868BC    dw 0x10E75B30+1 ; 0x116C4F90+1    




sub_121868C0:                
                    
        PUSH    {R4,LR}
        MOV    R1, 0
        MOV    R3, 5
        LSL    R4, R0,    0
        LDR    R0, off_121868DC
        MOV    R2, 1
        PUSH    {R0,R1}
        LSL    R1, R4,    0
        MOV    R0, 0
        MVN    R0, R0
        BL    sub_1218715C
        POP    {R2-R4,PC}



        NOP

off_121868DC    dw aSwilib        
                    




sub_121868E0:                
        PUSH    {LR}
        SUB    SP, SP,    0x34
        MOV    R1, SP
        MOV    R0, 1
        BL    sub_1218716C
        MOV    R0, SP
        ADD    R0, 0x20
        LDRB    R0, [R0]
        ADD    SP, SP,    0x34
        POP    {PC}



        db    0
        db    0




sub_121868F8:                
        PUSH    {R0,R1,LR}
        MOV    R1, SP
        MOV    R0, 0
        BL    sub_12187174
        MOV    R0, SP
        LDRB    R0, [R0,4]
        POP    {R2,R3,PC}






sub_12186908:                

var_50        = -0x50
var_4C        = -0x4C
var_48        = -0x48
var_40        = -0x40
var_3C        = -0x3C
var_34        = -0x34
var_30        = -0x30
var_24        = -0x24
var_20        = -0x20
var_1C        = -0x1C
var_18        = -0x18
arg_0        =  0
arg_4        =  4

        PUSH    {R0,R4-R7,LR}
        SUB    SP, SP,    0x38
        LSL    R4, R1,    0
        LSL    R5, R2,    0
        LSL    R6, R3,    0
        MOV    R2, 0x38
        MOV    R1, 0
        MOV    R0, SP
        BL    sub_1218717C
        LDR    R0, off_1218698C
        MOV    R1, 0
        PUSH    {R1}
        MOVL    R3, 0x180
        MOV    R2, 1
        MOVL    R1, 0x1B8
        ADD    R1, R0,    R1
        MOVL    R7, 0x18C
        ADD    R0, R0,    R7
        BL    sub_12187184
        LSL    R7, R0,    0
        MOV    R2, 0x38
        ADD    R1, SP,    0x54+var_50
        BL    sub_12187194
        LSL    R0, R7,    0
        BL    sub_1218719C
        LDR    R1, [SP,0x54+var_18]
        MOV    R0, 0
        STR    R0, [R1]
        LDR    R1, [SP,0x54+var_18]
        LDR    R2, [SP,0x54+var_4C]
        STR    R2, [R1,4]
        LDR    R1, [SP,0x54+var_18]
        LDR    R2, [SP,0x54+var_48]
        STR    R2, [R1,8]
        LDR    R1, [SP,0x54+var_4C]
        STR    R1, [R4]
        LDR    R1, [SP,0x54+var_40]
        STR    R1, [R4,4]
        LDR    R1, [SP,0x54+var_3C]
        STR    R1, [R4,8]
        LDR    R1, [SP,0x54+var_40]
        STR    R1, [R5]
        LDR    R1, [SP,0x54+var_34]
        STR    R1, [R5,4]
        LDR    R1, [SP,0x54+var_30]
        STR    R1, [R5,8]
        LDR    R1, [SP,0x54+var_34]
        STR    R1, [R6]
        STR    R0, [R6,4]
        LDR    R0, [SP,0x54+var_24]
        STR    R0, [R6,8]
        LDR    R0, [SP,0x54+arg_0]
        LDR    R1, [SP,0x54+var_1C]
        STR    R1, [R0]
        LDR    R0, [SP,0x54+arg_4]
        LDR    R1, [SP,0x54+var_20]
        STR    R1, [R0]
        ADD    SP, SP,    0x40
        POP    {R4-R7,PC}



off_1218698C    dw aBr_intervals_s    
                    


loc_12186990:                
                    
        PUSH    {R4,R5,LR}
        SUB    SP, SP,    0x38
        MOV    R4, 0
        BL    sub_121868F8
        LSL    R5, R0,    0
        ADD    R1, SP,    4
        MOV    R0, SP
        PUSH    {R0,R1}
        ADD    R3, SP,    0x28
        ADD    R2, SP,    0x1C
        ADD    R0, SP,    0x34
        ADD    R1, SP,    0x10
        BL    sub_12186908
        BL    sub_121868E0
        LDR    R1, [SP,8]
        ADD    SP, SP,    8
        CMP    R1, R0
        BLT    loc_121869C4
        LDR    R0, [SP,4]
        CMP    R0, 1
        BNE    loc_121869C4
        LSL    R4, R1,    0
        B    loc_121869FC


loc_121869C4:                
                    
        LDR    R0, [SP,0x30]
        CMP    R5, R0
        BGE    loc_121869CE
        LDR    R4, [SP,0x34]
        B    loc_121869FC


loc_121869CE:                
        LDR    R0, [SP,8]
        CMP    R5, R0
        BLT    loc_121869DE
        LDR    R0, [SP,0xC]
        CMP    R5, R0
        BGE    loc_121869DE
        LDR    R4, [SP,0x10]
        B    loc_121869FC


loc_121869DE:                
                    
        LDR    R0, [SP,0x14]
        CMP    R5, R0
        BLT    loc_121869EE
        LDR    R0, [SP,0x18]
        CMP    R5, R0
        BGE    loc_121869EE
        LDR    R4, [SP,0x1C]
        B    loc_121869FC


loc_121869EE:                
                    
        LDR    R0, [SP,0x20]
        CMP    R5, R0
        BLT    loc_121869FC
        LDR    R0, [SP,0x24]
        CMP    R0, R5
        BGE    loc_121869FC
        LDR    R4, [SP,0x28]

loc_121869FC:                
                    
        MOV    R1, 0
        LSL    R0, R4,    0
        BL    sub_121871A4
        LDR    R2, off_12186A18
        LDR    R1, dword_12186A14
        LDR    R0, dword_12186A44
        MOV    R3, 0
        BL    sub_121871AC
        ADD    SP, SP,    0x38
        POP    {R4,R5,PC}

dword_12186A14    dw 0x2710        
off_12186A18    dw loc_12186990+1    




sub_12186A1C:                
        LDR    R0, dword_12186A40
        PUSH    {LR}
        MOV    R1, 0
        BL    sub_121871BC
        LDR    R0, dword_12186A44
        LDRH    R1, [R0]
        CMP    R1, 0
        BEQ    loc_12186A32
        BL    sub_121871C4

loc_12186A32:                
        LDR    R0, off_12186A3C
        BL    sub_121871CC
        POP    {PC}



        NOP

off_12186A3C    dw aSettings_brigh    
                    
dword_12186A40    dw 0xE572        
dword_12186A44    dw 0x4BBF32F0 ; 0x2A2B2306 ; heap        
                    
dword_12186A48    dw 0x4770        




sub_12186A4C:                
                    

var_20        = -0x20
var_1C        = -0x1C
var_18        = -0x18
arg_0        =  0

        PUSH    {R0-R2,R4-R7,LR}
        LDR    R5, [SP,0x20+arg_0]
        LSL    R4, R3,    0
        MOV    R0, 0x20
        BL    sub_121868C0
        LSL    R6, R0,    0
        MOV    R2, 0x20
        MOV    R1, 0
        BL    sub_1218717C
        MOV    R1, 0
        LDR    R3, off_12186AF0
        MOV    R0, 0
        MVN    R0, R0
        PUSH    {R0,R1}
        LDR    R1, off_12186BAC
        MOV    R2, 0
        LSL    R0, R6,    0
        BL    sub_121871D4
        MOV    R1, 0
        LSL    R0, R6,    0
        BL    sub_121871E4
        LDR    R2, dword_12186D98
        LSL    R7, R0,    0
        STR    R7, [R6,0x18]
        LDR    R0, [SP,0x28+var_1C]
        MOV    R1, 0
        BL    sub_121871EC
        LSL    R1, R0,    0
        LSL    R0, R7,    0
        BL    sub_121871F4
        LDR    R1, [SP,0x28+var_20]
        LSL    R0, R7,    0
        BL    sub_121871FC
        LDR    R1, [SP,0x28+var_18]
        LSL    R0, R7,    0
        BL    sub_12187204
        MOV    R1, 1
        LSL    R0, R7,    0
        BL    sub_1218720C
        MOV    R1, 0
        LSL    R0, R7,    0
        BL    sub_12187214
        MOV    R1, 0
        LSL    R0, R7,    0
        BL    sub_1218721C
        MOV    R1, 1
        LSL    R0, R7,    0
        BL    sub_12187224
        LSL    R2, R4,    0
        MOVL    R1, 0xFC0
        LSL    R0, R7,    0
        BL    sub_1218722C
        LDR    R1, dword_12186AF4
        LSL    R2, R4,    0
        LSL    R0, R7,    0
        BL    sub_1218722C
        LDR    R1, dword_12186AF8
        LSL    R2, R5,    0
        LSL    R0, R7,    0
        BL    sub_1218722C
        LSL    R0, R7,    0
        BL    sub_12187234
        ADD    SP, SP,    0x14
        POP    {R4-R7,PC}



        NOP

off_12186AF0    dw aBrightnesssett    
                    
dword_12186AF4    dw 0xFAF        
dword_12186AF8    dw 0xFC2        




sub_12186AFC:                
                    

var_44        = -0x44
var_40        = -0x40
var_3C        = -0x3C
var_38        = -0x38
var_34        = -0x34
var_30        = -0x30
var_2C        = -0x2C
var_28        = -0x28
var_24        = -0x24
var_20        = -0x20
var_1C        = -0x1C
var_18        = -0x18
arg_0        =  0
arg_4        =  4
arg_8        =  8
arg_C        =  0xC
arg_10        =  0x10

        PUSH    {R0,R1,R4-R7,LR}
        SUB    SP, SP,    0x28
        LDR    R6, [SP,0x44+arg_10]
        LSL    R4, R2,    0
        LSL    R5, R3,    0
        MOV    R0, 0x51
        STR    R0, [SP,0x44+var_44]
        MOV    R0, 0x44
        STR    R0, [SP,0x44+var_40]
        MOV    R0, 0xAC
        STR    R0, [SP,0x44+var_3C]
        MOV    R0, 0x66
        STR    R0, [SP,0x44+var_38]
        MOV    R0, 0x8C
        STR    R0, [SP,0x44+var_34]
        MOV    R0, 0x93
        STR    R0, [SP,0x44+var_30]
        MOV    R0, 0x7F
        STR    R0, [SP,0x44+var_2C]
        MOV    R0, 0xBE
        STR    R0, [SP,0x44+var_28]
        MOV    R0, 0x95
        STR    R0, [SP,0x44+var_24]
        MOV    R0, 0x8F
        STR    R0, [SP,0x44+var_20]
        MOV    R0, 0x20
        BL    sub_121868C0
        LSL    R7, R0,    0
        MOV    R2, 0x20
        MOV    R1, 0
        BL    sub_1218717C
        MOV    R1, 0
        MOV    R0, 0
        MVN    R0, R0
        PUSH    {R0,R1}
        LDR    R3, [SP,0x4C+var_18]
        LDR    R1, off_12186BAC
        MOV    R2, 0
        LSL    R0, R7,    0
        BL    sub_121871D4
        ADD    R0, SP,    0x4C+var_1C
        LDRB    R0, [R0]
        STRB    R0, [R7,0x1C]
        LSL    R0, R5,    0
        BL    sub_1218723C
        LDR    R2, dword_12186D98
        LSL    R5, R0,    0
        MOV    R1, 0
        LSL    R0, R4,    0
        BL    sub_121871EC
        LSL    R4, R0,    0
        LDR    R0, [SP,0x4C+arg_C]
        MOV    R3, 0
        LSL    R2, R6,    0
        ADD    R1, SP,    0x4C+var_20
        PUSH    {R0-R3}
        LDR    R2, [SP,0x5C+arg_8]
        ADD    R1, SP,    0x5C+var_34
        MOV    R0, 1
        ADD    R3, SP,    0x5C+var_24
        PUSH    {R0-R3}
        LDR    R0, [SP,0x6C+arg_0]
        ADD    R1, SP,    0x6C+var_2C
        MOV    R2, 2
        ADD    R3, SP,    0x6C+var_30
        PUSH    {R0-R3}
        LDR    R1, [SP,0x7C+arg_4]
        ADD    R0, SP,    0x7C+var_40
        ADD    R2, SP,    0x7C+var_3C
        PUSH    {R0-R2}
        LSL    R2, R5,    0
        LSL    R0, R4,    0
        ADD    R1, SP,    0x88+var_38
        PUSH    {R0-R2}
        ADD    R3, SP,    0x94+var_28
        MOV    R0, 0
        ADD    R1, SP,    0x94+var_44
        LSL    R2, R7,    0
        BL    sub_12187244
        ADD    SP, SP,    0x50
        ADD    SP, SP,    0x30
        POP    {R4-R7,PC}



off_12186BAC    dw dword_12186A48+1    
                    


loc_12186BB0:                
        PUSH    {R4-R7,LR}
        SUB    SP, SP,    0x40
        LSL    R4, R0,    0
        MOV    R5, 0
        MOV    R6, 0
        CMP    R2, 1
        BNE    loc_12186BC4
        LDRH    R6, [R1]
        SUB    R6, 0x30
        B    loc_12186BF0


loc_12186BC4:                
        CMP    R2, 2
        BNE    loc_12186BD6
        LDRH    R0, [R1]
        LDRH    R1, [R1,2]
        MOV    R2, 0xA
        MUL    R0, R2
        ADD    R0, R0,    R1
        LDR    R1, dword_12186CA8
        B    loc_12186BEE


loc_12186BD6:                
        CMP    R2, 3
        BNE    loc_12186BF0
        LDRH    R0, [R1]
        MOV    R2, 0x64
        MOV    R3, 0xA
        MUL    R0, R2
        LDRH    R2, [R1,2]
        LDRH    R1, [R1,4]
        MUL    R2, R3
        ADD    R0, R0,    R2
        ADD    R0, R0,    R1
        LDR    R1, dword_12186CAC

loc_12186BEE:                
        ADD    R6, R0,    R1

loc_12186BF0:                
                    
        MOV    R2, 0x38
        MOV    R1, 0
        ADD    R0, SP,    8
        BL    sub_1218717C
        LDR    R0, off_12186EDC
        MOVL    R1, 0x18C
        ADD    R1, R0,    R1
        STR    R1, [SP]
        MOVL    R1, 0x1B8
        ADD    R0, R0,    R1
        STR    R0, [SP,4]
        LSL    R0, R5,    0
        PUSH    {R0}
        LDR    R1, [SP,8]
        LDR    R0, [SP,4]
        MOVL    R3, 0x180
        MOV    R2, 1
        BL    sub_12187184
        LSL    R7, R0,    0
        MOV    R2, 0x38
        ADD    R1, SP,    0xC
        BL    sub_12187194
        LSL    R0, R7,    0
        BL    sub_1218719C
        STR    R5, [SP,0xC]
        STR    R5, [SP,0x34]
        LDRB    R0, [R4,0x1C]
        ADD    SP, SP,    4
        CMP    R0, 3
        BNE    loc_12186C40
        STR    R6, [SP,0xC]
        STR    R6, [SP,0x14]
        B    loc_12186C7A


loc_12186C40:                
        CMP    R0, 4
        BNE    loc_12186C4A
        STR    R6, [SP,0x18]
        STR    R6, [SP,0x20]
        B    loc_12186C7A


loc_12186C4A:                
        CMP    R0, 5
        BNE    loc_12186C54
        STR    R6, [SP,0x24]
        STR    R6, [SP,0x2C]
        B    loc_12186C7A


loc_12186C54:                
        CMP    R0, 6
        BNE    loc_12186C5C
        STR    R6, [SP,0x10]
        B    loc_12186C7A


loc_12186C5C:                
        CMP    R0, 7
        BNE    loc_12186C64
        STR    R6, [SP,0x1C]
        B    loc_12186C7A


loc_12186C64:                
        CMP    R0, 8
        BNE    loc_12186C6C
        STR    R6, [SP,0x28]
        B    loc_12186C7A


loc_12186C6C:                
        CMP    R0, 9
        BNE    loc_12186C74
        STR    R6, [SP,0x34]
        B    loc_12186C7A


loc_12186C74:                
        CMP    R0, 0xA
        BNE    loc_12186C7A
        STR    R6, [SP,0x3C]

loc_12186C7A:                
                    
        MOV    R0, 0
        PUSH    {R0}
        LDR    R1, [SP,8]
        LDR    R0, [SP,4]
        MOVL    R3, 0x180
        MOV    R2, 2
        BL    sub_12187184
        LSL    R5, R0,    0
        MOV    R2, 0x38
        ADD    R1, SP,    0xC
        BL    sub_12187254
        LSL    R0, R5,    0
        BL    sub_1218719C
        LSL    R0, R4,    0
        BL    sub_1218725C
        ADD    SP, SP,    0x44
        POP    {R4-R7,PC}

        NOP

dword_12186CA8    dw 0xFFFFFDF0        
dword_12186CAC    dw 0xFFFFEB30        


loc_12186CB0:                
        PUSH    {LR}
        B    loc_12186FEC


loc_12186CB4:                
        PUSH    {R4-R6,LR}
        LDR    R5, off_12186EDC
        SUB    SP, SP,    0x38
        LDR    R0, [R0,0x18]
        BL    sub_12187264
        LSL    R4, R0,    0
        MOV    R2, 0x38
        MOV    R1, 0
        MOV    R0, SP
        BL    sub_1218717C
        MOV    R0, 0
        PUSH    {R0}
        MOVL    R3, 0x180
        MOV    R2, 1
        MOVL    R0, 0x1B8
        ADD    R1, R5,    R0
        SUB    R0, 0x2C
        ADD    R0, R5,    R0
        BL    sub_12187184
        LSL    R6, R0,    0
        MOV    R2, 0x38
        ADD    R1, SP,    4
        BL    sub_12187194
        LSL    R0, R6,    0
        LDR    R6, off_12186F98
        BL    sub_1218719C
        LDR    R0, off_12186E74
        ADD    SP, SP,    4
        CMP    R4, 0
        BNE    loc_12186D14
        MOV    R3, 0x17
        MOV    R2, 0
        MOV    R1, 2
        PUSH    {R0-R3}
        PUSH    {R6}
        LSL    R2, R5,    0
        LDR    R3, [SP,0x18]
        ADD    R2, 0x18
        LSL    R1, R5,    0
        MOV    R0, 3
        B    loc_12186D46


loc_12186D14:                
        CMP    R4, 1
        BNE    loc_12186D2E
        MOV    R3, 0x17
        MOV    R2, 0
        MOV    R1, 2
        PUSH    {R0-R3}
        PUSH    {R6}
        LSL    R2, R5,    0
        LDR    R3, [SP,0x24]
        ADD    R2, 0x3C
        LSL    R1, R5,    0
        MOV    R0, 4
        B    loc_12186D46


loc_12186D2E:                
        CMP    R4, 2
        BNE    loc_12186D4C
        MOV    R3, 0x17
        MOV    R2, 0
        MOV    R1, 2
        PUSH    {R0-R3}
        PUSH    {R6}
        LSL    R2, R5,    0
        LDR    R3, [SP,0x30]
        ADD    R2, 0x60
        LSL    R1, R5,    0
        MOV    R0, 5

loc_12186D46:                
                    
        BL    sub_12186AFC
        ADD    SP, SP,    0x14

loc_12186D4C:                
        ADD    SP, SP,    0x38
        POP    {R4-R6,PC}


loc_12186D50:                
        PUSH    {R4,LR}
        LSL    R4, R0,    0
        BL    sub_1218726C
        LSL    R0, R4,    0
        BL    sub_12187274
        CMP    R0, 1
        BNE    loc_12186D94
        LSL    R0, R4,    0
        BL    sub_1218727C
        LDR    R2, dword_12186D98
        LSL    R1, R0,    0
        LDR    R0, off_12186EDC
        CMP    R1, 0
        BNE    loc_12186D76
        ADD    R0, 0x18
        B    loc_12186D88


loc_12186D76:                
        CMP    R1, 1
        BNE    loc_12186D80
        MOV    R1, 0
        ADD    R0, 0x3C
        B    loc_12186D88


loc_12186D80:                
        CMP    R1, 2
        BNE    loc_12186D94
        MOV    R1, 0
        ADD    R0, 0x60

loc_12186D88:                
                    
        BL    sub_121871EC
        LSL    R1, R0,    0
        LSL    R0, R4,    0
        BL    sub_12187284

loc_12186D94:                
                    
        MOV    R0, 1
        POP    {R4,PC}

dword_12186D98    dw 0xFFFF        
                    


loc_12186D9C:                
        PUSH    {R4-R7,LR}
        LDR    R5, off_12186EDC
        LDR    R7, off_12186F98
        SUB    SP, SP,    0x38
        LDR    R0, [R0,0x18]
        BL    sub_12187264
        LSL    R4, R0,    0
        MOV    R2, 0x38
        MOV    R1, 0
        MOV    R0, SP
        BL    sub_1218717C
        MOV    R0, 0
        PUSH    {R0}
        MOVL    R3, 0x180
        MOV    R2, 1
        MOVL    R0, 0x1B8
        ADD    R1, R5,    R0
        SUB    R0, 0x2C
        ADD    R0, R5,    R0
        BL    sub_12187184
        LSL    R6, R0,    0
        MOV    R2, 0x38
        ADD    R1, SP,    4
        BL    sub_12187194
        LSL    R0, R6,    0
        BL    sub_1218719C
        LDR    R0, off_12186E74
        LSL    R6, R5,    0
        ADD    R6, 0x84
        ADD    SP, SP,    4
        CMP    R4, 0
        BNE    loc_12186E00
        MOV    R3, 0x64
        MOV    R2, 0xA
        MOV    R1, 3
        PUSH    {R0-R3}
        PUSH    {R7}
        ADD    R5, 0x98
        LDR    R3, [SP,0x1C]
        LSL    R2, R5,    0
        LSL    R1, R6,    0
        MOV    R0, 6
        B    loc_12186E6A


loc_12186E00:                
        CMP    R4, 1
        BNE    loc_12186E1A
        MOV    R3, 0x64
        MOV    R2, 0xA
        MOV    R1, 3
        PUSH    {R0-R3}
        PUSH    {R7}
        ADD    R5, 0xC4
        LDR    R3, [SP,0x28]
        LSL    R2, R5,    0
        LSL    R1, R6,    0
        MOV    R0, 7
        B    loc_12186E6A


loc_12186E1A:                
        CMP    R4, 2
        BNE    loc_12186E34
        MOV    R3, 0x64
        MOV    R2, 0xA
        MOV    R1, 3
        PUSH    {R0-R3}
        PUSH    {R7}
        ADD    R5, 0xF0
        LDR    R3, [SP,0x34]
        LSL    R2, R5,    0
        LSL    R1, R6,    0
        MOV    R0, 8
        B    loc_12186E6A


loc_12186E34:                
        CMP    R4, 3
        BNE    loc_12186E50
        MOV    R3, 0x64
        MOV    R2, 0xA
        MOV    R1, 3
        PUSH    {R0-R3}
        PUSH    {R7}
        MOV    R0, 0x8E
        LDR    R3, [SP,0x40]
        LSL    R0, R0,    1
        ADD    R2, R5,    R0
        LSL    R1, R6,    0
        MOV    R0, 9
        B    loc_12186E6A


loc_12186E50:                
        CMP    R4, 4
        BNE    loc_12186E70
        MOV    R3, 0x64
        MOV    R2, 0xA
        MOV    R1, 3
        PUSH    {R0-R3}
        PUSH    {R7}
        MOV    R0, 0xA4
        LDR    R3, [SP,0x48]
        LSL    R0, R0,    1
        ADD    R2, R5,    R0
        LSL    R1, R6,    0
        MOV    R0, 0xA

loc_12186E6A:                
                    
        BL    sub_12186AFC
        ADD    SP, SP,    0x14

loc_12186E70:                
        ADD    SP, SP,    0x38
        POP    {R4-R7,PC}

off_12186E74    dw loc_12186BB0+1    
                    


loc_12186E78:                
        PUSH    {R4,LR}
        LSL    R4, R0,    0
        BL    sub_1218726C
        LSL    R0, R4,    0
        BL    sub_12187274
        CMP    R0, 1
        BNE    loc_12186ED8
        LSL    R0, R4,    0
        BL    sub_1218727C
        LDR    R2, dword_121870F4
        LSL    R1, R0,    0
        LDR    R0, off_12186EDC
        CMP    R1, 0
        BNE    loc_12186E9E
        ADD    R0, 0x98
        B    loc_12186ECC


loc_12186E9E:                
        CMP    R1, 1
        BNE    loc_12186EA8
        MOV    R1, 0
        ADD    R0, 0xC4
        B    loc_12186ECC


loc_12186EA8:                
        CMP    R1, 2
        BNE    loc_12186EB2
        MOV    R1, 0
        ADD    R0, 0xF0
        B    loc_12186ECC


loc_12186EB2:                
        CMP    R1, 3
        BNE    loc_12186EC0
        MOV    R1, 0
        MOVL    R3, 0x11C
        ADD    R0, R0,    R3
        B    loc_12186ECC


loc_12186EC0:                
        CMP    R1, 4
        BNE    loc_12186ED8
        MOV    R1, 0
        MOVL    R3, 0x148
        ADD    R0, R0,    R3

loc_12186ECC:                
                    
        BL    sub_121871EC
        LSL    R1, R0,    0
        LSL    R0, R4,    0
        BL    sub_12187284

loc_12186ED8:                
                    
        MOV    R0, 1
        POP    {R4,PC}

off_12186EDC    dw aBr_intervals_s    
                    
                    




sub_12186EE0:                
        LDR    R0, dword_12186F40
        PUSH    {R4-R7,LR}
        LDR    R4, dword_12186F34
        LDR    R5, dword_12186F38
        LDR    R6, off_12186F3C
        LDR    R7, dword_121870F4
        MOV    R1, 1
        BL    sub_121871BC
        LDR    R0, dword_12187134
        LDRH    R0, [R0]
        CMP    R0, 0
        BNE    loc_12186F0E
        LDR    R1, off_12186F44
        MOV    R2, 0
        MOV    R0, 0x64
        BL    sub_1218728C
        LDR    R1, dword_12187134
        LSL    R2, R7,    0
        STRH    R0, [R1]
        MOV    R1, 0
        B    loc_12186F14


loc_12186F0E:                
        LSL    R2, R7,    0
        MOV    R1, 0
        ADD    R6, 0x30

loc_12186F14:                
        LSL    R0, R6,    0
        BL    sub_121871EC
        LSL    R6, R0,    0
        MOV    R1, 0
        LSL    R0, R5,    0
        PUSH    {R0,R1}
        MOV    R3, 1
        MOV    R2, 0
        LSL    R0, R4,    0
        LSL    R1, R6,    0
        BL    sub_12187294
        ADD    SP, SP,    8
        POP    {R4-R7,PC}



        NOP

dword_12186F34    dw 0x6FFFFFFF        
dword_12186F38    dw 0x5DC        
off_12186F3C    dw aAutomaticModeE    
                    
dword_12186F40    dw 0xE572        
off_12186F44    dw loc_12186990+1    


loc_12186F48:                
        PUSH    {LR}
        LDR    R0, [R0,0x18]
        BL    sub_12187264
        CMP    R0, 0
        BNE    loc_12186F5A
        BL    sub_12186EE0
        POP    {PC}


loc_12186F5A:                
        LDR    R1, off_12186FE4
        LDR    R3, off_12186F98
        CMP    R0, 1
        BNE    loc_12186F72
        LDR    R0, off_12186F88
        LDR    R2, off_12186F8C
        PUSH    {R0}
        MOV    R0, 3
        BL    sub_12186A4C
        ADD    SP, SP,    4
        POP    {PC}


loc_12186F72:                
        CMP    R0, 2
        BNE    loc_12186F86
        LDR    R0, off_12186F90
        LDR    R2, off_12186F94
        PUSH    {R0}
        ADD    R1, 0x14
        MOV    R0, 5
        BL    sub_12186A4C
        ADD    SP, SP,    4

loc_12186F86:                
        POP    {PC}

off_12186F88    dw loc_12186CB4+1    
off_12186F8C    dw loc_12186D50+1    
off_12186F90    dw loc_12186D9C+1    
off_12186F94    dw loc_12186E78+1    
off_12186F98    dw loc_12186CB0+1    
                    


loc_12186F9C:                
        PUSH    {R4,LR}
        LSL    R4, R0,    0
        BL    sub_1218726C
        LSL    R0, R4,    0
        BL    sub_12187274
        CMP    R0, 1
        BNE    loc_12186FDE
        LSL    R0, R4,    0
        BL    sub_1218727C
        LDR    R2, dword_121870F4
        LSL    R1, R0,    0
        LDR    R0, off_12186FE4
        CMP    R1, 0
        BNE    loc_12186FC2
        ADD    R0, 0x38
        B    loc_12186FD2


loc_12186FC2:                
        CMP    R1, 1
        BNE    loc_12186FCA
        MOV    R1, 0
        B    loc_12186FD2


loc_12186FCA:                
        CMP    R1, 2
        BNE    loc_12186FDE
        MOV    R1, 0
        ADD    R0, 0x14

loc_12186FD2:                
                    
        BL    sub_121871EC
        LSL    R1, R0,    0
        LSL    R0, R4,    0
        BL    sub_12187284

loc_12186FDE:                
                    
        MOV    R0, 1
        POP    {R4,PC}

        db    0
        db    0
off_12186FE4    dw aIntervals        
                    
                    


loc_12186FE8:                
        PUSH    {LR}
        NOP

loc_12186FEC:                
        BL    sub_1218725C
        POP    {PC}

        db    0
        db    0




sub_12186FF4:                

var_64        = -0x64
var_60        = -0x60
var_5C        = -0x5C
var_58        = -0x58
var_54        = -0x54
var_50        = -0x50
var_4C        = -0x4C
var_48        = -0x48
var_44        = -0x44
var_40        = -0x40
var_3C        = -0x3C
var_38        = -0x38
var_34        = -0x34
var_30        = -0x30
var_2C        = -0x2C

        PUSH    {R4-R6,LR}
        LDR    R4, off_12187094
        SUB    SP, SP,    0x54
        MOVL    R0, 0x18C
        ADD    R5, R4,    R0
        ADD    R0, 0x2C
        ADD    R6, R4,    R0
        ADD    R2, SP,    0x64+var_2C
        LSL    R1, R6,    0
        LSL    R0, R5,    0
        BL    sub_121872A4
        CMP    R0, 0
        BEQ    loc_12187074
        MOV    R2, 0x38
        MOV    R1, 0
        MOV    R0, SP
        BL    sub_1218717C
        MOV    R0, 0
        PUSH    {R0}
        MOVL    R3, 0x180
        MOV    R2, 2
        LSL    R1, R6,    0
        LSL    R0, R5,    0
        BL    sub_12187184
        LSL    R5, R0,    0
        MOV    R0, 0
        STR    R0, [SP,0x68+var_64]
        MOV    R1, 8
        STR    R1, [SP,0x68+var_60]
        MOV    R1, 0x1E
        STR    R1, [SP,0x68+var_5C]
        LDR    R2, [SP,0x68+var_60]
        STR    R2, [SP,0x68+var_58]
        MOV    R2, 0xE
        STR    R2, [SP,0x68+var_54]
        MOV    R2, 0x46
        STR    R2, [SP,0x68+var_50]
        LDR    R2, [SP,0x68+var_54]
        STR    R2, [SP,0x68+var_4C]
        MOV    R2, 0x15
        STR    R2, [SP,0x68+var_48]
        MOV    R2, 0x64
        STR    R2, [SP,0x68+var_44]
        LDR    R2, [SP,0x68+var_48]
        STR    R2, [SP,0x68+var_40]
        STR    R0, [SP,0x68+var_3C]
        STR    R1, [SP,0x68+var_38]
        STR    R1, [SP,0x68+var_30]
        MOV    R0, 1
        STR    R0, [SP,0x68+var_34]
        MOV    R2, 0x38
        ADD    R1, SP,    0x68+var_64
        LSL    R0, R5,    0
        BL    sub_12187254
        LSL    R0, R5,    0
        BL    sub_1218719C
        ADD    SP, SP,    4

loc_12187074:                
        LDR    R0, off_1218708C
        LDR    R3, off_12187158
        LDR    R2, off_12187090
        PUSH    {R0}
        MOVL    R0, 0x16C
        ADD    R1, R4,    R0
        MOV    R0, 3
        BL    sub_12186A4C
        ADD    SP, SP,    0x58
        POP    {R4-R6,PC}



off_1218708C    dw loc_12186F48+1    
off_12187090    dw loc_12186F9C+1    
off_12187094    dw aBr_intervals_s    
                    


loc_12187098:                
        PUSH    {LR}
        LDR    R0, [R0,0x18]
        BL    sub_12187264
        CMP    R0, 0
        BNE    loc_121870AA
        BL    sub_12186A1C
        POP    {PC}


loc_121870AA:                
        CMP    R0, 1
        BNE    loc_121870B2
        BL    sub_12186FF4

loc_121870B2:                
        POP    {PC}


loc_121870B4:                
        PUSH    {R4,LR}
        LSL    R4, R0,    0
        BL    sub_1218726C
        LSL    R0, R4,    0
        BL    sub_12187274
        CMP    R0, 1
        BNE    loc_121870EA
        LSL    R0, R4,    0
        BL    sub_1218727C
        LDR    R2, dword_121870F4
        LSL    R1, R0,    0
        LDR    R0, off_121870F0
        CMP    R1, 0
        BEQ    loc_121870DE
        CMP    R1, 1
        BNE    loc_121870EA
        MOV    R1, 0
        ADD    R0, 0x10

loc_121870DE:                
        BL    sub_121871EC
        LSL    R1, R0,    0
        LSL    R0, R4,    0
        BL    sub_12187284

loc_121870EA:                
                    
        MOV    R0, 1
        POP    {R4,PC}

        NOP

off_121870F0    dw aManual        
                    
dword_121870F4    dw 0xFFFF        
                    




sub_121870F8:                
        LDR    R0, dword_12187134
        PUSH    {R4,LR}
        LDR    R4, off_12187130
        SUB    SP, SP,    0x80
        LDRH    R0, [R0]
        CMP    R0, 0
        BEQ    loc_12187110
        MOV    R0, 0
        BL    sub_121872AC
        LSL    R3, R0,    0
        B    loc_12187118


loc_12187110:                
        BL    sub_121872AC
        LSL    R3, R0,    0
        ADD    R4, 0x24

loc_12187118:                
        LSL    R2, R4,    0
        MOV    R1, 0x3F
        MOV    R0, SP
        BL    sub_121872B4
        MOV    R2, 0x3F
        MOV    R1, 0
        MOV    R0, SP
        BL    sub_121871EC
        ADD    SP, SP,    0x80
        POP    {R4,PC}



off_12187130    dw aAutomaticD        
                    
dword_12187134    dw 0x4BBF32F0 ; 0x2A2B2306 ; heap        
                    




sub_12187138:                
        LDR    R0, off_1218714C
        LDR    R3, off_12187158
        LDR    R2, off_12187150
        LDR    R1, off_12187154
        PUSH    {LR}
        PUSH    {R0}
        MOV    R0, 2
        BL    sub_12186A4C
        POP    {R3,PC}



off_1218714C    dw loc_12187098+1    
off_12187150    dw loc_121870B4+1    
off_12187154    dw aBrightnessSett    
                    
off_12187158    dw loc_12186FE8+1    
                    




sub_1218715C:                
        PUSH    {R3}
        LDR    R3, off_12187168
        MOV    R12, R3
        POP    {R3}
        BX    R12



        NOP

off_12187168    dw 0x10B4F360+1 ; 0x11080DF0+1    




sub_1218716C:                





        LDR    R3, off_12187170
        BX    R3        



off_12187170    dw GetBatteryState+1    
                    




sub_12187174:                
        LDR    R3, off_12187178
        BX    R3        



off_12187178    dw REQUEST_DATEANDTIME_GET+1 
                    




sub_1218717C:                
                    
        LDR    R3, dword_12187180
        BX    R3



dword_12187180    dw 0x4BB010AC ; 0x2A1C07A0 ; ram        




sub_12187184:                
                    
        PUSH    {R3}
        LDR    R3, off_12187190
        MOV    R12, R3
        POP    {R3}
        BX    R12        



        NOP

off_12187190    dw _fopen+1        
                    




sub_12187194:                
                    
        LDR    R3, off_12187198
        BX    R3        



off_12187198    dw fread+1        
                    




sub_1218719C:                
                    

var_C        = -0xC



        LDR    R3, off_121871A0
        BX    R3        



off_121871A0    dw fclose+1        
                    




sub_121871A4:                
        LDR    R3, off_121871A8
        BX    R3



off_121871A8    dw Display_SetBrightness+1 ; 0x11625590+1    




sub_121871AC:                
        PUSH    {R3}
        LDR    R3, off_121871B8
        MOV    R12, R3
        POP    {R3}
        BX    R12        



        NOP

off_121871B8    dw Timer_ReSet+1    
                    




sub_121871BC:                
                    
        LDR    R3, off_121871C0
        BX    R3        



off_121871C0    dw SetTrayIcon+1    
                    




sub_121871C4:                
        LDR    R3, off_121871C8
        BX    R3        



off_121871C8    dw Timer_Kill+1    
                    




sub_121871CC:                
        LDR    R3, off_121871D0
        BX    R3        



off_121871D0    dw Shortcut_Run+1    
                    




sub_121871D4:                
                    
        PUSH    {R3}
        LDR    R3, off_121871E0
        MOV    R12, R3
        POP    {R3}
        BX    R12        



        NOP

off_121871E0    dw CreateBook+1    
                    




sub_121871E4:                
        LDR    R3, off_121871E8
        BX    R3        



off_121871E8    dw CreateListMenu+1    
                    




sub_121871EC:                
                    
        LDR    R3, off_121871F0
        BX    R3



off_121871F0    dw Str2ID+1 ; 0x1168442C+1    




sub_121871F4:                
        LDR    R3, off_121871F8
        BX    R3        



off_121871F8    dw GUIObject_SetTitleText+1 
                    




sub_121871FC:                
        LDR    R3, off_12187200
        BX    R3        



off_12187200    dw ListMenu_SetItemCount+1 
                    




sub_12187204:                
        LDR    R3, off_12187208
        BX    R3        



off_12187208    dw ListMenu_SetOnMessage+1 
                    




sub_1218720C:                
        LDR    R3, off_12187210
        BX    R3        



off_12187210    dw ListMenu_SetHotkeyMode+1 
                    




sub_12187214:                
        LDR    R3, off_12187218
        BX    R3        



off_12187218    dw ListMenu_SetCursorToItem+1 
                    




sub_1218721C:                
        LDR    R3, off_12187220
        BX    R3        



off_12187220    dw ListMenu_SetItemStyle+1 
                    




sub_12187224:                
        LDR    R3, off_12187228
        BX    R3        



off_12187228    dw ListMenu_SetItemTextScroll+1 
                    




sub_1218722C:                
                    
        LDR    R3, off_12187230
        BX    R3        



off_12187230    dw GUIObject_SoftKeys_SetAction+1 
                    




sub_12187234:                
        LDR    R3, off_12187238
        BX    R3        



off_12187238    dw GUIObject_Show+1    
                    




sub_1218723C:                
        LDR    R3, off_12187240
        BX    R3



off_12187240    dw int2strID+1 ; 0x1168426C+1    




sub_12187244:                
        PUSH    {R3}
        LDR    R3, off_12187250
        MOV    R12, R3
        POP    {R3}
        BX    R12        



        NOP

off_12187250    dw CreateStringInputVA+1 
                    




sub_12187254:                
                    
        LDR    R3, off_12187258
        BX    R3        



off_12187258    dw fwrite+1        
                    




sub_1218725C:                
                    
        LDR    R3, off_12187260
        BX    R3        



off_12187260    dw FreeBook+1        
                    




sub_12187264:                
                    
        LDR    R3, off_12187268
        BX    R3        



off_12187268    dw ListMenu_GetSelectedItem+1 
                    




sub_1218726C:                
                    



        LDR    R3, off_12187270
        BX    R3        



off_12187270    dw GUIonMessage_GetBook+1 
                    




sub_12187274:                
                    



        LDR    R3, off_12187278
        BX    R3        



off_12187278    dw GUIonMessage_GetMsg+1 
                    




sub_1218727C:                
                    



        LDR    R3, off_12187280
        BX    R3        



off_12187280    dw GUIonMessage_GetCreatedItemIndex+1 
                    




sub_12187284:                
                    



        LDR    R3, off_12187288
        BX    R3        



off_12187288    dw GUIonMessage_SetMenuItemText+1 
                    




sub_1218728C:                
        LDR    R3, off_12187290
        BX    R3        



off_12187290    dw Timer_Set+1        
                    




sub_12187294:                
        PUSH    {R3}
        LDR    R3, off_121872A0
        MOV    R12, R3
        POP    {R3}
        BX    R12        



        NOP

off_121872A0    dw MessageBox+1    
                    




sub_121872A4:                
        LDR    R3, off_121872A8
        BX    R3        



off_121872A8    dw fstat+1        
                    




sub_121872AC:                
                    
        LDR    R3, off_121872B0
        BX    R3        



off_121872B0    dw Display_GetBrightness+1 
                    




sub_121872B4:                
        PUSH    {R3}
        LDR    R3, off_121872C0
        MOV    R12, R3
        POP    {R3}
        BX    R12        



        NOP

off_121872C0    dw snwprintf+1        
                    
aSwilib        db "SwiLib",0          
        db    0
aSettings_brigh    du    "Settings_Brightness_Id",0 
        db    0
        db    0
aBrightnesssett    db "BrightnessSettings_Book",0 
aBr_intervals_s    db "BR_Intervals_Settings",0 
                    
        db    0
        db    0
a1stIntervalEnd    du    "1st    interval end",0
        db    0
        db    0
a2ndIntervalEnd    du    "2nd    interval end",0
        db    0
        db    0
a3rdIntervalEnd    du    "3rd    interval end",0
        db    0
        db    0
aBr_levels_sett    db "BR_Levels_Settings",0
        db    0
aLevelIn1stInte    du    "Level in 1st interval",0
aLevelIn2ndInte    du    "Level in 2nd interval",0
aLevelIn3rdInte    du    "Level in 3rd interval",0
aLevelIn4thInte    du    "Level in 4th interval",0
aLowBatteryLeve    du    "Low    battery    level",0
aAutomaticMode    du    "Automatic mode",0
        db    0
        db    0
aTpaSystemSet_0    du    "/tpa/system/settings/",0
aAutobrightness    du    "AutoBrightness.bin",0
        db    0
        db    0
aIntervals    du    "Intervals",0 
aBrightnessLeve    du    "Brightness levels",0
aEnable        du    "Enable",0
        db    0
        db    0
aBrightnessSett    du    "Brightness settings",0 
aAutomaticModeE    du    "Automatic mode enabled",0 
        db    0
        db    0
aAutomaticModeI    du    "Automatic mode is already enabled",0
aAutomaticD    du    "Automatic :    %d%%",0    
        db    0
        db    0
aManualD    du    "Manual : %d%%",0
aManual        du    "Manual",0    
        db    0
        db    0
aAutomatic_0    du    "Automatic",0
aBrightness_adv    du    "Brightness_AdvancedSettings",0 
        dw 2
        dw 0x4BBF32F0 ; 0x2A2B2306 ; heap
        dw 0x4BBF32F0 ; 0x2A2B2306 ; heap