void COM_CloseAll( void ) { int item; BOOL ok; for( item=0; (item < COM_MAX); item++ ) { ok = COM_Close(item); } }
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); }
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; }
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); }
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); }