//
//**********************************************************
//
//   advanced feature server
//   =======================
//
//   DHS3 AHL <==> front office systeme
//
//------------------------------------------------------------
// Commands from the EDV
//      R<cr>  Request data
//      O<cr>  Old data
//      SFnnnn<cr>      SetFull extension nnnn (check in)
//      SHnnnn<cr>      SetHalf extension nnnn (ckeck out)
// Data send from the modul:
//      Cnnnnddd.....<cr>       Callrecord
//      E<cr>                   Empty buffer
//      OK<cr>                  Previous command was ok
//      ERR_TO<cr>              Error timeout
//      ERR_CMD<cr>             Error command
//      ERR_EXT<cr>             Error extension
//
// using: str 0 for work
//
//  string 0:
//
//*********************************************************
//
#include        "ahl_def.h"
//
//          1111111111122222222233333333334444444444555555555566666666667
//01234567890123456789012345678901234567890123456789012345678901234567890
//EDVAHL  0<0dddddddddddddddddddddddddddddddddddddddddd
//           -data for rd and wr
//          --sender kennung bei intermodultransfer
//        ----eigene modulnummer
//------------filename
//
        setbaud 1,1200,8,n,1  //Modul Default
        mode_reco
//
        setc    0,1          //error conter for to-send
        movd    "EDVAHL          ",s0,0
        movd    "0<0",s0,8
        movd    " READY for WORK with EDV/l/n",s0,11
        out     s0,0,c4         //to sv-mon
        sett    200
reset_0:
        movd    "0<0 /n",s0,8
        setl    8,1                     //modul ready
        wait    im_sign,rx_sign,tf_sign,ans_sign         //warte auf anforederung or timeout
//
// auforderung:
// set channl is busy
//
        setl    8,2
//***********************************************
// first test for sv_command
//***********************************************
        case    im_sign,test_for_rx
        in      s0,11
        ansd    "M0 ok!/n"
        jmp     do_input
//
test_for_rx:
        case    rx_sign,timeout
        rds     s0,11                   //get data
        jz      reset_0
//
// test intern commands
//
do_input:
        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_for_bdi:
        writeb  s0,11,converter_in
        sendsig ans_sign,modul_converter
        jmp     reset_0
//
//**********************************************************
//
// on timeout write "channel_timeout" to sv-mon
// alle 60 sec
//
timeout:
        case    tf_sign,test_ans_sign
        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
//
//*********************************************************
//
test_ans_sign:
        case    ans_sign,reset_0
        readb   s0,11,converter_out
        jz      reset_0
        out     s0,0,c4
        wrs     s0,11,80
        jmp     reset_0
//
//**********************************************************
zzz:
//
end
