DWORD WINAPI ThreadProc(LPVOID params) { const int BUFSIZE = 4096; std::unique_ptr<server_config> pcfg(static_cast<server_config*>(params)); int recvlen, fd; // # bytes received, our socket char buf[BUFSIZE]; // receive buffer if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { // create a UDP socket dbg_print("cannot create server socket: error: %d", WSAGetLastError()); FOR_EACH(auto& cb, pcfg->server_cbs()) cb(StartupFailed); return 1; }
max21100::max21100() : i2cbus(new i2c("/dev/i2c-1", addr)) { // initialize i2c bus power_cfg pcfg(i2cbus); pcfg.power(power_cfg::ENABLE); }
int main(int argc, char *argv[]) { if( argc < 3 ) { printf( "%s", useMsg ); return 0; } char * t; if(NULL!=(t = getenv("TERM_ROOT"))){ term_root = strdup(t); }else{ fprintf( stderr, "Переменная TERM_ROOT не установлена, будет использован текущий путь.\n" ); } strcpy( exeFileName, argv[0] ); strcpy( inputFileName, argv[argc-1] ); strcpy( cfgName, argv[argc-2] ); TFiltrParams filtrParams; TCfg *cfg = 0; TAutoPtr<TCfg> pcfg(cfg); try { readCfg( cfg, filtrParams ); parseCommandString( argc, argv, filtrParams ); } catch (TException e) { fprintf( stderr, "%s\n", e.what() ); exit(-1); } logfile = new CLog("filtr.exe"); if(useStdOut) { //logfile.addAppender(new ConsoleLogAppender(logLevel,"%s | %e | %m")); //logfile->addAppender(new CConsoleLogAppender(logLevel, "%e | %m")); logfile->addAppender(new CConsoleLogAppender(logLevel, LOG_FORMAT)); } if(useStdErr) { //logfile.addAppender(new EConsoleLogAppender(logLevel,"%s | %e | %m")); //logfile->addAppender(new EConsoleLogAppender(logLevel, "%e | %m")); logfile->addAppender(new EConsoleLogAppender(logLevel, LOG_FORMAT)); } if(!logFileName.empty()) { try { //logfile->addAppender(new CFileLogAppender(logLevel, logFileName, append, "%s | %e | %m")); logfile->addAppender(new CFileLogAppender(logLevel, logFileName, append, LOG_FORMAT)); } catch(string e) { fprintf(stderr,"%s\n",e.c_str()); exit(1); } } logfile->info( string("filtr.exe - ") + inputFileName ); { // Для того, чтобы был вызван деструктор logfile TAutoPtr<CLog> aLogFile( logfile ); logfile->info( "чтение входных файлов" ); construct_file_names(); if( read_and_verify_Blk0s(filtrParams) != 0 ) { return 1; } int length = in_blk0.totalFrameNum * in_blk0.totalPixNum; if( readData(filtrParams, length ) != 0 ) { return 1; } readFiltrParams( *cfg, filtrParams, in4_blk0.b0.satId ); // для автоматического удаления данных по окончанию работы TAutoPtr<short> a_in_data(in_data); TAutoPtr<short> a_in2_data(in2_data); TAutoPtr<short> a_in3_data(in3_data); TAutoPtr<short> a_in4_data(in4_data); TAutoPtr<short> a_in5_data(in5_data); // для результата out_data = new short[length]; TAutoPtr<short> a_out_data(out_data); out_blk0 = in_blk0; int *filtr_stat = new int[N_MASK_VALUE]; TAutoPtr<int> a_filtr_stat(filtr_stat); for( int i = 0; i < N_MASK_VALUE; i++ ) { filtr_stat[i] = 0; } logfile->info( "фильтрация облачности" ); try { // собственно фильтрация int res = TFiltr::filtr_processing( filtrParams, in_blk0, in_data, in2_blk0, in2_data, in3_blk0, in3_data, in4_blk0, in4_data, in5_blk0, in5_data, out_blk0, out_data, filtr_stat); if( res != 0 ) { return 1; } // фильтрация завершена } catch (TRequestExc& e) { logfile->error( e.text() ); return 1; } if( filtrParams.stat_flag ) { printStats( filtr_stat ); } logfile->info( "коррекция нулевого блока" ); if( correctData( out_data, out_blk0 ) != 0 ) { return 1; } logfile->info( "запись результатов фильтрации" ); if( writeFileNOAA( outputFileName, out_blk0, out_data, out_blk0.totalFrameNum * out_blk0.totalPixNum ) != 0 ) { return 1; } logfile->info( "" ); logfile->info( "работа программы завершена успешно !" ); } // Для того, чтобы был вызван деструктор logfile return 0; }