int RS232_Setup(unsigned long nBaudRate, unsigned long nDataBit, unsigned long nParity, unsigned long nStopBit)
{
	int ret = -1;
	COM_PARAM param;

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

	param.nBaudRate = nBaudRate;
	param.nDataBits = nDataBit;
	param.nParity = nParity;
	param.nStopBits = nStopBit;
	param.nFlowCtrl = 0;
	
	ret = COM_Setup(g_rs232_com, param);
	if (ret < 0)
	{
		return -1;
	}

	return 0;
}
Esempio n. 2
0
int     COM_Open( int comX, long baud, void (*SetDCB)( DCB *dcb ) )
{
int     item;
HANDLE  comH;

//  Find a free handle...
    if( (item=COM_Find(INVALID_HANDLE_VALUE)) == COM_INVALID )
    {
        COM_errorf("COM_Open(COM%d) No free handles.\n",comX);
        return(COM_INVALID);
    }


//  Open COM port...
    comH = CreateFile(STR_stringf("\\\\.\\COM%d",comX),    // File: comX
		      GENERIC_READ | GENERIC_WRITE,        // Access: Input / Output.
		      0,                                   // Shared: Exclusive Access.
		      NULL,                                // Security: None
		      OPEN_EXISTING,                       // Create: Open existing.
		      0,                                   // Flags: Non-overlapped (synchronous).
		      NULL);                               // Template: None. 

//  Did we open it?
    if( comH == INVALID_HANDLE_VALUE )
    {
        COM_errorf("COM_Open(COM%d) CreateFile() Failed (%s).\n",comX,COM_Error());
        return(COM_INVALID);
    }

    COM_Item[item].comX = comX;
    COM_Item[item].comH = comH;
    COM_Item[item].timer = new TIMER(STR_stringf("COM%d",comX));

//  Do we want to set up COM port now?
    if( (baud != COM_BAUD_NULL) || (SetDCB != NULL) )
    {
        if( !COM_Setup(item,baud,SetDCB) )
        {
            COM_errorf("COM_Open(COM%d) Cannot setup COM port.\n",comX);
        }
    }

    return(item);
}
Esempio n. 3
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);
}