aboutsummaryrefslogtreecommitdiffstats
path: root/asm/jo_r_loop.asm
blob: e779c4077442898424009b2474dcd5bd410d0d05 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                                                      ;;
;;  File      : jo_r_loop.asm                                             /_________/   ;;
;;  Author    : Joe                                                             |       ;;
;;  Date      : 04/2020                                                         |       ;;
;;  Info      : The main loop                                                   |       ;;
;;                                                                      /       |       ;;
;;                                                                      \       /       ;;
;;                                                                       \_____/        ;;
;;                                                                                      ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; jo_r_loop(speak (0-1), *argv[])
;; -------------------------------

section .text
	extern sleep
	extern sprintf
	extern jo_f_percent
	extern jo_f_status
	extern jo_n_speak
	extern jo_n_notify
	global jo_r_loop

jo_r_loop:
	push	rbp
	push	rbx
	mov		rbx, rsi
	mov		ebp, edi
	jmp		bigloop
	

bigloop:
	call	jo_f_status
	cmp		rax, 0x3
	je		sleepalot
	call	jo_f_percent
	cmp		rax, 0xf			; 15%
	jge		sleepalot
	xor		rdi, rdi
	mov		rsi, n_head
	mov		rdx, rax
	call	sprintf
	mov		rdi, rsi			; notification head sprintfed
	mov		rsi, n_body			; notification body
	mov		rdx, 0x3			; ciritcal notification
	mov		rcx, 0x3a98			; 15000ms notification timeout
	call	jo_n_notify			; jo_n_notify(rdi, rsi, rdx, rcx)

speak1:
	cmp		ebp, 1
	jne		sleepabit
	mov		rdi, [rbx + 0x8 * 0x2]
	call	jo_n_speak

sleepabit:
	mov		rdi, 0x14			; 20s
	call	sleep
	jmp		bigloop

sleepalot:
	mov		rdi, 0xf0			; 240s
	call	sleep
	jmp		bigloop

return:
	xor		rax, rax
	retq

section .data
	n_head:	db "Low battery: %d", 0x0
	n_body:	db "Please plug in computer", 0x0