11 #define VERSION "0.85"
52 string *zuluTime,
string *packetOutName);
54 #define SWAP_2(x) ( (((x) & 0xff) << 8) | ((unsigned short)(x) >> 8) )
56 int main (
int argc,
char* argv[])
58 cout <<
"l0gen_hawkeye" <<
VERSION <<
" ("
59 << __DATE__ <<
" " << __TIME__ <<
")" << endl;
63 "l0gen_hawkeye_new input_telemetry_filename" << endl;
69 framefile.open( argv[1], ios::binary );
76 string packetOutname=
"TBD";
77 string zuluStartTime, zuluStopTime;
80 double startHWKTime=0.0;
81 double stopHWKTime=0.0;
88 uint32_t prevExposureID=999999999;
100 uint8_t **packet =
new uint8_t*;
111 while (framePtr == 2046 || framePtr == 2047) {
112 framefile.read( (
char *) frame, 892);
113 framePtr = (frame[4] % 8)*256 + frame[5];
119 int prevFrameCnt = frame[2];
140 int exposureCount = 0;
144 int result_getSHpacket =
getSHpacket( &framefile, frame, framePtr, packet, packetLength,
145 prevFrameCnt, frameDrop);
148 if (result_getSHpacket==1){
149 cout<<
"exposureID="<<exposureID<<endl;
150 cout <<
"end of exposure" << endl;
155 tempName.assign(
"tempL0_");
156 tempName.append(to_string(tempCnt));
162 framefile.read( (
char *) frame, 892);
165 framePtr = (frame[4] % 8) * 256 + frame[5];
166 while (framePtr == 2046 || framePtr == 2047) {
167 framefile.read( (
char *) frame, 892);
168 framePtr = (frame[4] % 8) * 256 + frame[5];
170 prevFrameCnt = frame[2];
172 prevExposureID = 999999999;
175 if (frameDrop == -1)
continue;
177 long long int pos = framefile.tellg();
179 if ( framefile.eof() ||
pos == -1)
break;
182 if (frameDrop == 1) {
187 if ((frame[4] % 8)*256 + frame[5] == 2046) {
197 if ((*packet)[0]==7 && (*packet)[1]==255) {
198 cout<<
"exposureID="<<exposureID<<endl;
199 cout <<
"end of exposure" << endl;
204 tempName.assign(
"tempL0_");
205 tempName.append(to_string(tempCnt));
211 framefile.read( (
char *) frame, 892);
214 framePtr = (frame[4] % 8) * 256 + frame[5];
215 while (framePtr == 2046 || framePtr == 2047) {
216 framefile.read( (
char *) frame, 892);
217 framePtr = (frame[4] % 8) * 256 + frame[5];
219 prevFrameCnt = frame[2];
221 prevExposureID = 999999999;
229 if ((*packet)[7] == 253 && (*packet)[8] == 3) {
235 ul = (uint32_t) (*packet)[15] << 24;
236 ul += (uint32_t) (*packet)[16] << 16;
237 ul += (uint32_t) (*packet)[17] << 8;
240 cout<<
"read exposureID="<<exposureID<<endl;
244 ll = (uint64_t) (*packet)[26] << 40;
245 ll += (uint64_t) (*packet)[27] << 32;
246 ll += (uint64_t) (*packet)[28] << 24;
247 ll += (uint64_t) (*packet)[29] << 16;
248 ll += (uint64_t) (*packet)[30] << 8;
250 ll = (ll & 0x0FFFFFFFFFF0) >> 4;
258 if (exposureID<310000000 && exposureID>180000000) {
260 if (prevExposureID != 999999999 && prevExposureID != exposureID) frameDrop = 3;
262 prevExposureID = exposureID;
270 if ((*packet)[7] == 253 && (*packet)[8] == 2) {
272 memcpy(&row, &(*packet)[20], 2);
317 if ((*packet)[7] == 254) {
324 size_t strpos = gpsName.find(
".tlm");
325 gpsName = gpsName.substr(0, strpos);
326 gpsName.append(
".gps");
332 gpsOut.write( (
char *) &(*packet)[0], 161);
338 }
else if ((*packet)[7] == 255) {
356 memcpy(&i32, &(*packet)[9], 4);
357 double tepoch = (
double) __builtin_bswap32(i32) - (1104105600+16);
360 memcpy(&i32, &(*packet)[13], 4);
361 sec += ((
double) __builtin_bswap32(i32)) / 4294967296.0;
362 memcpy(&i16, &(*packet)[17], 2);
368 if ( frameDrop == 3) {
370 cout<<
"exposureID="<<exposureID<<endl;
371 cout <<
"Close image file" << endl;
375 tempName.assign(
"tempL0_");
376 tempName.append(to_string(tempCnt));
388 if ((*packet)[7] != 0) {
389 packetOut.write( (
char *) (*packet), packetLength);
397 for (
int i=0;
i<tempCnt;
i++) {
399 tempName.assign(
"tempL0_");
400 tempName.append(to_string(
i));
406 tempFile.open( tempName.c_str(), ios::binary );
409 int fsize = tempFile.tellg();
410 tempFile.seekg( 0, std::ios::end);
411 fsize = (
int) tempFile.tellg() - fsize;
413 if ( fsize == 4503 || fsize <= 10000000) {
414 remove( tempName.c_str());
418 tempFile.seekg( 0, std::ios::beg);
420 while (!tempFile.eof()) {
421 tempFile.read( (
char *) sndpus, 9);
422 int datalen = sndpus[4]*256 + sndpus[5] - 2;
423 data =
new uint8_t[datalen];
424 tempFile.read( (
char *)
data, datalen);
426 if (sndpus[7] == 253 && sndpus[8] == 3) {
433 ul = (uint32_t)
data[15-9] << 24;
434 ul += (uint32_t)
data[16-9] << 16;
435 ul += (uint32_t)
data[17-9] << 8;
441 ll = (uint64_t)
data[26-9] << 40;
442 ll += (uint64_t)
data[27-9] << 32;
443 ll += (uint64_t)
data[28-9] << 24;
444 ll += (uint64_t)
data[29-9] << 16;
445 ll += (uint64_t)
data[30-9] << 8;
447 ll = (ll & 0x0FFFFFFFFFF0) >> 4;
450 ul = (uint32_t)
data[36-9] << 24;
451 ul += (uint32_t)
data[37-9] << 16;
452 ul += (uint32_t)
data[38-9] << 8;
454 ul = (ul >> 4) & 0xFFFFFF;
458 tlm_time = ll * 0.001;
459 tlm_time -= (53*24*3600 + 14788.224);
461 startHWKTime = tlm_time;
463 tlm_time = (ll + ul) * 0.001;
464 tlm_time -= (53*24*3600 + 14788.224);
466 stopHWKTime = tlm_time;
476 size_t strpos = prePend.find(
".dec");
477 prePend = prePend.substr(0, strpos);
480 std::ostringstream ss;
482 ss << setw(4) << setfill(
'0') << exposureCount;
483 prePend.append(ss.str().c_str());
486 prePend.append(to_string(exposureID));
490 outName.assign(prePend);
491 outName.append(packetOutname);
493 rename( tempName.c_str(), outName.c_str());
495 outName.append(
".txt");
498 textOut <<
"TlmFile=" <<
basename( argv[1]) << endl;
499 textOut <<
"StartTime=" << zuluStartTime.c_str() << endl;
500 textOut <<
"StopTime =" << zuluStopTime.c_str() << endl;
501 textOut <<
"ExposureID=" << to_string(exposureID).c_str() << endl;
502 textOut <<
"StartHWKTime=" << to_string(startHWKTime).c_str() << endl;
503 textOut <<
"StopHWKTime =" << to_string(stopHWKTime).c_str() << endl;
515 string *zuluTime,
string *packetOutName) {
518 int16_t mon, idm, hr,
min;
530 ss << setw(4) << to_string(
iyr) <<
"-";
531 ss << setw(2) << setfill(
'0') << mon <<
"-";
532 ss << setw(2) << setfill(
'0') << idm <<
"T";
534 min = (
int) ((sec - hr*3600) / 60);
535 sec = sec - hr*3600 -
min*60;
536 ss << setw(2) << setfill(
'0') << hr <<
":";
537 ss << setw(2) << setfill(
'0') <<
min <<
":";
538 ss << fixed << setw(6) << setprecision(3) << setfill(
'0') << sec;
540 zuluTime->assign( ss.str());
543 if (packetOutName !=
NULL) {
545 ss <<
"HWK" << setw(4) << to_string(
iyr);
546 ss << setw(3) << setfill(
'0') << to_string(
idy);
547 ss << setw(2) << setfill(
'0') << hr;
548 ss << setw(2) << setfill(
'0') <<
min;
549 ss << setw(2) << setfill(
'0') << (
int) sec;
551 packetOutName->assign( ss.str());