// // Created by xemon on 21.06.23. // #include "GonetsAlmanac.h" #include #include #include "time.h" #define TEST_ALMANAC_FILE "curalm(2).dat" //#define TEST_ALMANAC_FILE "../CURALM.DAT" //double rangeAngle=90-89.65081259507197; //угол конуса double rangeAngle = 40; double rangeDistance = 5117; //дистанция до спутника const RANGEMIN = 5; size_t load_from_file(tGonetsAlmanac *alms) { size_t countAlmanac = 0; // подгружаем альманахи FILE *f = fopen(TEST_ALMANAC_FILE, "r+"); fseek(f, 11, SEEK_CUR); tGonetsAlmanac alm; // сделали декодирование (достаточно просто считать их в запакованную структуру) while (!feof(f)) { size_t read = (fread(&alm, sizeof(tGonetsAlmanac), 1, f)); ////важно чтоб весь альманах целеком был подгружен!!!! if (read) { *alms = alm; ++alms; countAlmanac++; } } fclose(f); return countAlmanac; } void timeCheck(tGonetsAlmanac *alms, int countAlmanac, time_t now) { //вводим начальные данные struct tm ts; // time(&now); time_t interval_begin = now - 1 * 60; time_t interval_end = now + 1 * 60; // now += 3 * 3600; // ts = *localtime(&now); //текущее время // vector3 vectorAlmanac; //переменная для записи координат спутника uint8_t inRange[100]; // массив со спутниками внутри конуса int countRange = 0; vector2 selfPosition = {52.232f, 41.2322f};//твоя позиция countRange = GonetsAlmanac_GetInRangeForInterval( // countRange = GonetsAlmanac_GetInRangeForMoment( alms, countAlmanac, selfPosition, 4000, interval_begin, interval_end, // now, inRange ); printf("in range (%i): ", countRange); for (uint8_t *nka = inRange, *end = inRange + countRange; nka < end; ++nka) { printf("%02i ", *nka); } printf("\n"); } int main() { tGonetsAlmanac alms[50]; int countAlmanac = load_from_file(alms); printf("alms (%i): ", countAlmanac); for (tGonetsAlmanac *alm = alms, *end = alms + countAlmanac; alm < end; ++alm) { printf("%02i ", alm->NKA); } time_t now, end; now = 1687536080; // now = 1686730934; end = now + 3600 * 120; printf("\n"); if (GonetsAlmanac_IsValid(alms, now)) { printf("valid\n "); } else { printf("expired\n "); } for (time_t timestamp = now; timestamp < end; timestamp += 60) { timeCheck(alms, countAlmanac, timestamp); } return 0; }