Subversion Repositories dashGPS

Rev

Rev 11 | Rev 16 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #include "main.h"
  2. #include "nmea.h"
  3. #include <cstring>
  4. #include "libOLED/stm32_halDisplay.H"
  5. #include "libOLED/fontclass.H"
  6. #include "libOLED/displayDial.H"
  7.  
  8. #include "libBMP280/bmp280.h"
  9.  
  10. #include "libSmallPrintf/small_printf.h"
  11. #include "usbd_cdc_if.h"
  12.  
  13. namespace
  14. {
  15.   int const WIDTH = 128;
  16.   int const HEIGHT = 64;
  17.   int const DISPLAY_RAMWIDTH = 132;
  18.  
  19. }
  20.  
  21. float speedMPH = 0.0;
  22. float speedAVG = 0.0;
  23. int heading = 0;
  24. Location loc;
  25.  
  26. uint32_t lastTick = 0;
  27. int32_t temp32 = 0;
  28. uint32_t pres32 = 0;
  29. int32_t rslt;
  30.  
  31. uint8_t displayBuffer[dataSize (WIDTH, HEIGHT)];
  32.  
  33. stm32_halDisplay_t display1 (WIDTH, HEIGHT, DISPLAY_RAMWIDTH, displayBuffer,
  34.                              &hspi1,
  35.  
  36.                              SPI_CD_GPIO_Port,
  37.                              SPI_CD_Pin,
  38.                              SPI_RESET_GPIO_Port,
  39.                              SPI_RESET_Pin,
  40.                              SPI_NSS1_GPIO_Port,
  41.                              SPI_NSS1_Pin);
  42.  
  43. displayDial_t dial (display1, 96, 32, 32, 180);
  44.  
  45. extern "C" void
  46. cc_init ()
  47. {
  48.   display1.reset ();
  49.  
  50.   display1.init ();
  51.   display1.clearDisplay ();
  52.  
  53.   dial.draw_scale (0, 360, 8, 1, 45);
  54.  
  55.   display1.display ();
  56.  
  57.   memset (loc.time, '-', 6);
  58. }
  59.  
  60. char fontBuf[] = "01234567";
  61. extern "C" void
  62. cc_run (struct bmp280_dev *bmp)
  63.  
  64. {
  65.  
  66.   display1.clearDisplay ();
  67.   dial.draw_scale (0, 360, 8, 1, 45);
  68.  
  69.   bool stat = updateLocation (&loc);
  70.   if (loc.good)
  71.     {
  72.       heading = loc.heading;
  73.  
  74.       loc.good = false;
  75.     }
  76.   if (loc.valid == 'V')
  77.     memset (loc.time, '-', 6);
  78.  
  79.   // print out the GMT time at the top of the screen
  80.   display1.gotoxy (0, 0);
  81.   display1.printString (small_font, &loc.time[0], 2, WHITE);
  82.   display1.printString (small_font, ":", 1, WHITE);
  83.   display1.printString (small_font, &loc.time[2], 2, WHITE);
  84.  
  85.   display1.printString (small_font, ":", 1, WHITE);
  86.   display1.printString (small_font, &loc.time[4], 2, WHITE);
  87.   int dial_ang = heading + 180;
  88.   dial.draw_needle (dial_ang);
  89.  
  90.   display1.gotoxy (70, 25);
  91.   if (loc.valid == 'A')
  92.     {
  93.       display1.fontDigits (large_font, 3, -1, heading);
  94.     }
  95.   else
  96.     display1.printString (large_font, "GPS?", 4, WHITE);
  97.  
  98.   if (loc.valid == 'A')
  99.     speedMPH = loc.speed / 1.815;
  100.  
  101.   display1.gotoxy (0, 8);
  102.   display1.printString (small_font, "Speed", 5, WHITE);
  103.   display1.gotoxy (0, 16);
  104.   display1.fontDigits (large_font, 4, 1, speedMPH * 10);
  105.  
  106.   display1.gotoxy (0, 32);
  107.   display1.printString (small_font, "Average", 7, WHITE);
  108.   display1.gotoxy (0, 40);
  109.   display1.fontDigits (large_font, 4, 1, speedAVG * 10);
  110.  
  111.   struct bmp280_uncomp_data ucomp_data;
  112.  
  113.   if (HAL_GetTick () - lastTick > 1000)
  114.     {
  115.       lastTick = HAL_GetTick ();
  116.       /* Reading the raw data from sensor */
  117.       rslt = bmp280_get_uncomp_data (&ucomp_data, bmp);
  118.  
  119.       if (rslt == BMP280_OK)
  120.         {
  121.           /* Getting the 32 bit compensated temperature */
  122.           rslt = bmp280_get_comp_temp_32bit (&temp32, ucomp_data.uncomp_temp,
  123.                                              bmp);
  124.  
  125.           rslt = bmp280_get_comp_pres_32bit (&pres32, ucomp_data.uncomp_press,
  126.                                              bmp);
  127.  
  128.           // compile a logger message over USB
  129.            char buffer[100];
  130.            int cnt = small_sprintf(buffer,"$TP,%ld,%ld",temp32,pres32);
  131.            uint8_t sum=0;
  132.            for(int i=1; i<cnt; i++)
  133.              sum += buffer[i];
  134.            cnt+= small_sprintf(buffer+cnt,"*%02X\n",sum);
  135.  
  136.            CDC_Transmit_FS(reinterpret_cast<uint8_t*>(&buffer[0]),cnt);
  137.  
  138.  
  139.         }
  140.     }
  141.   display1.gotoxy (0, 56);
  142.   display1.printString (small_font, "T", 2, WHITE);
  143.   display1.fontDigits (small_font, 4, 1, temp32/10, WHITE);
  144.   display1.printString (small_font, " P", 2, WHITE);
  145.   display1.fontDigits (small_font, 5, 0, pres32/100, WHITE);
  146.   display1.printString (small_font, " ", 1, WHITE);
  147.  
  148.  
  149.   display1.display ();
  150.  
  151. }
  152.