Subversion Repositories EDIS_Ignition

Rev

Rev 14 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * display.cpp
  3.  *
  4.  *  Created on: 30 Nov 2020
  5.  *      Author: mike
  6.  */
  7.  
  8. #include "main.h"
  9. #include "display.h"
  10. #include "libIgnTiming/timing.h"
  11. #include <cstring>
  12. #include "libOLED/stm32_halDisplay.H"
  13. #include "libOLED/fontclass.H"
  14. #include "libOLED/displayDial.H"
  15. #include "libOLED/displayXY.H"
  16. #include "libPlx/displayInfo.H"
  17. #include "libOLED/ap_math.h"
  18. #include "libSmallPrintf/small_printf.h"
  19. #include "splash.H"
  20.  
  21. namespace
  22. {
  23.         int const WIDTH = 128;
  24.         int const HEIGHT = 64;
  25.         int const DISPLAY_RAMWIDTH = 132;
  26.  
  27.         uint32_t atmPress; // actual atmospheric pressure
  28.         uint32_t press;    // pressure millibar * 100 based on normalised pressure
  29.         int32_t temp;      // temperature * 10
  30.         int rpm;                   // engine RPM
  31.  
  32.         int timing;        // timing value .
  33. }
  34.  
  35. uint8_t displayBuffer[MAX_DISPLAYS][dataSize(WIDTH, HEIGHT)];
  36.  
  37. stm32_halDisplay_t displays[MAX_DISPLAYS] =
  38.         {
  39.                 stm32_halDisplay_t(WIDTH, HEIGHT, DISPLAY_RAMWIDTH, displayBuffer[0],
  40.                                                    &hspi1,
  41.                                                    SPI1_CD_GPIO_Port,
  42.                                                    SPI1_CD_Pin,
  43.                                                    SPI1_RESET_GPIO_Port,
  44.                                                    SPI1_RESET_Pin,
  45.                                                    SPI1_NSS_GPIO_Port,
  46.                                                    SPI1_NSS_Pin),
  47. };
  48. // display from 0 to 1000 rpm , and 0 to 1000mB
  49. displayXY_t dispXY(displays[0], 500, 6000, 1050, 0);
  50.  
  51. // set up sine tables
  52. ap_math m;
  53.  
  54. #if defined __cplusplus
  55. extern "C"
  56. {
  57. #endif
  58.  
  59.         void
  60.         cc_init()
  61.         {
  62.                 for (auto i = 0; i < MAX_DISPLAYS; i++)
  63.                 {
  64.                         display_t &display = displays[i];
  65.                         if (i == 0)
  66.                                 display.reset();
  67.                         display.init();
  68.                         display.clearDisplay(BLACK);
  69.                         display.gotoxy(8, 32);
  70.                         display.printString(large_font, "mikeJ", 5, BLACK);
  71.                         display.display();
  72.                 }
  73.         }
  74.  
  75.         int
  76.         cc_display(uint8_t dialIndex, uint8_t intensity, uint8_t do_reset)
  77.         {
  78.  
  79.                 if (dialIndex < 0 && dialIndex > MAX_DISPLAYS)
  80.                         return -1;
  81.                 stm32_halDisplay_t &display = displays[dialIndex];
  82.                 if (do_reset)
  83.                 {
  84.  
  85.                         display.reset();
  86.                         display.init();
  87.                 }
  88.  
  89.                 display.clearDisplay(BLACK);
  90.  
  91.                 display.dim(intensity == 2 ? 255 : 0);
  92.  
  93.                 if (intensity > 0)
  94.                 {
  95.  
  96.                         dispXY.drawAxes();
  97.  
  98.                         char buff1[20]; // manifold / atmospheric pressure
  99.                         char buff2[20]; // temp / rpm string
  100.                         char buff[10];  // timing code
  101.  
  102.                         small_sprintf(buff, "%2d.%01d", timing / 10, timing % 10);
  103.  
  104.                         small_sprintf(buff1, "M%4ld A%4ld.%1ld", press / 100, atmPress / 100,(atmPress/10)%10);
  105.  
  106.                         small_sprintf(buff2, "%2ld.%ldC %4drpm", temp / 100, (temp /10) % 10, rpm);
  107.  
  108.                         dispXY.plotPoint(rpm, press / 100, buff, buff1, buff2 );
  109.                 }
  110.                 display.display();
  111.  
  112.                 return 0;
  113.         }
  114.  
  115.         void cc_feed_env(uint32_t atmPressVal, uint32_t pressVal, int32_t tempVal)
  116.         {
  117.                 atmPress = atmPressVal;
  118.                 press = pressVal;
  119.                 temp = tempVal;
  120.         }
  121.  
  122.         void cc_feed_timing(int timing_)
  123.         {
  124.                 timing = timing_;
  125.         }
  126.  
  127.         void cc_feed_rpm(int rpm_)
  128.         {
  129.                 rpm = rpm_;
  130.         }
  131. #if defined __cplusplus
  132. }
  133. #endif
  134.