diff options
author | Maximilien Cuony <maximilien@theglu.org> | 2016-06-03 21:44:56 +0200 |
---|---|---|
committer | Maximilien Cuony <maximilien@theglu.org> | 2016-06-03 21:44:56 +0200 |
commit | 53c2afbf719d91f660e815c160e73066ef1ec9e0 (patch) | |
tree | 154a09643c55152360b5ad7d4ed7c7f0e45d0397 | |
parent | 64e3e0b76ebebe2cea949e27d49c149b2e876391 (diff) | |
download | glutte-o-matic-53c2afbf719d91f660e815c160e73066ef1ec9e0.tar.gz glutte-o-matic-53c2afbf719d91f660e815c160e73066ef1ec9e0.tar.bz2 glutte-o-matic-53c2afbf719d91f660e815c160e73066ef1ec9e0.zip |
Working GPS simulator
-rw-r--r-- | src/common/src/Core/common.c | 2 | ||||
-rw-r--r-- | src/common/src/Core/main.c | 13 | ||||
-rw-r--r-- | src/simulator/src/Core/main.c | 130 | ||||
-rw-r--r-- | src/simulator/src/Gui/gui.c | 74 |
4 files changed, 206 insertions, 13 deletions
diff --git a/src/common/src/Core/common.c b/src/common/src/Core/common.c index 4adca26..c31bbf8 100644 --- a/src/common/src/Core/common.c +++ b/src/common/src/Core/common.c @@ -128,7 +128,9 @@ int local_time(struct tm *time) time->tm_isdst = 1; } +#ifdef SIMULATOR time->tm_year -= 1900; //TODO Same on hardware ? +#endif // Let mktime fix the struct tm *time if (mktime(time) == (time_t)-1) { diff --git a/src/common/src/Core/main.c b/src/common/src/Core/main.c index 4eebfa2..1a72e32 100644 --- a/src/common/src/Core/main.c +++ b/src/common/src/Core/main.c @@ -126,12 +126,6 @@ static void test_task(void *pvParameters) { leds_turn_off(LED_RED); } - char * poney = "$GNRMC,202140.00,A,4719.59789,N,00830.92084,E,0.012,,310516,,,A*65\n"; - gps_usart_send(poney); - /* char * poney2 = "$GNRMC,202141.00,A,4719.59788,N,00830.92085,E,0.012,,310516,,,A*64"; */ - /* gps_usart_send(poney2); */ - /* char * poney3 = "$GNRMC,202142.00,A,4719.59785,N,00830.92087,E,0.010,,310516,,,A*6A"; */ - /* gps_usart_send(poney3); */ } } @@ -339,7 +333,12 @@ static void gps_monit_task(void *pvParameters) { gps_time.tm_hour, gps_time.tm_min, gps_time.tm_sec); usart_debug("TIME %04d-%02d-%02d %02d:%02d:%02d\r\n", - time.tm_year, time.tm_mon, time.tm_mday, +#ifdef SIMULATOR + time.tm_year + 1900, +#else + time.tm_year, +#endif + time.tm_mon, time.tm_mday, time.tm_hour, time.tm_min, time.tm_sec); t_gps_print_latch = 1; diff --git a/src/simulator/src/Core/main.c b/src/simulator/src/Core/main.c index 85e6a81..853ee83 100644 --- a/src/simulator/src/Core/main.c +++ b/src/simulator/src/Core/main.c @@ -35,11 +35,32 @@ static void thread_gui(void *arg) { extern int gui_gps_send_frame; extern int gui_gps_frames_valid; extern char gui_gps_lat[64]; +extern int gui_gps_lat_len; extern int gui_gps_lat_hem; extern char gui_gps_lon[64]; +extern int gui_gps_lon_len; extern int gui_gps_lon_hem; extern int gui_gps_send_current_time; +int gui_gps_custom_hour_on; +int gui_gps_custom_min_on; +int gui_gps_custom_sec_on; +int gui_gps_custom_day_on; +int gui_gps_custom_month_on; +int gui_gps_custom_year_on; +char gui_gps_custom_hour[4]; +int gui_gps_custom_hour_len; +char gui_gps_custom_min[4]; +int gui_gps_custom_min_len; +char gui_gps_custom_sec[4]; +int gui_gps_custom_sec_len; +char gui_gps_custom_day[4]; +int gui_gps_custom_day_len; +char gui_gps_custom_month[4]; +int gui_gps_custom_month_len; +char gui_gps_custom_year[6]; +int gui_gps_custom_year_len; + static void thread_gui_gps(void *arg) { while(1) { @@ -47,14 +68,41 @@ static void thread_gui_gps(void *arg) { if (gui_gps_send_frame) { + time_t now = time(NULL); + struct tm *t = gmtime(&now); + char gps_frame_buffer[128]; int gps_buffer_pointer = 0; - strcpy(gps_frame_buffer + gps_buffer_pointer, "$GPRMC,"); + strcpy(gps_frame_buffer + gps_buffer_pointer, "$GNRMC,"); gps_buffer_pointer += 7; - strcpy(gps_frame_buffer + gps_buffer_pointer, "225446,"); - gps_buffer_pointer += 7; + if (gui_gps_send_current_time) { + + sprintf(gps_frame_buffer + gps_buffer_pointer, "%02d%02d%02d", t->tm_hour, t->tm_min, t->tm_sec); + + } else { + + int hour = atoi(gui_gps_custom_hour); + int min = atoi(gui_gps_custom_min); + int sec = atoi(gui_gps_custom_sec); + + if (!gui_gps_custom_hour_on) { + hour = t->tm_hour; + } + if (!gui_gps_custom_min_on) { + min = t->tm_min; + } + if (!gui_gps_custom_sec_on) { + sec = t->tm_sec; + } + + sprintf(gps_frame_buffer + gps_buffer_pointer, "%02d%02d%02d", hour, min, sec); + } + gps_buffer_pointer += 6; + + gps_frame_buffer[gps_buffer_pointer] = ','; + gps_buffer_pointer++; if (gui_gps_frames_valid) { gps_frame_buffer[gps_buffer_pointer] = 'A'; @@ -62,12 +110,86 @@ static void thread_gui_gps(void *arg) { gps_frame_buffer[gps_buffer_pointer] = 'V'; } gps_buffer_pointer++; + + gps_frame_buffer[gps_buffer_pointer] = ','; + gps_buffer_pointer++; + + strcpy(gps_frame_buffer + gps_buffer_pointer, gui_gps_lat); + gps_buffer_pointer += gui_gps_lat_len; + gps_frame_buffer[gps_buffer_pointer] = ','; gps_buffer_pointer++; + if (gui_gps_lat_hem == 0) { + gps_frame_buffer[gps_buffer_pointer] = 'N'; + } else { + gps_frame_buffer[gps_buffer_pointer] = 'S'; + } + gps_buffer_pointer++; + + gps_frame_buffer[gps_buffer_pointer] = ','; + gps_buffer_pointer++; + + strcpy(gps_frame_buffer + gps_buffer_pointer, gui_gps_lon); + gps_buffer_pointer += gui_gps_lon_len; + + gps_frame_buffer[gps_buffer_pointer] = ','; + gps_buffer_pointer++; + + if (gui_gps_lon_hem == 0) { + gps_frame_buffer[gps_buffer_pointer] = 'E'; + } else { + gps_frame_buffer[gps_buffer_pointer] = 'W'; + } + gps_buffer_pointer++; + + strcpy(gps_frame_buffer + gps_buffer_pointer, ",,,"); + gps_buffer_pointer += 3; + + if (gui_gps_send_current_time) { + + sprintf(gps_frame_buffer + gps_buffer_pointer, "%02d%02d%02d", t->tm_mday, t->tm_mon, t->tm_year - 100); + + } else { + strcpy(gps_frame_buffer + gps_buffer_pointer, "000000"); + + int day = atoi(gui_gps_custom_day); + int mon = atoi(gui_gps_custom_month); + int year = atoi(gui_gps_custom_year); + + if (!gui_gps_custom_day_on) { + day = t->tm_mday; + } + if (!gui_gps_custom_month_on) { + mon = t->tm_mon; + } + if (!gui_gps_custom_year_on) { + year = t->tm_year - 100; + } + + sprintf(gps_frame_buffer + gps_buffer_pointer, "%02d%02d%02d", day, mon, year); + } + gps_buffer_pointer += 6; + + strcpy(gps_frame_buffer + gps_buffer_pointer, ",,,A*"); + gps_buffer_pointer += 5; + + + uint8_t checksum = 0; + int i = 1; + + while (gps_frame_buffer[i] && gps_frame_buffer[i] != '*') { + checksum ^= gps_frame_buffer[i]; + i++; + } + + sprintf(gps_frame_buffer + gps_buffer_pointer, "%02x\n", checksum); + gps_buffer_pointer += 3; gps_frame_buffer[gps_buffer_pointer] = '\0'; - printf("%s\n", gps_frame_buffer); + + gps_usart_send(gps_frame_buffer); + /* printf(gps_frame_buffer); */ } diff --git a/src/simulator/src/Gui/gui.c b/src/simulator/src/Gui/gui.c index 72fa9ae..58bbb78 100644 --- a/src/simulator/src/Gui/gui.c +++ b/src/simulator/src/Gui/gui.c @@ -67,6 +67,24 @@ int gui_gps_lon_len = 10; static const char *gps_EW[] = {"East", "West"}; int gui_gps_lon_hem = 0; int gui_gps_send_current_time = 1; +int gui_gps_custom_hour_on = 0; +int gui_gps_custom_min_on = 0; +int gui_gps_custom_sec_on = 0; +int gui_gps_custom_day_on = 0; +int gui_gps_custom_month_on = 0; +int gui_gps_custom_year_on = 0; +char gui_gps_custom_hour[4] = "12"; +int gui_gps_custom_hour_len = 2; +char gui_gps_custom_min[4] = "30"; +int gui_gps_custom_min_len = 2; +char gui_gps_custom_sec[4] = "45"; +int gui_gps_custom_sec_len = 2; +char gui_gps_custom_day[4] = "01"; +int gui_gps_custom_day_len = 2; +char gui_gps_custom_month[4] = "06"; +int gui_gps_custom_month_len = 2; +char gui_gps_custom_year[4] = "16"; +int gui_gps_custom_year_len = 2; struct XWindow { Display *dpy; @@ -327,7 +345,7 @@ int main_gui() { nk_end(ctx); - if (nk_begin(ctx, &layout, "LEDs", nk_rect(460, 50, 100, 155), NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_MINIMIZABLE|NK_WINDOW_TITLE)) { + if (nk_begin(ctx, &layout, "LEDs", nk_rect(50, 360, 100, 155), NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_MINIMIZABLE|NK_WINDOW_TITLE)) { nk_layout_row_static(ctx, 20, 20, 3); @@ -382,7 +400,7 @@ int main_gui() { } nk_end(ctx); - if (nk_begin(ctx, &layout, "GPS", nk_rect(460, 210, 200, 455), NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_MINIMIZABLE|NK_WINDOW_TITLE)) { + if (nk_begin(ctx, &layout, "GPS", nk_rect(460, 50, 200, 465), NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|NK_WINDOW_MINIMIZABLE|NK_WINDOW_TITLE)) { nk_layout_row_dynamic(ctx, 30, 1); nk_checkbox_label(ctx, "Send frames", &gui_gps_send_frame); @@ -403,6 +421,58 @@ int main_gui() { nk_layout_row_dynamic(ctx, 30, 1); nk_checkbox_label(ctx, "Send current time", &gui_gps_send_current_time); + if (!gui_gps_send_current_time) { + + nk_label(ctx, "Custom values:", NK_TEXT_LEFT); + + nk_layout_row_dynamic(ctx, 30, 3); + + nk_label(ctx, "Hour", NK_TEXT_LEFT); + nk_checkbox_label(ctx, "", &gui_gps_custom_hour_on); + if (gui_gps_custom_hour_on) { + nk_edit_string(ctx, NK_EDIT_SIMPLE, gui_gps_custom_hour, &gui_gps_custom_hour_len, 3, nk_filter_decimal); + } else { + nk_label(ctx, "", NK_TEXT_LEFT); + } + nk_label(ctx, "Minutes", NK_TEXT_LEFT); + nk_checkbox_label(ctx, "", &gui_gps_custom_min_on); + if (gui_gps_custom_min_on) { + nk_edit_string(ctx, NK_EDIT_SIMPLE, gui_gps_custom_min, &gui_gps_custom_min_len, 3, nk_filter_decimal); + } else { + nk_label(ctx, "", NK_TEXT_LEFT); + } + nk_label(ctx, "Secondes", NK_TEXT_LEFT); + nk_checkbox_label(ctx, "", &gui_gps_custom_sec_on); + if (gui_gps_custom_sec_on) { + nk_edit_string(ctx, NK_EDIT_SIMPLE, gui_gps_custom_sec, &gui_gps_custom_sec_len, 3, nk_filter_decimal); + } else { + nk_label(ctx, "", NK_TEXT_LEFT); + } + nk_label(ctx, "Day", NK_TEXT_LEFT); + nk_checkbox_label(ctx, "", &gui_gps_custom_day_on); + if (gui_gps_custom_day_on) { + nk_edit_string(ctx, NK_EDIT_SIMPLE, gui_gps_custom_day, &gui_gps_custom_day_len, 3, nk_filter_decimal); + } else { + nk_label(ctx, "", NK_TEXT_LEFT); + } + nk_label(ctx, "Month", NK_TEXT_LEFT); + nk_checkbox_label(ctx, "", &gui_gps_custom_month_on); + if (gui_gps_custom_month_on) { + nk_edit_string(ctx, NK_EDIT_SIMPLE, gui_gps_custom_month, &gui_gps_custom_month_len, 3, nk_filter_decimal); + } else { + nk_label(ctx, "", NK_TEXT_LEFT); + } + nk_label(ctx, "Year", NK_TEXT_LEFT); + nk_checkbox_label(ctx, "", &gui_gps_custom_year_on); + if (gui_gps_custom_year_on) { + nk_edit_string(ctx, NK_EDIT_SIMPLE, gui_gps_custom_year, &gui_gps_custom_year_len, 3, nk_filter_decimal); + } else { + nk_label(ctx, "", NK_TEXT_LEFT); + } + + + } + } nk_end(ctx); |