Пример #1
0
void    COM_CloseAll( void )
{
int     item;
BOOL    ok;

    for( item=0; (item < COM_MAX); item++ )
    {
        ok = COM_Close(item);
    }
}
Пример #2
0
void    FOB_Close( int ID )
{
BOOL    ok;

    // Multiple ports, so re-enter function for each port...
    if( ID == FOB_PORT_ALL )
    {
        for( ID=FOB_BirdsInFlock()-1; (ID >= 0); ID-- )
        {
            FOB_Close(ID);
        }

        return;
    }

    // Check if API started and handle ID is okay...
    if( !FOB_Check(ID) )
    {
        return;
    }

    // First, make sure FOB is stopped (not flying)...
    FOB_Stop(ID);

    // Put flock to sleep...
    ok = FOB_CmdSleep(ID);
    STR_printf(ok,FOB_debugf,FOB_errorf,"FOB_Close(ID=%d) Sleep %s.\n",ID,STR_OkFailed(ok));

     // Reset FOB (TRUE = no wait)...
    ok = FOB_ResetFOB(ID,TRUE);
    STR_printf(ok,FOB_debugf,FOB_errorf,"FOB_Close(ID=%d) Reset %s.\n",ID,STR_OkFailed(ok));

    // Close FOB RS232 port...
    ok = COM_Close(FOB_Port[ID].comH);
    STR_printf(ok,FOB_debugf,FOB_errorf,"FOB_Close(ID=%d) Close COM%d %s.\n",ID,FOB_Port[ID].comX,STR_OkFailed(ok));

    // Delete objects...
    delete FOB_Port[ID].session;
    delete FOB_Port[ID].requestrate;
    delete FOB_Port[ID].looprate;
    delete FOB_Port[ID].framerate;
    delete FOB_Port[ID].frametime;
    delete FOB_Port[ID].framelast;
    delete FOB_Port[ID].framewait;

    // Clear the handle...
    FOB_Init(ID);
}
Пример #3
0
int RS232_Close()
{
	int ret = -1;

	if (g_rs232_com < 0)
	{
		return -1;
	}

	ret = COM_Close(g_rs232_com);
	if (ret < 0)
	{
		return -1;
	}

	g_rs232_com = -1;

	return 0;
}
Пример #4
0
BOOL    COM_Close( int item )
{
BOOL    ok;

    if( !COM_Check(item) )
    {
        return(FALSE);
    }

    ok = COM_Close(COM_Item[item].comH);

    if( COM_Item[item].timer != NULL )
    {
        delete COM_Item[item].timer;
        COM_Item[item].timer = NULL;
    }

    COM_Init(item);

    return(ok);
}
Пример #5
0
int     FOB_Open( int comX, int birdsinflock, int birdsonport, BYTE addr, long baud, double freq, WORD scale, BYTE &datamode, BYTE &groupmode, BYTE dataformat[], BYTE hemisphere[] )
{
int     ID=FOB_PORT_INVALID;
int     step,retry,bird;
BOOL    ok,fatal,multiport,multibird;
int     comH=COM_INVALID;
BYTE    code;

    // Check that FOB API is running...
    if( !FOB_API_check() )
    {
        return(FOB_PORT_INVALID);
    }

    FOB_debugf("FOB_Open(COM%d,birds=%d/%d,base=0x%02X,%ld baud,...)\n",comX,birdsonport,birdsinflock,addr,baud);

    // Go through each step of FOB_Open() and continue only if successful...
    for( ok=TRUE,retry=0,step=FOB_OPEN_PARAMETERS; ((step <= FOB_OPEN_DONE) && ok); )
    {
        switch( step )
        {
            case FOB_OPEN_PARAMETERS :           // Set defaults and then check parameters...
               ok = FOB_OpenParameters(birdsinflock,birdsonport,datamode,groupmode,multiport,multibird);
               break;

            case FOB_OPEN_HANDLEGET :            // Find a free handle ID...
               if( (ID=FOB_Free()) == FOB_PORT_INVALID )
               {
                   FOB_errorf("FOB_Open(...) No free handles.\n");
                   ok = FALSE;
                   break;
               }

               FOB_debugf("ID=%d\n",ID);
               FOB_Init(ID);                     // Clear the handle item...
               break;

            case FOB_OPEN_COMOPEN :              // Open RS232 communications port... 
               ok = ((comH=COM_Open(comX)) != COM_INVALID);
               STR_printf(ok,FOB_debugf,FOB_errorf,"FOB_Open(...) Open COM%d %s.\n",comX,STR_OkFailed(ok));
               break;

            case FOB_OPEN_COMSETUP :             // Set FOB RS232 characteristics...
               ok = COM_Setup(comH,baud,FOB_DCB);
               STR_printf(ok,FOB_debugf,FOB_errorf,"FOB_Open(...) Setup COM%d %s.\n",comX,STR_OkFailed(ok));
               break;

            case FOB_OPEN_HANDLESET :            // Setup FOB handle structure with information...
               FOB_Port[ID].used = TRUE;
               FOB_Port[ID].started = FALSE;
               FOB_Port[ID].comH = comH;
               FOB_Port[ID].comX = comX;
               FOB_Port[ID].baudrate = baud;
               FOB_Port[ID].birdsinflock = birdsinflock;
               FOB_Port[ID].birdsonport = birdsonport;
               FOB_Port[ID].scale = scale;

               if( addr == FOB_ADDR_NULL )
               {
                   addr = 0x01;
               }

               for( bird=0; (bird < birdsonport); bird++ )
               {
                   FOB_Port[ID].dataformat[bird] = dataformat[bird];
                   FOB_Port[ID].hemisphere[bird] = hemisphere[bird];
                   FOB_Port[ID].address[bird] = addr++;
               }
               break;

            case FOB_OPEN_COMRESET :             // Reset COM buffer...
                ok = FOB_ResetCOM(ID);
                break;

            case FOB_OPEN_FOBRESET :             // Reset FOB hardware...
               if( retry > 0 )
               {
                   ok = FOB_ResetFOB(ID); 
               }
               break;

            case FOB_OPEN_FOBCONFIG :            // Set FOB configuration...
               ok = FOB_CmdConfig(ID);
               break;

            case FOB_OPEN_FOBERROR :             // Check FOB error status...
break;
               if( !(ok=FOB_GetErrorCode(ID,FOB_BIRD_NULL,code,fatal)) )
               {
                   break;
               }

               STR_printf(fatal,FOB_errorf,FOB_debugf,"FOB_Open(...) %s.\n",FOB_Error(code));

               if( fatal )
               {
                   ok = FALSE;
               }
               break;

            case FOB_OPEN_FOBSTATUS :            // Check bird status...
               if( !(ok=FOB_BirdStatusOK(ID)) )
               {
                   FOB_errorf("FOB_Open(...) Status Error.\n");
               }
ok = TRUE;
               break;

            case FOB_OPEN_OBJECTS :
               FOB_Port[ID].session = new TIMER(STR_stringf("FOB[%d] Session",ID));
               FOB_Port[ID].requestrate = new TIMER_Frequency(STR_stringf("FOB[%d] RequestRate",ID));
               FOB_Port[ID].looprate = new TIMER_Frequency(STR_stringf("FOB[%d] LoopRate",ID));
               FOB_Port[ID].framerate = new TIMER_Frequency(STR_stringf("FOB[%d] FrameRate",ID));
               FOB_Port[ID].frametime = new TIMER_Interval(STR_stringf("FOB[%d] FrameTime",ID));
               FOB_Port[ID].framelast = new TIMER(STR_stringf("FOB[%d] FrameLast",ID));
               FOB_Port[ID].framewait = new DATAPROC(STR_stringf("FOB[%d] FrameWait",ID));
               break;

            case FOB_OPEN_DONE :
               FOB_Use(ID);                      // Set global variable for default ID...
               break;
        }

        STR_printf(ok,FOB_debugf,FOB_errorf,"FOB_Open(...) %s %s.\n",FOB_OpenStep[step],STR_OkFailed(ok));

        if( !ok && FOB_Hardware[step] )          // FOB hardware failed, try FOB reset...
        {
            if( ++retry <= 1 )
            {
                step = FOB_OPEN_FOBRESET;
                ok = TRUE;
            }
        }
        else
        {
            step++;
        }
    }
    
    if( !ok )                          // FOB open failed, so clean up...
    {
        COM_Close(comH);               // Close COM handle.
        FOB_Init(ID);                  // Clear FOB handle.
        ID = FOB_PORT_INVALID;
    }

    return(ID);
}