hud.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. /*
  2. This is an example of how to write a library that allows user to pass in an I2C port
  3. Nathan Seidle
  4. SparkFun Electronics
  5. License: Public domain
  6. */
  7. #include < Wire.h >
  8. uint16_t DisplayLimit[6] = {199, 999, 999, 999, 99, 199};
  9. bool begin(TwoWire & wirePort = Wire); //If user doesn't specify then Wire will be used
  10. void AdjustIconLevel(uint16_t IconNo, uint16_t IconLevel);
  11. void D01(uint8_t Action);
  12. void CC1(uint8_t Action);
  13. void D02(uint8_t Action);
  14. void CC2(uint8_t Action);
  15. void D03(uint8_t Action);
  16. void CC3(uint8_t Action);
  17. void D04(uint8_t Action);
  18. void CC4(uint8_t Action);
  19. void D05(uint8_t Action);
  20. void CC5(uint8_t Action);
  21. void D06(uint8_t Action);
  22. void CC6(uint8_t Action);
  23. void D07(uint8_t Action);
  24. void CC7(uint8_t Action);
  25. void D08(uint8_t Action);
  26. void CC8(uint8_t Action);
  27. void D0x(uint8_t Action);
  28. void C01(uint8_t Action);
  29. void C02(uint8_t Action);
  30. void H01(uint8_t Action);
  31. void K01(uint8_t Action);
  32. void M01(uint8_t Action);
  33. void C03(uint8_t Action);
  34. void K02(uint8_t Action);
  35. void M03(uint8_t Action);
  36. void P01(uint8_t Action);
  37. void P02(uint8_t Action);
  38. void P03(uint8_t Action);
  39. void T01(uint8_t Action);
  40. void T02(uint8_t Action);
  41. void compassCircle(uint8_t Select);
  42. void compassArrows(uint8_t Select);
  43. void radarDistanceUnits(uint8_t Action);
  44. void flag(uint8_t Action);
  45. void tirePressureAlert(uint8_t Action);
  46. void speedometerUnits(uint8_t Action);
  47. void destinationDistanceUnits(uint8_t iconUnits);
  48. void turnDistanceUnits(uint8_t iconUnits);
  49. void leftTunnel(uint8_t Action);
  50. void middleTunnel(uint8_t Action);
  51. void rightTunnel(uint8_t Action);
  52. void leftRoad(uint8_t Action);
  53. void middleRoad(uint8_t Action);
  54. void rightRoad(uint8_t Action);
  55. void nav_Group(uint8_t Action);
  56. void nav_KeepLeft(uint8_t Action);
  57. void nav_TurnLeft(uint8_t Action);
  58. void nav_TurnRight(uint8_t Action);
  59. void nav_HardRight(uint8_t Action);
  60. void nav_HardLeft(uint8_t Action);
  61. void nav_UTurnLeft(uint8_t Action);
  62. void nav_UTurnRight(uint8_t Action);
  63. void nav_ContinueStraight(uint8_t Action);
  64. void nav_KeepRight(uint8_t Action);
  65. void setSegmentedDisplay(uint8_t Display, uint8_t SpeedNo, bool Mode);
  66. #define setHeading(SpeedNo) setSegmentedDisplay(0, SpeedNo, false)
  67. #define setDestinationDistance(SpeedNo, Mode) setSegmentedDisplay(1, SpeedNo, Mode)
  68. #define setRadarDistance(SpeedNo, Mode) setSegmentedDisplay(2, SpeedNo, Mode)
  69. #define setTurnDistance(SpeedNo, Mode) setSegmentedDisplay(3, SpeedNo, Mode)
  70. #define setTirePressure(SpeedNo, Mode) setSegmentedDisplay(4, SpeedNo, Mode)
  71. #define setSpeedometer(SpeedNo) setSegmentedDisplay(5, SpeedNo, false)
  72. void radarDetector(uint8_t Level);
  73. void setCallIcon(uint8_t iconStatus);
  74. void clearAll(void);
  75. void IIC_Write_Command1(uint8_t IIC_Addr, uint16_t DataLen, uint8_t * DataPtr);
  76. void IIC_Write_Data1(uint8_t IIC_Addr, uint16_t DataLen, uint8_t * DataPtr);
  77. void IIC_Write_Data2(uint8_t IIC_Addr, uint16_t DataLen,
  78. const uint8_t * DataPtr);
  79. private:
  80. uint16_t S1_2_3;
  81. uint16_t S4_5_6;
  82. uint16_t S7_8_9;
  83. uint16_t S10_11_12;
  84. uint16_t S13_14;
  85. uint16_t S15_16_17;
  86. uint16_t ChangeRedValue(uint16_t OriginalValue, uint16_t R_Value);
  87. uint16_t ChangeGreenValue(uint16_t OriginalValue, uint16_t G_Value);
  88. uint16_t ChangeBlueValue(uint16_t OriginalValue, uint16_t B_Value);
  89. uint16_t ChangeRG_Value(uint16_t OriginalValue, uint16_t RG_Value);
  90. uint16_t ChangeGB_Value(uint16_t OriginalValue, uint16_t GB_Value);
  91. uint16_t SetRGB_Value(uint16_t RGB_Value);
  92. void NumericalTo4BCD(uint16_t S_Number, uint8_t * BCD_Ptr);
  93. void DispNumber(const uint16_t * SegIconPtr, uint8_t DispNo);
  94. void SoftReset(unsigned char DriverNo);
  95. void SetOscControl(unsigned char DriverNo, unsigned char mode);
  96. void SetGraphicsRAMWritingDirection(unsigned char DriverNo, unsigned char mode);
  97. void SetInterface(unsigned char DriverNo, unsigned char mode);
  98. void DisplayOnOff(unsigned char DriverNo, unsigned char Val);
  99. void DisplayStandbyOnOff(unsigned char DriverNo, unsigned char Val);
  100. void SetDisplaySize(unsigned char DriverNo, unsigned char Xstart, unsigned char Xend, unsigned char Ystart, unsigned char Yend);
  101. void SetDotCurrent(unsigned char DriverNo, unsigned char Rlevel, unsigned char Glevel, unsigned char Blevel);
  102. void SetSystemClockDivisionRatio(unsigned char DriverNo, unsigned char mode);
  103. void SetPreChargeWidth(unsigned char DriverNo, unsigned char Val);
  104. void SetPeakPulseWidth(unsigned char DriverNo, unsigned char Rlevel, unsigned char Glevel, unsigned char Blevel);
  105. void SetPeakPulseDelay(unsigned char DriverNo, unsigned char Val);
  106. void SetRowScanOperation(unsigned char DriverNo, unsigned char mode);
  107. void SetInternalRegulatorforRowScan(unsigned char DriverNo, unsigned char mode);
  108. void DumpDataToDriver(unsigned char DriverNo, unsigned int SData);
  109. void initializeHUD231(void);
  110. const uint8_t IIC_Addr[2] = { 0x30, 0x31 };
  111. const uint8_t NumberSegTable[11] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x00 };
  112. // T TR BR B BL TL M
  113. const uint8_t SegIconTable[6][3][7] = {{{ 0, 6, 7, 0, 0, 0, 0 },
  114. { 10, 16, 14, 13, 12, 11, 15 },
  115. { 19, 25, 23, 22, 21, 20, 24 }
  116. },
  117. {{ 33, 39, 37, 36, 35, 34, 38 },
  118. { 41, 47, 45, 44, 43, 42, 46 },
  119. { 49, 55, 53, 52, 51, 50, 54 }
  120. },
  121. {{ 59, 65, 63, 62, 61, 60, 64 },
  122. { 66, 72, 70, 69, 68, 67, 71 },
  123. { 73, 79, 77, 76, 75, 74, 78 }
  124. },
  125. {{ 131, 137, 135, 134, 133, 132, 136 },
  126. { 138, 144, 142, 141, 140, 139, 143 },
  127. { 146, 152, 150, 149, 148, 147, 151 }
  128. },
  129. {{ 0, 0, 0, 0, 0, 0, 0 },
  130. { 182, 188, 186, 185, 184, 183, 187 },
  131. { 190, 196, 194, 193, 192, 191, 195 }
  132. },
  133. {{ 0, 214, 215, 0, 0, 0, 0 },
  134. { 216, 222, 220, 219, 218, 217, 221 },
  135. { 223, 229, 227, 226, 225, 224, 228 }
  136. }};
  137. typedef struct {
  138. uint8_t DriverNo;
  139. uint16_t StartBumpLocation;
  140. uint8_t BumpNo;
  141. uint8_t Level;
  142. } IconStruct;
  143. const IconStruct IconData[231] = {
  144. {0, 0, 2, 30}, {0, 2, 2, 30}, {0, 4, 2, 30}, {0, 6, 2, 30}, {0, 8, 2, 30},
  145. {0, 10, 2, 30}, {0, 12, 1, 30}, {0, 13, 1, 30}, {0, 14, 2, 30}, {0, 16, 2, 30},
  146. {0, 18, 2, 30}, {0, 20, 1, 30}, {0, 21, 1, 30}, {0, 22, 2, 30}, {0, 24, 1, 30},
  147. {0, 25, 1, 30}, {0, 26, 1, 30}, {0, 27, 2, 30}, {0, 29, 2, 30}, {0, 31, 2, 30},
  148. {0, 33, 1, 30}, {0, 34, 1, 30}, {0, 35, 2, 30}, {0, 37, 1, 30}, {0, 38, 1, 30},
  149. {0, 39, 1, 30}, {0, 40, 2, 30}, {0, 42, 2, 30}, {0, 44, 2, 30}, {0, 46, 2, 30},
  150. {0, 48, 2, 30}, {0, 50, 2, 30}, {0, 52, 16, 30}, {0, 68, 3, 30}, {0, 71, 3, 30},
  151. {0, 74, 3, 30}, {0, 77, 3, 30}, {0, 80, 3, 30}, {0, 83, 3, 30}, {0, 86, 3, 30},
  152. {0, 89, 1, 30}, {0, 90, 3, 30}, {0, 93, 3, 30}, {0, 96, 3, 30}, {0, 99, 3, 30},
  153. {0, 102, 3, 30}, {0, 105, 3, 30}, {0, 108, 3, 30}, {0, 111, 1, 30}, {0, 112, 3, 30},
  154. {0, 115, 3, 30}, {0, 118, 3, 30}, {0, 121, 3, 30}, {0, 124, 3, 30}, {0, 127, 3, 30},
  155. {0, 130, 3, 30}, {0, 133, 4, 30}, {0, 137, 6, 30}, {0, 143, 5, 30}, {0, 148, 2, 30},
  156. {0, 150, 1, 30}, {0, 151, 1, 30}, {0, 152, 2, 30}, {0, 154, 1, 30}, {0, 155, 1, 30},
  157. {0, 156, 1, 30}, {0, 157, 2, 30}, {0, 159, 1, 30}, {0, 160, 1, 30}, {0, 161, 2, 30},
  158. {0, 163, 1, 30}, {0, 164, 1, 30}, {0, 165, 1, 30}, {0, 166, 2, 30}, {0, 168, 1, 30},
  159. {0, 169, 1, 30}, {0, 170, 2, 30}, {0, 172, 1, 30}, {0, 173, 1, 30}, {0, 174, 1, 30},
  160. {0, 175, 3, 30}, {0, 178, 7, 30}, {0, 185, 1, 3}, {0, 186, 1, 3}, {0, 187, 1, 3},
  161. {0, 188, 1, 3}, {0, 189, 1, 3}, {0, 190, 1, 3}, {0, 191, 1, 3}, {0, 192, 1, 30},
  162. {0, 193, 2, 30}, {0, 195, 2, 30}, {0, 197, 1, 30}, {0, 198, 1, 30}, {0, 199, 2, 30},
  163. {0, 201, 1, 30}, {0, 202, 1, 30}, {0, 203, 3, 30}, {0, 206, 1, 30}, {0, 207, 1, 30},
  164. {0, 208, 1, 30}, {0, 209, 1, 30}, {0, 210, 3, 30}, {0, 213, 5, 30}, {0, 218, 4, 30},
  165. {0, 222, 1, 5}, {0, 223, 1, 12}, {0, 224, 6, 30}, {0, 230, 2, 30}, {0, 232, 5, 30},
  166. {0, 237, 4, 30}, {0, 241, 1, 5}, {0, 242, 1, 12}, {0, 243, 5, 30}, {0, 248, 2, 30},
  167. {0, 250, 5, 30}, {0, 255, 3, 30}, {0, 258, 2, 30}, {0, 260, 3, 30}, {0, 263, 1, 15},
  168. {0, 264, 1, 30}, {0, 265, 1, 15}, {0, 266, 1, 10}, {0, 267, 4, 30}, {0, 271, 1, 30},
  169. {0, 272, 2, 30}, {0, 274, 5, 30}, {0, 279, 4, 30}, {0, 283, 1, 5}, {0, 284, 7, 20},
  170. {0, 291, 4, 31}, {0, 295, 1, 15}, {0, 296, 1, 15}, {0, 297, 1, 15}, {0, 298, 1, 15},
  171. {0, 299, 1, 15}, {0, 300, 1, 15}, {0, 301, 1, 15}, {0, 302, 1, 15}, {0, 303, 1, 15},
  172. {0, 304, 1, 15}, {0, 305, 1, 15}, {0, 306, 1, 15}, {0, 307, 1, 15}, {0, 308, 1, 15},
  173. {0, 309, 1, 5}, {0, 310, 1, 15}, {0, 311, 1, 15}, {0, 312, 1, 15}, {0, 313, 1, 15},
  174. {0, 314, 1, 15}, {0, 315, 1, 15}, {0, 316, 1, 15}, {0, 317, 2, 15}, {0, 319, 2, 15},
  175. {0, 321, 7, 20}, {0, 328, 1, 5}, {0, 329, 4, 30}, {0, 333, 5, 30}, {0, 338, 2, 30},
  176. {0, 340, 1, 30}, {0, 341, 4, 30}, {0, 345, 1, 10}, {0, 346, 1, 12}, {0, 347, 1, 30},
  177. {0, 348, 1, 15}, {0, 349, 3, 30}, {0, 352, 2, 30}, {0, 354, 3, 30}, {0, 357, 5, 30},
  178. {0, 362, 2, 30}, {0, 364, 5, 30}, {0, 369, 1, 12}, {0, 370, 1, 5}, {0, 371, 4, 30},
  179. {0, 375, 5, 30}, {0, 380, 2, 30}, {1, 0, 6, 30}, {1, 6, 1, 12}, {1, 7, 4, 30},
  180. {1, 11, 2, 30}, {1, 13, 5, 30}, {1, 18, 1, 15}, {1, 19, 1, 15}, {1, 20, 1, 15},
  181. {1, 21, 1, 15}, {1, 22, 1, 15}, {1, 23, 1, 15}, {1, 24, 1, 15}, {1, 25, 2, 30},
  182. {1, 27, 1, 15}, {1, 28, 1, 15}, {1, 29, 1, 15}, {1, 30, 1, 15}, {1, 31, 1, 15},
  183. {1, 32, 1, 15}, {1, 33, 1, 15}, {1, 34, 28, 30}, {1, 62, 1, 30}, {1, 63, 1, 30},
  184. {1, 64, 1, 30}, {1, 65, 1, 30}, {1, 66, 3, 30}, {1, 69, 1, 30}, {1, 70, 1, 30},
  185. {1, 71, 2, 30}, {1, 73, 1, 30}, {1, 74, 1, 30}, {1, 75, 2, 30}, {1, 77, 2, 30},
  186. {1, 79, 1, 30}, {1, 80, 6, 30}, {1, 86, 5, 30}, {1, 91, 2, 30}, {1, 93, 17, 30},
  187. {1, 110, 16, 30}, {1, 126, 18, 30}, {1, 144, 14, 30}, {1, 158, 14, 30}, {1, 172, 17, 30},
  188. {1, 189, 17, 30}, {1, 206, 16, 30}, {1, 222, 16, 30}, {1, 238, 18, 30}, {1, 256, 14, 30},
  189. {1, 270, 14, 30}, {1, 284, 17, 30}, {1, 301, 17, 30}, {1, 318, 16, 30}, {1, 334, 16, 30},
  190. {1, 350, 33, 30}
  191. };
  192. uint16_t IconRamMap[2][128];
  193. uint8_t SendDataBuffer[1024]; //1024
  194. uint8_t ReceiveData[1024]; //1024