diff options
Diffstat (limited to 'asm/r_loop.asm')
-rw-r--r-- | asm/r_loop.asm | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/asm/r_loop.asm b/asm/r_loop.asm new file mode 100644 index 0000000..308a9f4 --- /dev/null +++ b/asm/r_loop.asm @@ -0,0 +1,85 @@ +/* ************************************************************************************ */ +/* */ +/* File : r_loop.asm /_________/ */ +/* Author : Joe | */ +/* Date : 04/2020 | */ +/* Info : The main loop | */ +/* / | */ +/* \ / */ +/* \_____/ */ +/* */ +/* ************************************************************************************ */ + +;; jo_r_loop(speak (0-1), *argv[]) +;; ------------------------------- + +section .text + extern sleep + extern jo_f_percent + extern jo_f_status + extern jo_n_speak + extern jo_n_notify + extern jo_r_cpyhead + global jo_r_loop + +jo_r_loop: + push rbp + push rbx + mov rbx, rsi + mov ebp, edi + jmp bigloop + +bigloop: + call jo_f_status ; check the status + cmp rax, 0xfe ; in case we couldn't read + je err + cmp rax, 0x3 + je sleepalot + call jo_f_percent ; check the capacity + cmp rax, 0xfe ; in case we couldn't read + je err + cmp rax, 0xf + jge sleepalot + mov rdi, rax + call jo_r_cpyhead + mov rdi, rax + mov rsi, n_body ; notification body + mov rdx, 0x3 ; ciritcal notification + mov rcx, 0x3a98 ; 15000ms notification timeout + call jo_n_notify ; jo_n_notify(head: rdi, body: rsi, + ; urgency: rdx, timeout: rcx) + +speak: + cmp ebp, 0x1 + jne sleepabit + mov rdi, [rbx + 0x8 * 0x2] + call jo_n_speak + +sleepabit: + mov rdi, 0x14 + call sleep ; sleep 20 seconds before next check/notification + jmp bigloop + +sleepalot: + mov rdi, 0xf0 + call sleep ; sleep 240s (4m) if it's fine + jmp bigloop + +return: + xor rax, rax + retq + +err: + mov rdi, 0x2 ; stderr + lea rsi, [rel errmsg] + mov rdx, errlen + mov rax, 0x4 + syscall ; write error message on stderr + xor rax, rax + retq + +section .data + n_body: db "Please plug in computer", 0x0 + fmt: db "%s", 0xa, 0x0 + errmsg: db "Failed to read battery informations", 0xa, 0x0 + errlen: equ $ - errmsg |