Beispiel #1
0
int main(int argc, char** argv) {
	char temp[1024]="";
	char ini_file[]="lightfield.ini";

	ini_gets("Main", "TerrainFile", "", temp, 512, ini_file);
	string terrain_file=ToString(temp);
	ini_gets("Main", "Resources", "", temp, 512, ini_file);
	string resources=ToString(temp);
	ini_gets("Main", "Stage", "", temp, 512, ini_file);
	string stage=ToString(temp);
	ini_gets("Main", "GIA", "", temp, 512, ini_file);
	string gia=ToString(temp);

	float sample_unit_distance=ini_getf("Main", "SampleUnitDistance", 0.75f, ini_file);
	float saturation_multiplier=ini_getf("Main", "SaturationMultiplier", 1.0f, ini_file);
	float lookup_grid_size=ini_getf("Main", "LookupGridSize", 5.0f, ini_file);

	LibGens::initialize();
	LibGens::Error::setLogging(true);

	LibGens::Terrain terrain(terrain_file, resources, stage, gia);
	printf("Done loading Terrain\n");

	// Sample Unit Distance, Saturation Multiplier
	LibGens::VRMap *vrmap=terrain.generateVRMap(sample_unit_distance, saturation_multiplier);
	printf("VR Map setup...\n");

	vrmap->generateLookupGrid(lookup_grid_size, sample_unit_distance);
	printf("Done generating VR Map of %d samples covering %f units of area.\n", vrmap->getSampleList().size(), vrmap->getAABB().size());

	LibGens::LightField lightfield;

	float ambient_color_r=ini_getf("Main", "AmbientColorR", 1.0f, ini_file);
	float ambient_color_g=ini_getf("Main", "AmbientColorG", 1.0f, ini_file);
	float ambient_color_b=ini_getf("Main", "AmbientColorB", 1.0f, ini_file);
	float ambient_color_a=ini_getf("Main", "AmbientColorA", 1.0f, ini_file);
	int sample_min_count=ini_getl("Main", "SampleMinCount", 2, ini_file);
	float sample_blend_distance=ini_getf("Main", "SampleBlendDistance", 8.0f, ini_file);
	float min_octree_cube_size=ini_getf("Main", "MinOctreeCubeSize", 3.0f, ini_file);
	int cpu_threads=ini_getl("Main", "Threads", 1, ini_file);

	// Ambient Color, Sample Min Count, Sample Blend Distance, Min Octree Cube Size
	lightfield.generate(vrmap, LibGens::Color(ambient_color_r, ambient_color_g, ambient_color_b, ambient_color_a), sample_min_count, sample_blend_distance, min_octree_cube_size, cpu_threads);
	printf("Done generating lightfield.\n");
	lightfield.save("light-field.lft");
	printf("Saved lightfield. Press Enter to exit.\n");
    getchar();
    return 0;
}
Beispiel #2
0
/*

new for helicalTurns:

#define FEED_FORWARD                         1.0
#define TURN_RATE_NAV                       30.0
#define TURN_RATE_FBW                       60.0
#define CRUISE_SPEED                        12.0
#define ANGLE_OF_ATTACK_NORMAL              -0.8
#define ANGLE_OF_ATTACK_INVERTED            -7.2
#define ELEVATOR_TRIM_NORMAL                -0.03
#define ELEVATOR_TRIM_INVERTED              -0.67

and we remove the following:
#define AILERON_BOOST                       0.8
#define RUDDER_ELEV_MIX                     0.2
#define ROLL_ELEV_MIX                       0.35

 */
