/* Function: rt_ExtModeShutdown ================================================ * Abstract: * Called when target program terminates to enable cleanup of external * mode. */ PUBLIC boolean_T rt_ExtModeShutdown(int_T numSampTimes) { int i; boolean_T error = EXT_NO_ERROR; for (i=0; i<NUM_UPINFOS; i++) { ExtModeShutdown(i, numSampTimes); } if (commInitialized) { error = SendPktToHost(EXT_MODEL_SHUTDOWN, 0, NULL); if (error != EXT_NO_ERROR) { fprintf(stderr, "\nError sending EXT_MODEL_SHUTDOWN packet to host.\n"); } commInitialized = FALSE; } if (connected) { connected = FALSE; modelStatus = TARGET_STATUS_WAITING_TO_START; } ExtShutDown(extUD); ExtUserDataDestroy(extUD); rtExtModeTestingRemoveBatMarker(); return(error); } /* end rt_ExtModeShutdown */
/* Function: ExtParseArgsAndInitUD ============================================= * Abstract: * Pass remaining arguments (main program should have NULL'ed out any args * that it processed) to external mode. * * The actual, transport-specific parsing routine (implemented in * ext_svr_transport.c) MUST NULL out all entries of argv that it processes. * The main program depends on this in order to determine if any unhandled * command line options were specified (i.e., if the main program detects * any non-null fields after the parse, it throws an error). * * Returns an error string on failure, NULL on success. * * NOTES: * The external mode UserData is created here so that the specified command- * line options can be stored. */ PUBLIC const char_T *ExtParseArgsAndInitUD(const int_T argc, const char_T *argv[]) { const char_T *error = NULL; /* * Create the user data. */ extUD = ExtUserDataCreate(); if (extUD == NULL) { error = "Could not create external mode user data. Out of memory.\n"; goto EXIT_POINT; } /* * Parse the transport-specific args. */ error = ExtProcessArgs(extUD,argc,argv); if (error != NULL) goto EXIT_POINT; EXIT_POINT: if (error != NULL) { ExtUserDataDestroy(extUD); extUD = NULL; } return(error); } /* end ExtParseArgsAndInitUD */
/* Function: rt_ExtModeShutdown ================================================ * Abstract: * Called when target program terminates to enable cleanup of external * mode. */ PUBLIC boolean_T rt_ExtModeShutdown(SimStruct *S) { boolean_T error = EXT_NO_ERROR; /* * Make sure buffers are flushed so that the final points get to * host (this is important for the case of the target reaching tfinal * while data is uploading is in progress). */ UploadPrepareForFinalFlush(); rt_UploadServerWork(S); UploadLogInfoTerm(); if (msgBuf != NULL) free(msgBuf); if (connected) { error = SendMsgToHost(EXT_MODEL_SHUTDOWN, 0, NULL); if (error != EXT_NO_ERROR) { fprintf(stderr, "\nError sending 'EXT_MODEL_SHUTDOWN' message to host.\n"); } connected = FALSE; commInitialized = FALSE; modelStatus = TARGET_STATUS_WAITING_TO_START; } ExtShutDown(extUD); ExtUserDataDestroy(extUD); /* For internal Mathworks testing only */ #ifdef TMW_GRT_TESTING # ifdef WIN32 (void)system("del /f batmarker"); # else (void)system("rm -f batmarker"); # endif #endif return(error); } /* end rt_ExtModeShutdown */