; version 2.0
def_name1: db 'Nezname miesto 1'
def_name2: db 'Nezname miesto 2'
turn_gsm_on: call wait4it_f
db 0,0,2,0
setb lift
tgo_again0: call switch_out
call puts_nf
db 'turning on...',0
jbc lift,tgo_again0
call wait4it_f
db 0,0,2,0
call switch_gsm
clr pwr_key
call tmr_int_f
db 0,0,2,0
tgo_lp1: call do_them
call read_serial
clr a
call tmr_zro
jnc tgo_lp1
setb pwr_key
call tmr_int_f
db 0,0,20,0
tgo_lp2: call do_them
call read_serial
jnc tgo_skip1
call find_nf
db 'RDY',0
;anl c,vdd_ext
jc tgo_ret
tgo_skip1: clr a
call tmr_zro
jnc tgo_lp2
tgo_lp2_5: call do_them
call get_chr
jnc tgo_skip2
setb lift
tgo_again1: call switch_out
call put_chr
jbc lift,tgo_again1
jmp tgo_lp2_5
tgo_skip2: call switch_gsm
mov wait_cnt,#1
tgo_lp3: call puts_nf
db 'AT+IPR=9600',cr,0 ; set baud rate to 9600
call wait_for_ok
jnc tgo_lp3
mov wait_cnt,#1
tgo_lp4: call puts_nf
db 'AT+CFUN=1',cr,0 ; make sure power stays on
call wait_for_ok
jnc tgo_lp4
jmp turn_gsm_on
tgo_ret: setb lift
tgo_again2: call switch_out
call puts_nf
db 'success',0
jbc lift,tgo_again2
ret
wait_for_ok: mov a,#5
call do_events
db 'OK',0
dw wfo_done
db 'ERROR',0
dw wfo_again
db 0
djnz wait_cnt,wfo_again
jmp os_init
wfo_again: call cool_down
clr c
ret
wfo_done: call cool_down
setb c
ret
read_name_str: call switch_gsm
mov wait_cnt,#5
rns_again1: call cool_down
call puts_nf
db 'AT+CPBR=',0
call insert_one
call puts_nf
db '8',cr,0
mov a,#5
call do_events
db '129,"',0
dw rns_skip1
db '145,"',0
dw rns_skip1
db 'ERROR',0
dw rns_messed1
db 0
rns_messed1: djnz wait_cnt,rns_again1
sjmp rns_default
rns_skip1: call get_name_str
mov tmp1,a
mov tmp2,#8
mov tmp3,#'"'
call read_string
jnc rns_messed1
mov wait_cnt,#5
rns_again2: call cool_down
call puts_nf
db 'AT+CPBR=',0
call insert_one
call puts_nf
db '9',cr,0
mov a,#5
call do_events
db '129,"',0
dw rns_skip2
db '145,"',0
dw rns_skip2
db 'ERROR',0
dw rns_messed2
db 0
rns_messed2: djnz wait_cnt,rns_again2
rns_default: call get_def_name
call get_name_str
mov r0,a
mov r1,#16
jmp copy_from_code
rns_skip2: call get_name_str
add a,#8
mov tmp1,a
mov tmp2,#8
mov tmp3,#'"'
call read_string
jnc rns_messed2
ret
read_signal: call switch_gsm
call puts_nf
db 'AT+CSQ',cr,0
mov a,#5
call do_events
db '+CSQ: ##,',0
dw rsi_skip1
db '+CSQ: #,',0
dw rsi_skip2
db 0
ret
rsi_skip1: dec r0
mov a,@r0
clr c
subb a,#'0'
mov r1,a
dec r0
mov a,@r0
clr c
subb a,#'0'
mov b,#10
mul ab
add a,r1
mov signal,a
ret
rsi_skip2: dec r0
mov a,@r0
clr c
subb a,#'0'
mov signal,a
ret
; tmp='1','2',...
get_number: call switch_gsm
mov wait_cnt,#5
gn_again: call cool_down
call puts_nf
db 'AT+CPBR=',0
call insert_one
mov a,tmp1
call put_chr
mov a,#cr
call put_chr
mov a,#5
call do_events
db '+CPBR: #,"',0
dw gn_skip2
db 'ERROR',0
dw gn_messed
db 0
gn_messed: djnz wait_cnt,gn_again
clr c
ret
gn_skip2: push tmp1
mov tmp1,#number_str
mov tmp2,#16
mov tmp3,#'"'
call read_string
pop tmp1
jnc gn_messed
setb c
ret
; tmp1='1','2',...
store_number: call switch_gsm
call puts_nf
db 'AT+CPBW=',0
call insert_one
mov a,tmp1
call put_chr
mov a,#','
call put_chr
mov a,#'"'
call put_chr
mov r0,#number_str
mov r1,#16
call puts_no_spaces
call puts_nf
db '",,"num',0
mov a,tmp1
call put_chr
mov a,#'"'
call put_chr
mov a,#cr
call put_chr
mov a,#5
call do_events
db 'OK',0
dw sn_yes
db 'ERROR',0
dw sn_no
db 0
sn_no: clr c
ret
sn_yes: setb c
ret
; tmp1='1','2',...
read_sms: call switch_gsm
mov wait_cnt,#5
rs_again: call cool_down
call puts_nf
db 'AT+CMGR=',0
mov a,tmp1
call put_chr
mov a,#cr
call put_chr
mov a,#5
call do_events
db 'Status',0
dw rs_skip2
db 'STATUS',0
dw rs_skip2
db 'Reset',0
dw rs_skip3
db 'RESET',0
dw rs_skip3
db 'ERROR',0
dw rs_ret
db 'OK',0
dw rs_cont
db 0
rs_messed: djnz wait_cnt,rs_again
rs_cont: mov wait_cnt,#5
rs_again2: call cool_down
call puts_nf
db 'AT+CMGR=',0
mov a,tmp1
call put_chr
mov a,#cr
call put_chr
mov a,#5
call do_events
db '"+',0
dw rs_skip1
db 'ERROR',0
dw rs_ret
db 'OK',0
dw rs_ret
db 0
rs_cont2: djnz wait_cnt,rs_again2
rs_ret2: ret
rs_skip1: push tmp1
mov tmp1,#number_str
mov tmp2,#16
mov tmp3,#'"'
call read_string
pop tmp1
jc rs_ret2
jmp rs_cont2
rs_skip2: setb send_status
jmp rs_cont
rs_skip3: setb send_reset
jmp rs_cont
; tmp1='1','2',...
delete_sms: call switch_gsm
mov wait_cnt,#5
ds_again: call cool_down
call puts_nf
db 'AT+CMGD=',0
mov a,tmp1
call put_chr
mov a,#cr
call put_chr
mov a,#5
call do_events
db 'OK',0
dw ds_done
db 'ERROR',0
dw ds_error
db 0
ds_error: djnz wait_cnt,ds_again
ds_done: ret
store_name: call switch_gsm
call cool_down
call puts_nf
db 'AT+CPBW=',0
call insert_one
call puts_nf
db '8,"0000111222",,"',0
call get_name_str
mov r0,a
mov r1,#8
call puts
mov a,#'"'
call put_chr
mov a,#cr
call put_chr
mov a,#5
call do_events
db 'OK',0
dw sn_next
db 'ERROR',0
dw sn_no
db 0
clr c
ret
sn_next: call cool_down
call puts_nf
db 'AT+CPBW=',0
call insert_one
call puts_nf
db '9,"0000111222",,"',0
call get_name_str
add a,#8
mov r0,a
mov r1,#8
call puts
mov a,#'"'
call put_chr
mov a,#cr
call put_chr
mov a,#5
call do_events
db 'OK',0
dw sn_yes
db 'ERROR',0
dw sn_no
db 0
clr c
ret
sms_new_line: mov a,#cr
call put_chr
call wait4it_f
db t_wait,0,1,0
ret
send_sms_number:
call puts_nf
db 'AT+CMGS="',0
jnb send_plus,ssn_skip1
mov a,#'+'
call put_chr
ssn_skip1: mov r0,#number_str
mov r1,#16
call puts_no_spaces
mov a,#'"'
call put_chr
call sms_new_line
call get_name_str
mov r0,a
mov r1,#16
call puts
jmp sms_new_line
send_sms1: clr send_plus
mov tmp1,#'1'
call get_number
jc sst_entry
ret
send_status_sms:
setb send_plus
call lift_on
jnc sst_done
sst_entry: mov wait_cnt,#5
sst_lp1: call switch_out
call puts_nf
db 'stat',0
mov r0,#srl_fifo0
call fifo_clear
mov tmp1,#status_str
mov tmp2,#32
mov tmp3,#esc
call read_string
jc sst_skip1
djnz wait_cnt,sst_lp1
mov wait_cnt,#3
sst_lp2: call switch_gsm
call cool_down
call send_sms_number
call puts_nf
db 'Vytah neodpoveda.',0
call sms_new_line
mov a,#ctrl_z
call put_chr
mov a,#30
call do_events
db '+CMGS:',0
dw sst_done
db 'ERROR',0
dw sst_drain2
db 0
mov a,#esc
call put_chr
sst_drain2: djnz wait_cnt,sst_lp2
sst_done: ret
sst_skip1: mov wait_cnt,#3
sst_lp3: call switch_gsm
call cool_down
call send_sms_number
mov r0,#status_str
mov r1,#16
call puts
call sms_new_line
mov r0,#status_str+16
mov r1,#16
call puts
call sms_new_line
mov a,#ctrl_z
call put_chr
mov a,#30
call do_events
db '+CMGS:',0
dw sst_done
db 'ERROR',0
dw sst_drain3
db 0
mov a,#esc
call put_chr
sst_drain3: djnz wait_cnt,sst_lp3
ret
if 0
send_sms2: clr send_plus
mov tmp1,#'1'
call get_number
jnc ss2_done
mov wait_cnt,#3
ss2_lp: call send_sms_number
call puts_nf
db 'Vytah je znovu OK.',0
call sms_new_line
mov a,#ctrl_z
call put_chr
mov a,#30
call do_events
db '+CMGS:',0
dw ss2_done
db 'ERROR',0
dw ss2_drain
db 0
mov a,#esc
call put_chr
ss2_drain: djnz wait_cnt,ss2_lp
ss2_done: ret
endif
send_sms3: clr send_plus
mov tmp1,#'1'
call get_number
jnc ss3_done
mov wait_cnt,#3
ss3_lp: call send_sms_number
call puts_nf
db 'Nap. baterky nizke.',0
call sms_new_line
mov a,#ctrl_z
call put_chr
mov a,#30
call do_events
db '+CMGS:',0
dw ss3_done
db 'ERROR',0
dw ss3_drain
db 0
mov a,#esc
call put_chr
ss3_drain: djnz wait_cnt,ss3_lp
ss3_done: ret
send_sms4: clr send_plus
mov tmp1,#'1'
call get_number
jnc ss4_done
mov wait_cnt,#3
ss4_lp: call send_sms_number
call puts_nf
db 'Nap. baterky OK.',0
call sms_new_line
mov a,#ctrl_z
call put_chr
mov a,#30
call do_events
db '+CMGS:',0
dw ss4_done
db 'ERROR',0
dw ss4_drain
db 0
mov a,#esc
call put_chr
ss4_drain: djnz wait_cnt,ss4_lp
ss4_done: ret
hang_up: call cool_down
call puts_nf
db 'ATH',cr,0
call wait4it_f
db t_wait,0,1,0
call puts_nf
db 'ATH',cr,0
call wait4it_f
db t_wait,0,1,0
jmp cool_down