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; }
/* 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); }
// 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; }
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); }
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 {