void MainFrame::OnGpsTracker(wxCommandEvent& event) { if ( worked(GpsTracker_worker_) ) { lets_finish(GpsTracker_worker_); } else { cancel_finish(GpsTracker_worker_); boost::thread( boost::bind( &MainFrame::GpsTrackerProc, this, GpsTracker_worker_) ); } }
void MainFrame::UpdateButtons() { int anchor = Anchor_; wxMenuBar *MainMenu = GetMenuBar(); /* GpsTracker */ bool gps_enabled = worked(GpsTracker_worker_); MainMenu->Check(ID_GPSTRACKER, gps_enabled); MainMenu->Enable(ID_GPSANCHOR, gps_enabled); MainMenu->Check(ID_GPSANCHOR, gps_enabled && anchor == GpsAnchor); MainToolBar->ToggleTool(ID_GPSTRACKER, gps_enabled); MainToolBar->EnableTool(ID_GPSANCHOR, gps_enabled); MainToolBar->ToggleTool(ID_GPSANCHOR, gps_enabled && anchor == GpsAnchor); /* WiFiScan */ bool wifi_enabled = worked(WiFiScan_worker_); MainMenu->Check(ID_WIFISCAN, wifi_enabled); MainMenu->Enable(ID_WIFIANCHOR, wifi_enabled); MainMenu->Check(ID_WIFIANCHOR, wifi_enabled && anchor == WiFiAnchor); MainToolBar->ToggleTool(ID_WIFISCAN, wifi_enabled); MainToolBar->EnableTool(ID_WIFIANCHOR, wifi_enabled); MainToolBar->ToggleTool(ID_WIFIANCHOR, wifi_enabled && anchor == WiFiAnchor); }
void MainFrame::OnWiFiScan(wxCommandEvent& event) { unique_lock<mutex> lock(WiFi_mutex_); if ( worked(WiFiScan_worker_) ) { lets_finish(WiFiScan_worker_); } else { cancel_finish(WiFiScan_worker_); boost::thread( boost::bind( &MainFrame::WiFiScanProc, this, WiFiScan_worker_) ); } }
void MainFrame::StatusHandler(std::wstring &str) { my::scope sc(L"StatusHandler()"); str += L" | GPS: "; if ( !worked(GpsTracker_worker_) ) str += L"отключен"; else { Gps_params_st gps; copy(Gps_params_, &gps, Gps_mutex_); if (!gps.ok) str+= L"ошибка"; else { wchar_t buf[400]; int lat_sign, lon_sign; int lat_d, lon_d; int lat_m, lon_m; double lat_s, lon_s; DDToDMS( gps.pt, &lat_sign, &lat_d, &lat_m, &lat_s, &lon_sign, &lon_d, &lon_m, &lon_s ); __swprintf(buf, sizeof(buf)/sizeof(*buf), L"%s%d°%02d\'%05.2f\" %s%d°%02d\'%05.2f\"" L" %0.2fкм/ч %0.1f° %0.1fм %0.1fкм (%ls)", lat_sign < 0 ? L"-" : L"", lat_d, lat_m, lat_s, lon_sign < 0 ? L"-" : L"", lon_d, lon_m, lon_s, gps.speed, gps.azimuth, gps.altitude, gps.distance, gps.test_buf.c_str()); str += buf; } } }
physMem_t::physMem_t( unsigned long physAddr, unsigned long size, unsigned long mode ) : fd_( open( "/dev/mem", mode ) ) , map_(0) , mem_(0) , mapSize_(0) { if( !worked() ) return ; unsigned mapMode = (O_RDONLY == mode) ? PROT_READ : PROT_READ | PROT_WRITE ; unsigned startPage = physAddr >> MAP_SHIFT ; unsigned lastPage = (physAddr+size-1) >> MAP_SHIFT ; unsigned mapSize = (lastPage-startPage+1)<<MAP_SHIFT ; map_ = mmap(0, mapSize, mapMode, MAP_SHARED, fd_, physAddr & ~MAP_MASK ); if( MAP_FAILED == map_ ){ map_ = 0 ; return ; } mem_ = (unsigned char *)map_ + (physAddr & MAP_MASK); mapSize_ = mapSize ; }
void MainFrame::OnMapPaint(double z, const cartographer::size &screen_size) { /*- int fields = PQnfields(pg_res_); for (i = 0; i < fields; i++) printf("%-15s ", PQfname(res, i)); printf("\n\n"); -*/ #if 0 { cartographer::coord pt; for (pt.lat = -88.0; pt.lat < 88; pt.lat += 1.0) for (pt.lon = -180.0; pt.lon < 180.0; pt.lon += 1.0) { glColor4d(1.0, 1.0, 1.0, 1.0); glBindTexture(GL_TEXTURE_2D, 2); glBegin(GL_QUADS); glTexCoord2d(0.0, 0.0); glVertex3d(-100, -100, 0); glTexCoord2d(1.0, 0.0); glVertex3d(-200, -100, 0); glTexCoord2d(1.0, 1.0); glVertex3d(-200, -200, 0); glTexCoord2d(0.0, 1.0); glVertex3d(-100, -200, 0); glEnd(); //Cartographer->CoordToScreen(pt); //Cartographer->DrawImage(green_mark_id_, pt); } } #endif if (z > 10.0) { unique_lock<mutex> lock(WiFi_mutex_, boost::try_to_lock); if (lock.owns_lock() && WiFi_data_) { int min_power = WiFi_relative_mode_ ? WiFi_min_power_ : WiFi_min_power_abs_; int max_power = WiFi_relative_mode_ ? WiFi_max_power_ : WiFi_max_power_abs_; int delta_power = max_power - min_power; if (delta_power == 0) { delta_power = 1; --min_power; } for (int i = 0; i < PQntuples(WiFi_data_); i++) { //char *mac = PQgetvalue(WiFi_data_, i, 0); char *power_s = PQgetvalue(WiFi_data_, i, 3); char *lat_s = PQgetvalue(WiFi_data_, i, 5); char *lon_s = PQgetvalue(WiFi_data_, i, 6); int power; cartographer::coord pt; sscanf(power_s, "%d", &power); sscanf(lat_s, "%lf", &pt.lat); sscanf(lon_s, "%lf", &pt.lon); double power_k = (power - min_power) / (double)delta_power; if (power_k < 0.0) power_k = 0.0; if (power_k > 1.0) power_k = 1.0; if (power_k < 0.5) { Cartographer->DrawImage(green_mark_id_, pt); Cartographer->DrawImage(yellow_mark_id_, pt, 1.0, 2.0 * power_k); } else { Cartographer->DrawImage(yellow_mark_id_, pt); Cartographer->DrawImage(red_mark_id_, pt, 1.0, 2.0 * (power_k - 0.5)); } /*- double green_k = power_k < 0.5 ? 1.0 : 2.0 * (1.0 - power_k); double red_k = power_k < 0.5 ? 2.0 * power_k : 1.0; Cartographer->DrawSimpleCircle( Cartographer->CoordToScreen(pt), 5.0, 2.0, cartographer::color(red_k, green_k, 0.0), cartographer::color(red_k, green_k, 0.0, 0.3)); -*/ /*- pos.y += 5.0; std::wstring str = my::str::to_wstring(mac); cartographer::size sz = Cartographer->DrawText(small_font_, str, pos, cartographer::color(1.0, 1.0, 0.0), cartographer::ratio(0.5, 0.0), cartographer::ratio(1.0, 1.0)); pos.y += sz.height; std::wstringstream out; out << L'(' << power << L')'; Cartographer->DrawText(small_font_, out.str(), pos, cartographer::color(1.0, 1.0, 0.0), cartographer::ratio(0.5, 0.0), cartographer::ratio(1.0, 1.0)); -*/ } } } /* Gps */ Gps_params_st gps; copy(Gps_params_, &gps, Gps_mutex_); if (gps.ok && worked(GpsTracker_worker_)) { Cartographer->DrawImage(gps_tracker_id_, gps.pt, 1.0, 1.0, gps.azimuth); } }