aboutsummaryrefslogtreecommitdiffstats
path: root/asm/r_loop.asm
diff options
context:
space:
mode:
Diffstat (limited to 'asm/r_loop.asm')
-rw-r--r--asm/r_loop.asm85
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