X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=boards%2Fek-lm3s1968%2Fexamples%2Fgps%2Fmain.c;h=0c2f4e6a2bd161c456c99efe512cccc11594b0a3;hb=6582dda2499ac45ff14e68cecc4cc6b78ffbbded;hp=cf7b561dd978bc2a01f15f1805da5dc32b4a175d;hpb=e9ccb7d4eec1b5e4d3fc670336828caa52df8056;p=bertos.git diff --git a/boards/ek-lm3s1968/examples/gps/main.c b/boards/ek-lm3s1968/examples/gps/main.c index cf7b561d..0c2f4e6a 100644 --- a/boards/ek-lm3s1968/examples/gps/main.c +++ b/boards/ek-lm3s1968/examples/gps/main.c @@ -1,11 +1,53 @@ +/** + * \file + * + * + * \author Andrea Righi + * + * \brief DevelGPS demo application with gps. + */ + +#include "hw/hw_led.h" + #include #include #include #include -#include +#include #include +#include +#include + #include #include @@ -44,50 +86,42 @@ static long target_lat, target_lon; /* Storage stuff */ #define GPS_POS_MAGIC 0xdeadbeef -static FlashLM3S flash; +static Flash flash_blk; +static KFileBlock flash; -static void flash_load_target(void) +struct SettingsData { uint32_t magic; + long target_lat, target_lon; +}; - kfile_seek(&flash.fd, -FLASH_PAGE_SIZE_BYTES, KSM_SEEK_END); - kfile_read(&flash.fd, &magic, sizeof(magic)); - if (magic == GPS_POS_MAGIC) +static void flash_load_target(void) +{ + struct SettingsData data; + + kfile_seek(&flash.fd, -sizeof(data), KSM_SEEK_END); + kfile_read(&flash.fd, &data, sizeof(data)); + + if (data.magic == GPS_POS_MAGIC) { - kfile_read(&flash.fd, &target_lat, sizeof(target_lat)); - kfile_read(&flash.fd, &target_lon, sizeof(target_lon)); + target_lat = data.target_lat; + target_lon = data.target_lon; } } static void flash_save_target(void) { - const uint32_t magic = GPS_POS_MAGIC; + struct SettingsData data; - kfile_seek(&flash.fd, -FLASH_PAGE_SIZE_BYTES, KSM_SEEK_END); - kfile_write(&flash.fd, &magic, sizeof(magic)); - kfile_write(&flash.fd, &target_lat, sizeof(target_lat)); - kfile_write(&flash.fd, &target_lon, sizeof(target_lon)); - kfile_flush(&flash.fd); -} - -/* Status LED management */ -static void led_init(void) -{ - SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOG; - (void)SYSCTL_RCGC2_R; - GPIO_PORTG_DIR_R = 0x04; - GPIO_PORTG_DEN_R = 0x04; -} + data.magic = GPS_POS_MAGIC; + data.target_lat = target_lat; + data.target_lon = target_lon; -INLINE void led_on(void) -{ - GPIO_PORTG_DATA_R |= 0x04; + kfile_seek(&flash.fd, -sizeof(data), KSM_SEEK_END); + kfile_write(&flash.fd, &data, sizeof(data)); + kfile_flush(&flash.fd); } -INLINE void led_off(void) -{ - GPIO_PORTG_DATA_R &= ~0x04; -} /* Display management */ INLINE void video_off(void) @@ -142,9 +176,9 @@ static void NORETURN led_process(void) timer_delay(1000); continue; } - led_on(); + LED_ON(); timer_delay(100); - led_off(); + LED_OFF(); nmea_update = false; } } @@ -430,7 +464,7 @@ static void gps_data(Bitmap *bm) ABS(lon) % 1000000L, lon >= 0 ? 'E' : 'W'); text_xprintf(bm, 2, 0, TEXT_FILL, - "Alt. %d", gga.altitude); + "Alt. %ld", gga.altitude); text_xprintf(bm, 3, 0, TEXT_FILL, "Speed: %d", vtg.km_speed); if (gga.quality < countof(gps_fix)) @@ -496,7 +530,7 @@ static struct MenuItem main_items[] = static struct Menu main_menu = { - main_items, "DevelGPS v0.1", MF_STICKY | MF_SAVESEL, &lcd_bitmap, 0 + main_items, "DevelGPS v0.1", MF_STICKY | MF_SAVESEL, &lcd_bitmap, 0, rit128x96_blitBitmap }; static void init(void) @@ -508,9 +542,10 @@ static void init(void) proc_init(); scrsvr_timestamp = ticks_to_ms(timer_clock_unlocked()); - led_init(); + LED_INIT(); - flash_lm3sInit(&flash); + flash_init(&flash_blk, 0); + kfileblock_init(&flash, &flash_blk.blk); flash_load_target(); ser_init(&ser_port, SER_UART1);