diff --git a/src/Dump1090.vcxproj b/src/Dump1090.vcxproj
index ae2a35e6..275fc370 100644
--- a/src/Dump1090.vcxproj
+++ b/src/Dump1090.vcxproj
@@ -27,22 +27,22 @@
Application
true
- v142
+ v143
Application
false
- v142
+ v143
Application
true
- v142
+ v143
Application
false
- v142
+ v143
@@ -207,4 +207,4 @@
-
+
\ No newline at end of file
diff --git a/src/dump1090.c b/src/dump1090.c
index ebf87b27..cc1a6a2d 100644
--- a/src/dump1090.c
+++ b/src/dump1090.c
@@ -2538,57 +2538,77 @@ static void modeS_send_SBS_output (const modeS_message *mm, const aircraft *a)
/* Field 11 could contain the call-sign we can get from `aircraft_find_or_create()::reg_num`.
*/
+
+ // Need to output the current date and time into the SBS output
+ // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
+ // example: MSG,3,1,1,4CA7B6,1,2023/10/20,22:33:49.364,2023/10/20,22:33:49.403, ,7250, , ,53.26917,-2.17755, , , , , ,0
+ time_t now = time(NULL);
+ char date_str[40];
+ struct tm* time_info = localtime(&now);
+
+ // Since the date,time,date,time is just a repeat, build the whole string once and then add it to each MSG output (note, had to remove 3 commas from the lines below)
+ strftime(date_str, sizeof date_str, "%Y/%m/%d,%H:%M:%S,%Y/%m/%d,%H:%M:%S", time_info);
+
if (mm->msg_type == 0)
{
- p += sprintf (p, "MSG,5,,,%06X,,,,,,,%d,,,,,,,,,,",
+ p += sprintf (p, "MSG,5,1,1,%06X,1,%s,,%d,,,,,,,,,,",
aircraft_get_addr(mm->AA[0], mm->AA[1], mm->AA[2]),
+ date_str,
mm->altitude);
}
else if (mm->msg_type == 4)
{
- p += sprintf (p, "MSG,5,,,%06X,,,,,,,%d,,,,,,,%d,%d,%d,%d",
+ p += sprintf (p, "MSG,5,1,1,%06X,1,%s,,%d,,,,,,,%d,%d,%d,%d",
aircraft_get_addr(mm->AA[0], mm->AA[1], mm->AA[2]),
+ date_str,
mm->altitude, alert, emergency, spi, ground);
}
else if (mm->msg_type == 5)
{
- p += sprintf (p, "MSG,6,,,%06X,,,,,,,,,,,,,%d,%d,%d,%d,%d",
+ p += sprintf (p, "MSG,6,1,1,%06X,1,%s,,,,,,,,%d,%d,%d,%d,%d",
aircraft_get_addr(mm->AA[0], mm->AA[1], mm->AA[2]),
+ date_str,
mm->identity, alert, emergency, spi, ground);
}
else if (mm->msg_type == 11)
{
- p += sprintf (p, "MSG,8,,,%06X,,,,,,,,,,,,,,,,,",
- aircraft_get_addr(mm->AA[0], mm->AA[1], mm->AA[2]));
+ p += sprintf (p, "MSG,8,1,1,%06X,1,%s,,,,,,,,,,,,",
+ aircraft_get_addr(mm->AA[0], mm->AA[1], mm->AA[2]),
+ date_str);
}
else if (mm->msg_type == 17 && mm->ME_type == 4)
{
- p += sprintf (p, "MSG,1,,,%06X,,,,,,%s,,,,,,,,0,0,0,0",
+ p += sprintf (p, "MSG,1,1,1,%06X,1,%s,%s,,,,,,,,0,0,0,0",
aircraft_get_addr(mm->AA[0], mm->AA[1], mm->AA[2]),
+ date_str,
mm->flight);
}
else if (mm->msg_type == 17 && mm->ME_type >= 9 && mm->ME_type <= 18)
{
if (!VALID_POS(a->position))
- p += sprintf (p, "MSG,3,,,%06X,,,,,,,%d,,,,,,,0,0,0,0",
+ p += sprintf (p, "MSG,3,1,1,%06X,1,%s,,%d,,,,,,,0,0,0,0",
aircraft_get_addr(mm->AA[0], mm->AA[1], mm->AA[2]),
+ date_str,
mm->altitude);
- else p += sprintf (p, "MSG,3,,,%06X,,,,,,,%d,,,%1.5f,%1.5f,,,0,0,0,0",
+ else p += sprintf (p, "MSG,3,1,1,%06X,1,%s,,%d,,,%1.5f,%1.5f,,,0,0,0,0",
aircraft_get_addr(mm->AA[0], mm->AA[1], mm->AA[2]),
+ date_str,
mm->altitude, a->position.lat, a->position.lon);
}
else if (mm->msg_type == 17 && mm->ME_type == 19 && mm->ME_subtype == 1)
{
int vr = (mm->vert_rate_sign == 0 ? 1 : -1) * 64 * (mm->vert_rate - 1);
- p += sprintf (p, "MSG,4,,,%06X,,,,,,,,%d,%d,,,%i,,0,0,0,0",
+ p += sprintf (p, "MSG,4,1,1,%06X,1,%s,,,%d,%d,,,%i,,0,0,0,0",
aircraft_get_addr(mm->AA[0], mm->AA[1], mm->AA[2]),
+ date_str,
a->speed, a->heading, vr);
}
else if (mm->msg_type == 21)
{
- p += sprintf (p, "MSG,6,,,%06X,,,,,,,,,,,,,%d,%d,%d,%d,%d",
+ p += sprintf (p, "MSG,6,1,1,%06X,1,%s,,,,,,,,%d,%d,%d,%d,%d",
aircraft_get_addr(mm->AA[0], mm->AA[1], mm->AA[2]),
+ date_str,
mm->identity, alert, emergency, spi, ground);
}
else