;
;**********************************************************
;
;   advanced feature server
;   =======================
;
;   5200 hcn <==> front office systeme
;
;------------------------------------------------------------
; mod0: edv      mod1: telz   mod2: bdi   mod3: opa
;> R<cr>  int
;> O<cr>  int
;> SZ..<cr>----------x
;> SF..<cr>-----------------------x
;> SH..<cr>-----------------------x
;> rest --------------------------------------x
;
;
;  5200hcn v 1.0     modul 0  for edv
;  -----------------------------------
;
; using: str 0 for work
;
;  string 0:
;
;          1111111111122222222233333333334444444444555555555566666666667
;01234567890123456789012345678901234567890123456789012345678901234567890
;EDV     0<0dddddddddddddddddddddddddddddddddddddddddd
;           -data for rd and wr
;          --sender kennung bei intermodultransfer
;        ----eigene modulnummer
;------------filename
;
	setbaud 1,1200,8,n,1  ;Modul Default
        mode_reco
        ;
        ;if "TABS" send without wait for request (timeed send)
        ;if "noTABS" wait for request
        ;if "EMTY" send all reco if "TABS"
        ;if "noEMTY" do not send reco with charges = 0 if "TABS"
        ;
        movd    "noTABSnoEMTY/n",s0,200
        ;if "TABS" send reco automatical with to 2sec
        ; if "EMTY" send also reco with no pulses
        setc    0,1          ;error conter for to-send
        movd    "EDV          ",s0,0
        movd    "0<0",s0,8
        movd    " READY for WORK with EDV/l/n",s0,11
        out     s0,0,c4         ;to sv-mon
        out     s0,200,c4
        sett    200
reset_0:
        movd    "0<0 /n",s0,8
        setl    8,1     ;modul ready
        wait    rx_sign,tf_sign ;warte auf anforederung or timeout
        ;
        ; auforderung:
        ; set channl is busy
        setl    8,2
        case    rx_sign,timeout
        rds     s0,11           ;get data
        jz      reset_0
        ;
        ; test intern commands
	sett   200
	setc   0,1
	;
        compd   "R/n",s0,11
        jnz     test_old
        buffrd  s0,11
        buffst                   ;get reco from buffer and send back
        wrs     s0,11,255
        jnz     write_error
	compd	"E/n",s0,11
	jz	reset_0
	out	s0,0,c4
	jmp	reset_0
        ;
test_old:
        compd   "O/n",s0,11
        jnz     test_for_bdi
        buffold s0,11
        wrs     s0,11,255
        jnz     write_error
	compd	"E/n",s0,11
	jz	reset_0
	out	s0,0,c4
        jmp     reset_0
        ;
        ; test bdi commands
        ;
test_for_bdi:
        compd   "SF",s0,11
        jnz     test1_for_bdi
wait_1:
        out     s0,0,c4
        out     s0,10,c2        ;send to bdi
        jnz     wait_1
        out     s0,0,c4
        wrs     s0,11,255           ;answer back
        jnz     write_error
        jmp     reset_0
        ;
test1_for_bdi:
        compd   "SH",s0,11
        jnz     test_cnd
wait_2:
        out     s0,0,c4
        out     s0,10,c2
        jnz     wait_2
        out     s0,0,c4
        wrs     s0,11,255
        jnz     write_error
        jmp     reset_0
        ;
test_cnd:
        compd   "N ",s0,11
        jnz     test_telz
        jmp     wait_2
        ;
        ; test telfonzellen modul command
        ;
test_telz:
        compd   "SZ",s0,11
        jnz     opi_cmd
wait_3:
        out     s0,10,c1        ;telz on channl 1
        jnz     wait_3
        wrs     s0,11,255
        jnz     write_error
        jmp     reset_0
        ;
        ; commands for opi
        ;
opi_cmd:
wait_4:
        out     s0,0,c4
        out     s0,10,c3        ;send to opi
        jnz     wait_4
        out     s0,0,c4
        wrs     s0,11,255
        jnz     write_error
        jmp     reset_0
        ;
;**********************************************************
;
; on timeout write "channel_timeout" to sv-mon
; alle 60 sec
;
timeout:
        compd   "TABS",s0,200
	jz	send_tabs
        sett    200
        decc    0
        jnz     reset_0
        setc    0,3             ;timeout run at 20sec
        movd    " CHANNEL_TIMEOUT/n",s0,11
        out     s0,0,c4
        jmp     reset_0
;
write_error:
        movd    " TIMEOUT ERROR ON WRITE TO CHANNEL_0 (xoff)/n",s0,11
        out     s0,0,c4
        jmp     reset_0
        ;
;**********************************************************
; send tabs
;
send_tabs:
        sett    20
        ;
        buffrd  s0,11
        buffst                   ;get reco from buffer and send back
        compd   "E/n",s0,11
        jz      reset_0
        compd   "EMTY",s0,204
        jz      no_emty
        compd   " ",s0,36
        jnz     no_emty
        ;
        jmp     reset_0
        ;
no_emty:
        wrs     s0,11,255
        jnz     write_error
        wrchar  ^J
        jmp     reset_0
;
end
