Beispiel #1
0
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_) );
	}
}
Beispiel #2
0
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);
}
Beispiel #3
0
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_) );
	}
}
Beispiel #4
0
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;
		}
	}
}
Beispiel #5
0
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 ;
}
Beispiel #6
0
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);
	}
}