static void load_turns(void)
{
	turns.FeedForward = ini_getf(strTurns, "feedfwd", FEED_FORWARD, strConfigFile);
	DPRINT("turns.FeedForward = %f\r\n", turns.FeedForward);
	turns.TurnRateNav = ini_getf(strTurns, "ratenav", TURN_RATE_NAV, strConfigFile);
	turns.TurnRateFBW = ini_getf(strTurns, "ratefbw", TURN_RATE_FBW, strConfigFile);
	turns.RefSpeed = ini_getf(strTurns, "refspd", REFERENCE_SPEED, strConfigFile);
	turns.AngleOfAttackNormal = ini_getf(strTurns, "aoanorm", ANGLE_OF_ATTACK_NORMAL, strConfigFile);
	turns.AngleOfAttackInverted = ini_getf(strTurns, "aoainvt", ANGLE_OF_ATTACK_INVERTED, strConfigFile);
	turns.ElevatorTrimNormal = ini_getf(strTurns, "elenorm", ELEVATOR_TRIM_NORMAL, strConfigFile);
	turns.ElevatorTrimInverted = ini_getf(strTurns, "eleinvt", ELEVATOR_TRIM_INVERTED, strConfigFile);
}
Beispiel #3
0
// Wejscie:
//      user - login
// Wyjscia
//      btaddr
//      port
//      mobile_id 
//      rssi
int get_user_data(const char **user, char* btaddr, int *port, char *mobile_id,
        float *rssi){
    char section[50]; //nazwa sekcji
    char mobile[50]; //nazwa telefonu dla uzytkownika
    char addr[18];

    int  s; //iterator sekcji
    int  b; // enabled, true/false
    int  p; // port
    float min_rssi; // rssi
    //char user_login[] = *user;

      for (s = 0; ini_getsection(s, section, sizearray(section), inifile_users) > 0; s++) {
        //printf("    [%s] user: %s\n", section, *user);

        if (!strcmp(*user, section)){
            printf("user cfg exists\n");

            b = ini_getbool(section, "enabled", 0, inifile_users);
            if(b == 1){
//pobierz nazwe telfonu przypisanego do uzytkownika
                ini_gets(section, "mobile", "0", mobile, sizearray(mobile), inifile_users);
//pobierrz btaddr i port telefonu o ww nazwie
                ini_gets(mobile, "btaddr", "999", addr, sizearray(addr),
                 inifile_mobiles);
                p = ini_getl(mobile, "port", 999, inifile_mobiles);
//  pobierz wartosc progu RSSI
                min_rssi = ini_getf(mobile, "min_rssi", "-5.0", inifile_users);
                
                printf("user %s enabled with mobile: %s\n", *user, mobile);
                printf("mobile btaddr: %s, port: %d\n", addr, p);
                printf("rssi threshold: %f\n", min_rssi);
                //printf("check_user(): key length: %d, key: %s\n", key_len, k);

//zapisz btaddr, port i klucz do adresow z argumetu
                strcpy(btaddr,addr);
                strcpy(mobile_id, mobile);
                *port = p;
                *rssi = min_rssi;
                return 0;
            }

            //for (k = 0; ini_getkey(section, k, str, sizearray(str), inifile) > 0; k++) {
            //  printf("\t%s\n", str);
            //} /* for */
        }
      } /* for */
return E_INI_FILE;
}
Beispiel #4
0
static void load_gains(void)
{
// Aileron/Roll Control Gains
	gains.RollKP = ini_getf(strRoll, "rollkp", ROLLKP, strConfigFile);
	gains.RollKD = ini_getf(strRoll, "rollkd", ROLLKD, strConfigFile);
	gains.YawKPAileron = ini_getf(strRoll, "yawkp", YAWKP_AILERON, strConfigFile);
	gains.YawKDAileron = ini_getf(strRoll, "yawkd", YAWKD_AILERON, strConfigFile);
//	gains.AileronBoost = ini_getf(strRoll, "boost", AILERON_BOOST, strConfigFile);

// Elevator/Pitch Control Gains
	gains.Pitchgain = ini_getf(strPitch, "gain", PITCHGAIN, strConfigFile);
	gains.PitchKD = ini_getf(strPitch, "pitchkd", PITCHKD, strConfigFile);
//	gains.RudderElevMix = ini_getf(strPitch, "rudder", RUDDER_ELEV_MIX, strConfigFile);
//	gains.RollElevMix = ini_getf(strPitch, "roll", ROLL_ELEV_MIX, strConfigFile);
	gains.ElevatorBoost = ini_getf(strPitch, "boost", ELEVATOR_BOOST, strConfigFile);
	// = ini_getf(strPitch, "invert", INVERTED_NEUTRAL_PITCH, strConfigFile);

// Rudder/Yaw Control Gains
	gains.YawKPRudder = ini_getf(strYaw, "yawkp", YAWKP_RUDDER, strConfigFile);
	gains.YawKDRudder = ini_getf(strYaw, "yawkd", YAWKD_RUDDER, strConfigFile);
	gains.RollKPRudder = ini_getf(strYaw, "rollkp", ROLLKP_RUDDER, strConfigFile);
	gains.RollKDRudder = ini_getf(strYaw, "rollkd", ROLLKD_RUDDER, strConfigFile);
	// = ini_getf(strYaw, "mix", MANUAL_AILERON_RUDDER_MIX, strConfigFile);
	gains.RudderBoost = ini_getf(strYaw, "boost", RUDDER_BOOST, strConfigFile);

// Altitude Hold
	altit.DesiredSpeed = ini_getf(strAltitude, "desired_speed", DESIRED_SPEED, strConfigFile);
	altit.HeightMargin = ini_getf(strAltitude, "height_margin", HEIGHT_MARGIN, strConfigFile);
	altit.HeightTargetMax = ini_getf(strAltitude, "height_max", HEIGHT_TARGET_MAX, strConfigFile);
	altit.HeightTargetMin = ini_getf(strAltitude, "height_min", HEIGHT_TARGET_MIN, strConfigFile);
	altit.AltHoldThrottleMin = ini_getf(strAltitude, "throt_min", ALT_HOLD_THROTTLE_MIN, strConfigFile);
	altit.AltHoldThrottleMax = ini_getf(strAltitude, "throt_max", ALT_HOLD_THROTTLE_MAX, strConfigFile);
	altit.AltHoldPitchMin = ini_getf(strAltitude, "pitch_min", ALT_HOLD_PITCH_MIN, strConfigFile);
	altit.AltHoldPitchMax = ini_getf(strAltitude, "pitch_max", ALT_HOLD_PITCH_MAX, strConfigFile);
	altit.AltHoldPitchHigh = ini_getf(strAltitude, "pitch_high", ALT_HOLD_PITCH_HIGH, strConfigFile);
	// = ini_getl(strAltitude, "margin", HEIGHT_MARGIN, strConfigFile);

// Return To Launch Pitch Down
	gains.RtlPitchDown = ini_getf(strRTL, "pitch", RTL_PITCH_DOWN, strConfigFile);

// Hover
    hover.HoverRollKP = ini_getf(strHover, "rollkp", HOVER_ROLLKP, strConfigFile);
    hover.HoverRollKD = ini_getf(strHover, "rollkd", HOVER_ROLLKD, strConfigFile);
    hover.HoverPitchGain = ini_getf(strHover, "gain", HOVER_PITCHGAIN, strConfigFile);
    hover.HoverPitchKD = ini_getf(strHover, "pitchkd", HOVER_PITCHKD, strConfigFile);
    hover.HoverPitchOffset = ini_getf(strHover, "pitch", HOVER_PITCH_OFFSET, strConfigFile);
    hover.HoverYawKP = ini_getf(strHover, "yawkp", HOVER_YAWKP, strConfigFile);
    hover.HoverYawKD = ini_getf(strHover, "yawkd", HOVER_YAWKD, strConfigFile);
    hover.HoverYawOffset = ini_getf(strHover, "yaw", HOVER_YAW_OFFSET, strConfigFile);
    hover.HoverPitchTowardsWP = ini_getf(strHover, "wp", HOVER_PITCH_TOWARDS_WP, strConfigFile);
    hover.HoverNavMaxPitchRadius = ini_getf(strHover, "radius", HOVER_NAV_MAX_PITCH_RADIUS, strConfigFile);
}
Beispiel #5
0
int main(int argc, char **argv)
{
	char spin[] = "-\\|/", SequenceCount = 'a';
	char Message[65], Data[100], upload_exclude[200], Command[200], Telemetry[100], *Bracket, *Start;
	int Bytes, Sentence_Count, sc = 0;
	double Latitude, Longitude;
	unsigned int Altitude;
	uint8_t opmode, flags1, flags2, old_opmode = 0, old_flags1 = 0, old_flags2 = 0;
	const char *inifile = "gateway.ini"; // FIXME
	float node_lat, node_lon;
	time_t next_beacon;
	bool bmp085, xap;

	/* load configuration */
	ini_gets("node", "id", "", node_id, sizeof(node_id), inifile);
	node_lat = ini_getf("node", "lat", 999, inifile);
	node_lon = ini_getf("node", "lon", 999, inifile);
	bmp085 = ini_getbool("sensors", "bmp085", false, inifile);
	xap = ini_getbool("xap", "enabled", false, inifile);
	ini_gets("upload", "exclude", "", upload_exclude, sizeof(upload_exclude), inifile);
	
	if (strlen(node_id) == 0) {
		puts("Node ID has not been specified");
		exit(1);
	}

	printf("Upload exclude list is \"%s\"\n", upload_exclude);

	if (xap) {
		xapInit();
	}

	if (node_lat < 900 && node_lon < 900) {
		/* put the gateway on the map */
		sprintf(Message,"0aL%f,%f:%s[%s]", node_lat, node_lon, GIT_VER, node_id);
	} else {
		sprintf(Message,"0a:%s[%s]", GIT_VER, node_id);
	}

	UploadPacket(Message,0);
	if (xap) {
		xapSendPacket(Message, 0);
	}

	if (bmp085) {
		next_beacon = time(NULL) + 10;
		printf("Initialising BMP085\n");
		bmp085_Calibration();
	}

	printf("Initialising RFM69\n");

	setupRFM69();
	
	printf("Starting main loop ...\n");

	Sentence_Count = 0;

	while (1)
	{
		if (rfm69_available())
		{
			Bytes = rfmM69_recv(Message, sizeof(Message));
			printf ("%s Data available - %d bytes\n", Now(), Bytes);
			printf ("rx: %s|%d\n", Message,RFM69_lastRssi());

			if (Bytes > 0)
			{
				if (!excluded(Message, upload_exclude)) {
					// UKHASNet upload
					UploadPacket(Message, RFM69_lastRssi());
				}

				if (xap) {
					// xAP broadcast
					xapSendPacket(Message, RFM69_lastRssi());
				}
#if 0
				// Habitat upload
				// 3dL51.95023,-2.54445,155[DA1]
				if (strstr(Message, "DA1"))
				{
					if (Start = strchr(Message, 'L'))
					{
						// DA1,2,19:35:37,51.95023,-2.54445,160*05%0A

						if (sscanf(Start+1, "%lf,%lf,%u[", &Latitude, &Longitude, &Altitude))
						{
							printf("Altitude = %u\n", Altitude);
							sprintf(Telemetry, "%s,%d,%s,%lf,%lf,%u", "DA1", ++Sentence_Count, Now(), Latitude, Longitude, Altitude);
							sprintf(Command, "wget -O habitat.txt \"http://habitat.habhub.org/transition/payload_telemetry\" --post-data \"callsign=DA0&string=\\$\\$%s*%s%s&string_type=ascii&metadata={}\"",	Telemetry, Checksum(Telemetry), "\%0A");
							printf("%s\n", Command);
							system(Command);
						}
					}
				}
#endif
			}
		}
		else
		{