bool Session( void ) { unsigned req; bool want_return; for( ;; ) { In[0].len = GetPacket(); In[0].ptr = GetPacketBuffPtr(); _DBG(("Session got request ")); req = TRP_REQUEST( In ); TRP_REQUEST( In ) &= ~0x80; if( req & 0x80 ) { req &= ~0x80; want_return = FALSE; } else { want_return = TRUE; } switch( req ) { case REQ_PROG_KILL: _DBG(("REQ_KILL_PROG\n")); AccTrap( TRUE ); return( TRUE ); default: _DBG(("AccTrap\n")); AccTrap( want_return ); _DBG(("Done AccTrap\n")); break; } } }
bool Session( void ) { unsigned req; bool want_return; Out[0].len = sizeof( RWBuff ); Out[0].ptr = RWBuff; for( ;; ) { #ifdef __WINDOWS__ NothingToDo(); #endif In[0].len = GetPacket(); In[0].ptr = GetPacketBuffPtr(); In_Mx_Ptr = &In[0]; Out_Mx_Ptr = &Out[0]; In_Mx_Num = 1; Out_Mx_Num = 1; req = TRP_REQUEST( In ); TRP_REQUEST( In ) &= ~0x80; if( req & 0x80 ) { req &= ~0x80; want_return = false; } else { want_return = true; } switch( req ) { case REQ_CONNECT: if( !AccConnect() ) return( true ); break; case REQ_DISCONNECT: AccTrap( false ); return( true ); case REQ_SUSPEND: AccTrap( false ); RemoteDisco(); for(;;) { while( !RemoteConnect() ) ; if( !Session() ) break; RemoteDisco(); } break; case REQ_RESUME: AccTrap( false ); return( false ); case REQ_PROG_LOAD: AccLoadProg(); break; default: AccTrap( want_return ); break; } } }
static void AccLoadProg( void ) { char *data; data = GetInPtr( sizeof( prog_load_req ) ); AccTrap( TRUE ); }