示例#1
0
static uint8_t model_save_xml (char *name, float x, float y, int8_t button, float data, uint8_t action) {
	reset_buttons();
	FILE *fr;
	char tmp_str[128];
	sprintf(tmp_str, "mkdir -p %s/models", get_datadirectory());
	system(tmp_str);
	sprintf(tmp_str, "%s/models/%s", get_datadirectory(), name);
	fr = fopen(tmp_str, "wb");
	if (fr != 0) {
		fprintf(fr, "<rcflow>\n");
		fprintf(fr, " <name>%s</name>\n", ModelData[ModelActive].name);
		fprintf(fr, " <image>%s</image>\n", ModelData[ModelActive].image);
		fprintf(fr, " <type>%s</type>\n", dronetypes[ModelData[ModelActive].dronetype]);
		fprintf(fr, " <telemetry>\n");
		fprintf(fr, "  <type>%s</type>\n", teletypes[ModelData[ModelActive].teletype]);
		fprintf(fr, "  <device>%s</device>\n", ModelData[ModelActive].telemetry_port);
		fprintf(fr, "  <baud>%i</baud>\n", ModelData[ModelActive].telemetry_baud);
		if (strstr(ModelData[ModelActive].telemetry_port, "rfcomm") > 0) {
			fprintf(fr, "  <bluetooth_addr>%s</bluetooth_addr>\n", ModelData[ModelActive].telebtaddr);
			fprintf(fr, "  <bluetooth_pin>%s</bluetooth_pin>\n", ModelData[ModelActive].telebtpin);
		}
		fprintf(fr, " </telemetry>\n");
		mavlink_xml_save(ModelActive, fr);
		mwi21_xml_save(ModelActive, fr);
		openpilot_xml_save(fr);
		fprintf(fr, "</rcflow>\n");
		fclose(fr);
	}
	return 0;
}
示例#2
0
static uint8_t model_load (char *name, float x, float y, int8_t button, float data, uint8_t action) {
	reset_buttons();
	char tmp_str[128];
	sprintf(tmp_str, "%s/models", get_datadirectory());
	filesystem_set_dir(tmp_str);
	filesystem_set_callback(model_load_xml);
	filesystem_reset_filter();
	filesystem_add_filter(".xml\0");
	filesystem_set_mode(setup.view_mode);
	return 0;
}
示例#3
0
void mavlink_param_xml_meta_load (void) {
	char filename[1024];
	sprintf(filename, "%s/mavlink/ParameterMetaData-%s.xml", get_datadirectory(), teletypes[ModelData.teletype]);
	if (file_exists(filename) != 0) {
		mavlink_parseDoc(filename);
		return;
	}
	sprintf(filename, "%s/mavlink/ParameterMetaData-%s.xml", BASE_DIR, teletypes[ModelData.teletype]);
	if (file_exists(filename) != 0) {
		mavlink_parseDoc(filename);
		return;
	}
}
示例#4
0
文件: draw.c 项目: auuuux/multigcs
int16_t get_altitude (float lat, float lon) {
	char file[100];
	int8_t n = 0;
	int8_t alt_num = -1;
	int8_t old_num = -1;
	uint32_t atime_min = time(0);
	int16_t px = 0;
	int16_t py = 0;
	int16_t lat_m = (int)lat;
	int16_t lon_m = (int)lon;
	int8_t flag = 0;
	char LON[128];
	char LAT[128];
	if (lat_m < 0) {
		sprintf(LAT, "S%02i", lat_m * -1 + 1);
	} else {
		sprintf(LAT, "N%02i", lat_m);
	}
	if (lon_m < 0) {
		sprintf(LON, "W%03i", lon_m * -1 + 1);
	} else {
		sprintf(LON, "E%03i", lon_m);
	}
	sprintf(file, "%s/MAPS/%s%s.hgt", get_datadirectory(), LAT, LON);
	for (n = 0; n < 8; n++) {
		if (strcmp(AltCache[n].name, file) == 0) {
			alt_num = n;
		} else if (AltCache[n].atime < atime_min) {
			old_num = n;
			atime_min = AltCache[n].atime;
		}
	}
	if (alt_num == -1) {
		for (n = 0; n < MAX_ALTCACHE; n++) {
			if (AltCache[n].name[0] == 0) {
				alt_num = n;
				break;
			}
		}
		if (old_num == -1) {
			old_num = 0;
		}
		if (alt_num == -1) {
			alt_num = old_num;
			SDL_Log("remove srtm %s from cache %i (%i)\n", AltCache[alt_num].name, old_num, AltCache[alt_num].atime);
//			Delete;
			AltCache[alt_num].name[0] = 0;
		}
		if (alt_num != -1) {
//			SDL_Log("loading srtm %s in to alt-cache %i %i\n", file, alt_num, AltCache[alt_num].atime);
			FILE *fr;
			fr = fopen(file, "rb");
			if (fr != 0) {
				strncpy(AltCache[alt_num].name, file, 1023);
				AltCache[alt_num].atime = time(0);
				for (py = 0; py < 1201; py++) {
					for (px = 0; px < 1201; px++) {
						uint8_t val1 = 0;
						uint8_t val2 = 0;
						int16_t val = 0;
						fread(&val1, 1, 1, fr);
						fread(&val2, 1, 1, fr);
						val = (val1<<8) + val2;
						if (lat_m < 0) {
							if (lon_m < 0) {
								AltCache[alt_num].data[py][1200 - px] = val;
							} else {
								AltCache[alt_num].data[py][px] = val;
							}
						} else {
							if (lon_m < 0) {
								AltCache[alt_num].data[1200 - py][1200 - px] = val;
							} else {
								AltCache[alt_num].data[1200 - py][px] = val;
							}
						}
					}
				}
				fclose(fr);
			} else {
				flag = 1;
			}
		}
	}

	if (flag == 0) {
		AltCache[alt_num].atime = time(0);
//		SDL_Log("# using Alt-Cache: %s\n", AltCache[alt_num].name);
		// geting all field-points
		float fy = 0.0;
		float fx = 0.0;
		int16_t y1 = 0;
		int16_t x1 = 0;
		int16_t y2 = 0;
		int16_t x2 = 0;
		if (lat_m < 0) {
			lat_m *= -1;
			lat *= -1.0;
		}
		if (lon_m < 0) {
			lon_m *= -1;
			lon *= -1.0;
		}
		y1 = (int)((lat - (float)lat_m) * 1201.0);
		y2 = y1 + 1;
		fy = ((lat - (float)lat_m) * 1201.0);
		x1 = (int)((lon - (float)lon_m) * 1201.0);
		x2 = x1 + 1;
		fx = ((lon - (float)lon_m) * 1201.0);

#ifndef SDLGL
		return AltCache[alt_num].data[y1][x1];
#else
		// geting alt-values of field-points
		int16_t vx1a = AltCache[alt_num].data[y1][x1];
		int16_t vx2a = AltCache[alt_num].data[y1][x2];
		int16_t vx1b = AltCache[alt_num].data[y2][x1];
		int16_t vx2b = AltCache[alt_num].data[y2][x2];
		if (vx1a == -32768) {
			uint16_t tn = 0;
			for (tn = 0; tn < 10; tn++) {
				vx1a = AltCache[alt_num].data[y1 + tn][x1 + tn];
				if (vx1a != -32768) {
					break;
				}
				vx1a = AltCache[alt_num].data[y1 - tn][x1 - tn];
				if (vx1a != -32768) {
					break;
				}
			}
		}
		if (vx2a == -32768) {
			uint16_t tn = 0;
			for (tn = 0; tn < 10; tn++) {
				vx2a = AltCache[alt_num].data[y1 + tn][x2 + tn];
				if (vx2a != -32768) {
					break;
				}
				vx2a = AltCache[alt_num].data[y1 - tn][x2 - tn];
				if (vx2a != -32768) {
					break;
				}
			}
		}
		if (vx1b == -32768) {
			uint16_t tn = 0;
			for (tn = 0; tn < 10; tn++) {
				vx1b = AltCache[alt_num].data[y2 + tn][x1 + tn];
				if (vx1b != -32768) {
					break;
				}
				vx1b = AltCache[alt_num].data[y2 - tn][x1 - tn];
				if (vx1b != -32768) {
					break;
				}
			}
		}
		if (vx2b == -32768) {
			uint16_t tn = 0;
			for (tn = 0; tn < 10; tn++) {
				vx2b = AltCache[alt_num].data[y2 + tn][x2 + tn];
				if (vx2b != -32768) {
					break;
				}
				vx2b = AltCache[alt_num].data[y2 - tn][x2 - tn];
				if (vx2b != -32768) {
					break;
				}
			}
		}
		// geting alt-values of avarages (x1,y1->x2,y1 and x1,y2->x2,y2)
		int16_t vxa = (float)(vx2a - vx1a) * (fx - (float)x1) + (float)vx1a;
		int16_t vxb = (float)(vx2b - vx1b) * (fx - (float)x1) + (float)vx1b;
		// geting alt-values avarages (xy1->xy2)
		int16_t alt = (vxb - vxa) * (fy - (float)y1) + vxa;
		return alt;
#endif
	}
	return 0;
}