yc_paint.c 97 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994
  1. #include "user_config.h"
  2. #include "esp_log.h"
  3. #include "qr_encode.h"
  4. #include "qr_consts.h"
  5. #include "list.h"
  6. #include "esp_timer.h"
  7. static const char *LOG_TAG = "yc_paint";
  8. #include "esp_sleep.h"
  9. #include "user_sleep.h"
  10. #include "esp_mac.h"
  11. #include "freertos/FreeRTOS.h"
  12. #include "freertos/task.h"
  13. #include "freertos/queue.h"
  14. #include "freertos/semphr.h"
  15. extern TERMINAL_INFO_T terminal_info;
  16. int last_batt_precent;
  17. #if 0
  18. #define DISPLAY_BUFFER_SIZE (480 * 648 / 8)
  19. uint32_t display_size = DISPLAY_BUFFER_SIZE;
  20. unsigned char tmp_paint_buf[480*81] = {0};
  21. unsigned char last_paint_buf_left[480*81] = {0};
  22. unsigned char last_paint_buf_right[480*81] = {0};
  23. #else
  24. #define DISPLAY_BUFFER_SIZE (480 * 648 / 8)
  25. uint32_t display_size = DISPLAY_BUFFER_SIZE;
  26. unsigned char tmp_paint_buf[480 * 81] = {0};
  27. unsigned char *last_paint_buf_left = NULL;
  28. unsigned char *last_paint_buf_right = NULL;
  29. static RTC_FAST_ATTR unsigned int compressedSize = 0;
  30. static RTC_FAST_ATTR unsigned int decompressedSize = 0;
  31. static RTC_FAST_ATTR unsigned int right_compressedSize = 0;
  32. static RTC_FAST_ATTR unsigned int right_decompressedSize = 0;
  33. // #if 0 //压缩
  34. // int compressedSize = compressRLE(Paint_info.Image, 480*81, old_buffer);
  35. // printf(" src size = %d, zip size:%d\r\n",480*81,compressedSize);
  36. // memset((uint8_t*)tmp_paint_buf,0,sizeof(tmp_paint_buf));
  37. // int decompressedSize = decompressRLE(old_buffer, compressedSize, tmp_paint_buf);
  38. // printf("src size = %d unzip %d\r\n",480*81,decompressedSize);
  39. // #endif
  40. #endif
  41. RTC_FAST_ATTR uint32_t arr_heights[6] = {0};
  42. char str_operation[6] = {0xd4, 0xcb, 0xd0, 0xd0, 0x00, 0x00}; // 运行
  43. char str_upKeep[6] = {0xb1, 0xa3, 0xd1, 0xf8, 0x00, 0x00}; // 保养
  44. char str_shutDown[6] = {0xcd, 0xa3, 0xbb, 0xfa, 0x00, 0x00}; // 停机
  45. char str_safeKeep[6] = {0xb7, 0xe2, 0xb4, 0xe6, 0x00, 0x00}; // 封存
  46. char str_waitMaterials[6] = {0xb4, 0xfd, 0xc1, 0xcf, 0x00, 0x00}; // 待料
  47. char str_breakDown[6] = {0xb9, 0xca, 0xd5, 0xcf, 0x00, 0x00}; // 故障
  48. char str_inspection[6] = {0xd1, 0xb2, 0xbc, 0xec, 0x00, 0x00};
  49. char str_production[6] = {0xc9, 0xfa, 0xb2, 0xfa, 0x00, 0x00};
  50. char str_repair[6] = {0xce, 0xac, 0xd0, 0xde, 0x00, 0x00};
  51. // char str_0[14] = {0xb9,0xdc,0x20,0x20,0xc0,0xed,0x20,0x20,0xd4,0xb1,0xa3,0xba,0x00,0x00};
  52. // char str_1[14] = {0xc9,0xfa,0xb2,0xfa,0xd4,0xf0,0xc8,0xce,0xc8,0xcb,0xa3,0xba,0x00,0x00};
  53. // char str_2[14] = {0xce,0xac,0xd0,0xde,0xd4,0xf0,0xc8,0xce,0xc8,0xcb,0xa3,0xba,0x00,0x00};
  54. // char str_3[14] = {0xb1,0xa3,0xd1,0xf8,0xd4,0xf0,0xc8,0xce,0xc8,0xcb,0xa3,0xba,0x00,0x00};
  55. // char str_4[14] = {0xd1,0xb2,0xbc,0xec,0xd4,0xf0,0xc8,0xce,0xc8,0xcb,0xa3,0xba,0x00,0x00};
  56. static bool isASCII(char c);
  57. static bool isGBKChinese(char c1, char c2);
  58. static void countCharacters(const char *str, int *chineseCount, int *asciiCount);
  59. static int calculateStringWidth(const char *str, int en_px, int cn_px);
  60. static void QRGenerator(char *input);
  61. static void displayQRCode(int side, uint8_t *bitdata, int x, int y)
  62. {
  63. int i = 0;
  64. int j = 0;
  65. int a = 0;
  66. for (i = 0; i < side; i++)
  67. {
  68. for (j = 0; j < side; j++)
  69. {
  70. a = j * side + i;
  71. if ((bitdata[a / 8] & (1 << (7 - a % 8)))) // 画点
  72. {
  73. Paint_SetPixel(x + j, y + i, WHITE); // 画一个点
  74. }
  75. else
  76. {
  77. }
  78. }
  79. }
  80. }
  81. static void QRGenerator(char *input)
  82. {
  83. // printf("%s \n",(char*)input);
  84. int side;
  85. uint8_t bitdata[QR_MAX_BITDATA];
  86. // remove newline
  87. if (input[strlen(input) - 1] == '\n')
  88. {
  89. input[strlen(input) - 1] = 0;
  90. }
  91. side = qr_encode(QR_LEVEL_L, 0, input, 0, bitdata); // 生成二维码
  92. // printf("总 %dx%d\n\nlen =%d\n", side, side,strlen((char*)bitdata)); //二维码大小
  93. memset(tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  94. Paint_NewImage((UBYTE *)tmp_paint_buf, 40, 40, ROTATE_0, WHITE);
  95. displayQRCode(side, bitdata, 0, 0);
  96. epd_partial_cache(440, 0, 480, 80, SCREEN_LEFT, Paint_info.Image);
  97. }
  98. static void displayQRCode_expand(int side, uint8_t *bitdata, int x, int y, int expand) // expand 扩大边长的倍数
  99. {
  100. int i = 0;
  101. int j = 0;
  102. int a = 0;
  103. for (i = 0; i < side; i++)
  104. {
  105. for (j = 0; j < side; j++)
  106. {
  107. a = j * side + i;
  108. if ((bitdata[a / 8] & (1 << (7 - a % 8)))) // 画点
  109. { // Paint_SetPixel(x+j, y+i, WHITE);//画一个点
  110. Paint_DrawPoint(x + j * expand, y + i * expand, WHITE, DOT_PIXEL_2X2, DOT_FILL_RIGHTUP);
  111. }
  112. else
  113. {
  114. }
  115. }
  116. }
  117. }
  118. #include <stdio.h>
  119. #include <stdbool.h>
  120. #include <string.h>
  121. // 函数用于判断字符是否是ASCII字符
  122. static bool isASCII(char c)
  123. {
  124. return (c >= 32 && c <= 126);
  125. }
  126. // 函数用于判断字符是否是GBK编码的汉字
  127. static bool isGBKChinese(char c1, char c2)
  128. {
  129. return (c1 >= 0x81 && c1 <= 0xFE && c2 >= 0x40 && c2 <= 0xFE);
  130. }
  131. // 统计字符串中GBK编码的汉字和ASCII字符的个数
  132. static void countCharacters(const char *str, int *chineseCount, int *asciiCount)
  133. {
  134. *chineseCount = 0;
  135. *asciiCount = 0;
  136. int len = strlen(str);
  137. for (int i = 0; i < len; i++)
  138. {
  139. char c1 = str[i];
  140. if (isASCII(c1))
  141. {
  142. (*asciiCount)++;
  143. }
  144. else if (i + 1 < len)
  145. {
  146. char c2 = str[i + 1];
  147. if (isGBKChinese(c1, c2))
  148. {
  149. (*chineseCount)++;
  150. i++; // 跳过下一个字节
  151. }
  152. }
  153. }
  154. }
  155. // 函数用于计算字符串的宽度
  156. static int calculateStringWidth(const char *str, int en_px, int cn_px)
  157. {
  158. int len = 0;
  159. // if(str[0]==0)
  160. // {
  161. // len = strlen(str+1);
  162. // len++;
  163. // }
  164. // else
  165. // {
  166. len = strlen(str);
  167. // }
  168. int width = 0;
  169. for (int i = 0; i < len; i++)
  170. {
  171. // 判断字符是中文还是英文,并累加宽度
  172. if (str[i] >= 0 && str[i] <= 127)
  173. {
  174. // 英文字符
  175. width += en_px; // 假设英文字符宽度为12像素
  176. }
  177. else
  178. {
  179. // 中文字符
  180. width += cn_px; // 假设中文字符宽度为24像素
  181. i += 1;
  182. }
  183. }
  184. return width;
  185. }
  186. /*******下面是全屏缓冲区,快刷代码******/
  187. // Function to calculate and return an array of bar chart heights
  188. // Function to calculate and return an array of bar chart heights in pixels
  189. // Function to calculate and return an array of bar chart heights in pixels
  190. static unsigned int *calculateBarChartHeights(unsigned int data[], int size, unsigned int chartHeight)
  191. {
  192. unsigned int max = data[0];
  193. for (int i = 1; i < size; i++)
  194. {
  195. if (data[i] > max)
  196. {
  197. max = data[i];
  198. }
  199. }
  200. // Allocate memory for the array of heights
  201. unsigned int *heights = (unsigned int *)malloc(size * sizeof(unsigned int));
  202. for (int i = 0; i < size; i++)
  203. {
  204. if (data[i] == 0)
  205. {
  206. heights[i] = 0;
  207. }
  208. else if (data[i] == max)
  209. {
  210. // If data[i] is the maximum value, set height to chartHeight
  211. heights[i] = chartHeight;
  212. }
  213. else
  214. {
  215. // Calculate height in pixels based on proportion
  216. heights[i] = (unsigned int)(((double)data[i] / max) * chartHeight);
  217. }
  218. }
  219. return heights; // 返回高度数组
  220. }
  221. // 获得百分比曲线高度,最大值10000,为100%.XXxx为XX. 。整数位XX.小数位xx。
  222. static unsigned int *getBarChartHeights(unsigned int data[], int size, unsigned int chartHeight)
  223. {
  224. unsigned int *heights = (unsigned int *)malloc(size * sizeof(unsigned int));
  225. for (int i = 0; i < size; i++)
  226. {
  227. if (data[i] == 0)
  228. {
  229. heights[i] = 0;
  230. }
  231. else if (data[i] > 0 && data[i] < 10000)
  232. {
  233. heights[i] = (unsigned int)(((double)data[i] / 10000) * chartHeight);
  234. }
  235. else if (data[i] == 10000)
  236. {
  237. heights[i] = chartHeight;
  238. }
  239. else
  240. {
  241. ESP_LOGE(LOG_TAG, "ERR:>10000[%d]", i);
  242. heights[i] = 0;
  243. }
  244. }
  245. return heights; // 返回高度数组
  246. }
  247. // 字符居中对齐
  248. // 参数:展示字符串,屏幕宽度,单个英文字符像素,单个中文字符像素
  249. // 返回值:字符展示开始位置
  250. static int center_align(char *str, int screenWidth, int en_px, int cn_px)
  251. {
  252. // int chineseCount, asciiCount;
  253. // countCharacters(str, &chineseCount, &asciiCount);
  254. int textWidth = calculateStringWidth(str, en_px, cn_px);
  255. int x = (screenWidth - textWidth) / 2;
  256. return x;
  257. }
  258. static void QRGenerator_quick(char *input)
  259. {
  260. // printf("%s \n",(char*)input);
  261. int side;
  262. uint8_t bitdata[QR_MAX_BITDATA];
  263. // remove newline
  264. if (input[strlen(input) - 1] == '\n')
  265. {
  266. input[strlen(input) - 1] = 0;
  267. }
  268. side = qr_encode(QR_LEVEL_L, 0, input, 0, bitdata); // 生成二维码
  269. // printf("总 %dx%d\n\nlen =%d\n", side, side,strlen((char*)bitdata)); //二维码大小
  270. // memset(tmp_paint_buf,0,DISPLAY_BUFFER_SIZE/*sizeof(tmp_paint_buf)*/);
  271. // displayQRCode(side,bitdata,450,435);
  272. // displayQRCode(side,bitdata,500,435);
  273. displayQRCode_expand(side, bitdata, 478, 394, 2);
  274. }
  275. static uint8_t *partial_bar_chart_07_02_quick(Machine_info_t *info);
  276. static uint8_t *partial_bar_chart_07_03_quick(Machine_info_t *info);
  277. static uint8_t *partial_bar_chart_07_04_quick(Machine_info_t *info);
  278. static uint8_t *partial_bar_chart_07_02_quick(Machine_info_t *info)
  279. {
  280. #if 0
  281. // extern Node *clockIn_list;
  282. // int production_num = countClockNodes_byCMD(clockIn_list,0x00);
  283. // int repair_num = countClockNodes_byCMD(clockIn_list,0x01);
  284. // int inspection_num = countClockNodes_byCMD(clockIn_list,0x02);
  285. // int upKeep_num = countClockNodes_byCMD(clockIn_list,0x03);
  286. #else
  287. // 签到人数只加不减
  288. // int production_num = Machine_info.personnel_check_in[0];
  289. // int repair_num = Machine_info.personnel_check_in[1];
  290. // int inspection_num = Machine_info.personnel_check_in[2];
  291. // int upKeep_num = Machine_info.personnel_check_in[3];
  292. #endif
  293. char arr_string[20];
  294. uint32_t arr_num[4] = {Machine_info.checkIn_set[0].number, Machine_info.checkIn_set[1].number, Machine_info.checkIn_set[2].number, Machine_info.checkIn_set[3].number};
  295. unsigned int *numHeights = calculateBarChartHeights(arr_num, 4, 200);
  296. ESP_LOGW(LOG_TAG, "当前在岗:%ld ,%ld,%ld,%ld", arr_num[0], arr_num[1], arr_num[2], arr_num[3]);
  297. uint8_t *bar_chart_07_02_buf = (uint8_t *)calloc(480 * 300 / 8, sizeof(uint8_t)); // free();
  298. memset(tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  299. Paint_NewImage((uint8_t *)tmp_paint_buf, 480, 300, ROTATE_0, WHITE);
  300. Paint_DrawLine(40, 250, 440, 250, WHITE, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
  301. // S:screen
  302. // R:rectangle
  303. // C:CN
  304. // E:EN
  305. // L:LINE
  306. // ITV:(interval)
  307. #define BAR_LINE_Y_POS 250
  308. #define BAR_CHART_Y_MAX 250
  309. #define BAR_CHART_Y_MIN 50
  310. #define BAR_07_02_S_L_ITV 40
  311. #define BAR_07_02_L_R_ITV 18
  312. #define BAR_07_02_R_R_ITV 100
  313. #define BAR_07_02_R_WIDTH 64
  314. #define BAR_07_02_C_SKEW 2
  315. #define BAR_07_02_E_SKEW (24 + 4)
  316. #define BAR_07_02_R1 (BAR_07_02_S_L_ITV + BAR_07_02_L_R_ITV)
  317. #define BAR_07_02_C1 (BAR_07_02_R1 + BAR_07_02_C_SKEW)
  318. #define BAR_07_02_E1 (BAR_07_02_C1)
  319. #define BAR_07_02_R2 (BAR_07_02_R1 + BAR_07_02_R_R_ITV)
  320. #define BAR_07_02_C2 (BAR_07_02_C1 + BAR_07_02_R_R_ITV)
  321. #define BAR_07_02_E2 (BAR_07_02_E1 + BAR_07_02_R_R_ITV)
  322. #define BAR_07_02_R3 (BAR_07_02_R2 + BAR_07_02_R_R_ITV)
  323. #define BAR_07_02_C3 (BAR_07_02_C2 + BAR_07_02_R_R_ITV)
  324. #define BAR_07_02_E3 (BAR_07_02_E2 + BAR_07_02_R_R_ITV)
  325. #define BAR_07_02_R4 (BAR_07_02_R3 + BAR_07_02_R_R_ITV)
  326. #define BAR_07_02_C4 (BAR_07_02_C3 + BAR_07_02_R_R_ITV)
  327. #define BAR_07_02_E4 (BAR_07_02_E3 + BAR_07_02_R_R_ITV)
  328. char tmp_12[4][6] = {0};
  329. char tmp_34[4][6] = {0};
  330. memcpy(tmp_12[0], Machine_info.checkIn_set[0].other_name, 4);
  331. memcpy(tmp_34[0], Machine_info.checkIn_set[0].other_name + 4, 4);
  332. memcpy(tmp_12[1], Machine_info.checkIn_set[1].other_name, 4);
  333. memcpy(tmp_34[1], Machine_info.checkIn_set[1].other_name + 4, 4);
  334. memcpy(tmp_12[2], Machine_info.checkIn_set[2].other_name, 4);
  335. memcpy(tmp_34[2], Machine_info.checkIn_set[2].other_name + 4, 4);
  336. memcpy(tmp_12[3], Machine_info.checkIn_set[3].other_name, 4);
  337. memcpy(tmp_34[3], Machine_info.checkIn_set[3].other_name + 4, 4);
  338. memset(arr_string, 0, 20);
  339. itoa(arr_num[0], arr_string, 10);
  340. Paint_DrawRectangle(BAR_07_02_R1, BAR_LINE_Y_POS - numHeights[0], BAR_07_02_R1 + BAR_07_02_R_WIDTH, BAR_LINE_Y_POS, WHITE, 1, 1);
  341. // Paint_DrawString_CN(BAR_07_02_C1, BAR_LINE_Y_POS+BAR_07_02_C_SKEW,(char*)str_production, &chinese_type_24,FONT_FOREGROUND,FONT_BACKGROUND );
  342. Paint_DrawString_CN(BAR_07_02_C1, BAR_LINE_Y_POS + BAR_07_02_C_SKEW, tmp_12[0], &chinese_type_24, FONT_FOREGROUND, FONT_BACKGROUND);
  343. Paint_DrawString_CN(BAR_07_02_C1, BAR_LINE_Y_POS + BAR_07_02_C_SKEW + 24, tmp_34[0], &chinese_type_24, FONT_FOREGROUND, FONT_BACKGROUND);
  344. Paint_DrawString_EN(BAR_07_02_E1, BAR_LINE_Y_POS - BAR_07_02_E_SKEW - numHeights[0], (char *)arr_string, &ascii_type_12x24, FONT_FOREGROUND, FONT_BACKGROUND);
  345. memset(arr_string, 0, 20);
  346. itoa(arr_num[1], arr_string, 10);
  347. Paint_DrawRectangle(BAR_07_02_R2, BAR_LINE_Y_POS - numHeights[1], BAR_07_02_R2 + BAR_07_02_R_WIDTH, BAR_LINE_Y_POS, WHITE, 1, 1);
  348. // Paint_DrawString_CN(BAR_07_02_C2, BAR_LINE_Y_POS+BAR_07_02_C_SKEW, (char*)str_repair, &chinese_type_24,FONT_FOREGROUND,FONT_BACKGROUND );
  349. Paint_DrawString_CN(BAR_07_02_C2, BAR_LINE_Y_POS + BAR_07_02_C_SKEW, tmp_12[1], &chinese_type_24, FONT_FOREGROUND, FONT_BACKGROUND);
  350. Paint_DrawString_CN(BAR_07_02_C2, BAR_LINE_Y_POS + BAR_07_02_C_SKEW + 24, tmp_34[1], &chinese_type_24, FONT_FOREGROUND, FONT_BACKGROUND);
  351. Paint_DrawString_EN(BAR_07_02_E2, BAR_LINE_Y_POS - BAR_07_02_E_SKEW - numHeights[1], (char *)arr_string, &ascii_type_12x24, FONT_FOREGROUND, FONT_BACKGROUND);
  352. memset(arr_string, 0, 20);
  353. itoa(arr_num[2], arr_string, 10);
  354. Paint_DrawRectangle(BAR_07_02_R3, BAR_LINE_Y_POS - numHeights[2], BAR_07_02_R3 + BAR_07_02_R_WIDTH, BAR_LINE_Y_POS, WHITE, 1, 1);
  355. // Paint_DrawString_CN(BAR_07_02_C3, BAR_LINE_Y_POS+BAR_07_02_C_SKEW, (char*)str_inspection, &chinese_type_24,FONT_FOREGROUND,FONT_BACKGROUND );
  356. Paint_DrawString_CN(BAR_07_02_C3, BAR_LINE_Y_POS + BAR_07_02_C_SKEW, tmp_12[2], &chinese_type_24, FONT_FOREGROUND, FONT_BACKGROUND);
  357. Paint_DrawString_CN(BAR_07_02_C3, BAR_LINE_Y_POS + BAR_07_02_C_SKEW + 24, tmp_34[2], &chinese_type_24, FONT_FOREGROUND, FONT_BACKGROUND);
  358. Paint_DrawString_EN(BAR_07_02_E3, BAR_LINE_Y_POS - BAR_07_02_E_SKEW - numHeights[2], (char *)arr_string, &ascii_type_12x24, FONT_FOREGROUND, FONT_BACKGROUND);
  359. memset(arr_string, 0, 20);
  360. itoa(arr_num[3], arr_string, 10);
  361. Paint_DrawRectangle(BAR_07_02_R4, BAR_LINE_Y_POS - numHeights[3], BAR_07_02_R4 + BAR_07_02_R_WIDTH, BAR_LINE_Y_POS, WHITE, 1, 1);
  362. // Paint_DrawString_CN(BAR_07_02_C4, BAR_LINE_Y_POS+BAR_07_02_C_SKEW, (char*)str_upKeep, &chinese_type_24,FONT_FOREGROUND,FONT_BACKGROUND );
  363. Paint_DrawString_CN(BAR_07_02_C4, BAR_LINE_Y_POS + BAR_07_02_C_SKEW, tmp_12[3], &chinese_type_24, FONT_FOREGROUND, FONT_BACKGROUND);
  364. Paint_DrawString_CN(BAR_07_02_C4, BAR_LINE_Y_POS + BAR_07_02_C_SKEW + 24, tmp_34[3], &chinese_type_24, FONT_FOREGROUND, FONT_BACKGROUND);
  365. Paint_DrawString_EN(BAR_07_02_E4, BAR_LINE_Y_POS - BAR_07_02_E_SKEW - numHeights[3], (char *)arr_string, &ascii_type_12x24, FONT_FOREGROUND, FONT_BACKGROUND);
  366. memcpy(bar_chart_07_02_buf, Paint_info.Image, sizeof(uint8_t) * 480 * 300 / 8);
  367. free(numHeights);
  368. return bar_chart_07_02_buf;
  369. }
  370. static uint8_t *partial_bar_chart_07_03_quick(Machine_info_t *info)
  371. {
  372. char arr_string[20];
  373. uint32_t *timeHeights = calculateBarChartHeights(arr_heights, 6, 200);
  374. uint8_t *bar_chart_07_03_buf = (uint8_t *)calloc(480 * 300 / 8, sizeof(uint8_t));
  375. memset(tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  376. Paint_NewImage((UBYTE *)tmp_paint_buf, 480, 300, ROTATE_0, WHITE);
  377. Paint_DrawLine(30, 250, 450, 250, WHITE, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
  378. memset(arr_string, 0, 20);
  379. itoa(arr_heights[0], arr_string, 10);
  380. Paint_DrawRectangle(30 + 10, 250 - timeHeights[0], 30 + 10 + 50, 250, WHITE, 1, 1);
  381. // Paint_DrawString_CN(30+10+8, 250+8,(char*)str_operation, &chinese_type_24,FONT_FOREGROUND,FONT_BACKGROUND );
  382. Paint_DrawString_CN(30 + 10 + 8, 250 + 8, (char *)Machine_info.btn_operation, &chinese_type_24, FONT_FOREGROUND, FONT_BACKGROUND);
  383. Paint_DrawString_EN(30 + 10 + 8, 250 - timeHeights[0] - 4 - 24, arr_string, &ascii_type_12x24, FONT_FOREGROUND, FONT_BACKGROUND);
  384. memset(arr_string, 0, 20);
  385. itoa(arr_heights[1], arr_string, 10);
  386. Paint_DrawRectangle(30 + 10 + 70, 250 - timeHeights[1], 30 + 10 + 50 + 70, 250, WHITE, 1, 1);
  387. // Paint_DrawString_CN(30+10+8+70, 250+8,(char*)str_shutDown, &chinese_type_24,FONT_FOREGROUND,FONT_BACKGROUND );
  388. Paint_DrawString_CN(30 + 10 + 8 + 70, 250 + 8, (char *)Machine_info.btn_shutDown_info, &chinese_type_24, FONT_FOREGROUND, FONT_BACKGROUND);
  389. Paint_DrawString_EN(30 + 10 + 8 + 70, 250 - timeHeights[1] - 4 - 24, arr_string, &ascii_type_12x24, FONT_FOREGROUND, FONT_BACKGROUND);
  390. memset(arr_string, 0, 20);
  391. itoa(arr_heights[2], arr_string, 10);
  392. Paint_DrawRectangle(30 + 10 + 140, 250 - timeHeights[2], 30 + 10 + 50 + 140, 250, WHITE, 1, 1);
  393. // Paint_DrawString_CN(30+10+8+140, 250+8,(char*)str_breakDown, &chinese_type_24,FONT_FOREGROUND,FONT_BACKGROUND );
  394. Paint_DrawString_CN(30 + 10 + 8 + 140, 250 + 8, (char *)Machine_info.btn_breakDown_info, &chinese_type_24, FONT_FOREGROUND, FONT_BACKGROUND);
  395. Paint_DrawString_EN(30 + 10 + 8 + 140, 250 - timeHeights[2] - 4 - 24, arr_string, &ascii_type_12x24, FONT_FOREGROUND, FONT_BACKGROUND);
  396. memset(arr_string, 0, 20);
  397. itoa(arr_heights[3], arr_string, 10);
  398. Paint_DrawRectangle(30 + 10 + 210, 250 - timeHeights[3], 30 + 10 + 50 + 210, 250, WHITE, 1, 1);
  399. // Paint_DrawString_CN(30+10+8+210, 250+8,(char*)str_safeKeep, &chinese_type_24,FONT_FOREGROUND,FONT_BACKGROUND );
  400. Paint_DrawString_CN(30 + 10 + 8 + 210, 250 + 8, (char *)Machine_info.btn_safeKeep_info, &chinese_type_24, FONT_FOREGROUND, FONT_BACKGROUND);
  401. Paint_DrawString_EN(30 + 10 + 8 + 210, 250 - timeHeights[3] - 4 - 24, arr_string, &ascii_type_12x24, FONT_FOREGROUND, FONT_BACKGROUND);
  402. memset(arr_string, 0, 20);
  403. itoa(arr_heights[4], arr_string, 10);
  404. Paint_DrawRectangle(30 + 10 + 280, 250 - timeHeights[4], 30 + 10 + 50 + 280, 250, WHITE, 1, 1);
  405. // Paint_DrawString_CN(30+10+8+280, 250+8,(char*)str_upKeep, &chinese_type_24,FONT_FOREGROUND,FONT_BACKGROUND );
  406. Paint_DrawString_CN(30 + 10 + 8 + 280, 250 + 8, (char *)Machine_info.btn_upKeep_info, &chinese_type_24, FONT_FOREGROUND, FONT_BACKGROUND);
  407. Paint_DrawString_EN(30 + 10 + 8 + 280, 250 - timeHeights[4] - 4 - 24, arr_string, &ascii_type_12x24, FONT_FOREGROUND, FONT_BACKGROUND);
  408. memset(arr_string, 0, 20);
  409. itoa(arr_heights[5], arr_string, 10);
  410. Paint_DrawRectangle(30 + 10 + 350, 250 - timeHeights[5], 30 + 10 + 50 + 350, 250, WHITE, 1, 1);
  411. // Paint_DrawString_CN(30+10+8+350, 250+8,(char*)str_waitMaterials, &chinese_type_24,FONT_FOREGROUND,FONT_BACKGROUND );
  412. Paint_DrawString_CN(30 + 10 + 8 + 350, 250 + 8, (char *)Machine_info.btn_waitMaterials_info, &chinese_type_24, FONT_FOREGROUND, FONT_BACKGROUND);
  413. Paint_DrawString_EN(30 + 10 + 8 + 350, 250 - timeHeights[5] - 4 - 24, arr_string, &ascii_type_12x24, FONT_FOREGROUND, FONT_BACKGROUND);
  414. memcpy(bar_chart_07_03_buf, Paint_info.Image, sizeof(uint8_t) * 480 * 300 / 8);
  415. free(timeHeights);
  416. return bar_chart_07_03_buf;
  417. }
  418. static uint8_t *partial_bar_chart_07_04_quick(Machine_info_t *info)
  419. {
  420. char arr_string[20];
  421. uint32_t arr_num[4] = {Machine_info.checkIn_set[0].number, Machine_info.checkIn_set[1].number, Machine_info.checkIn_set[2].number, Machine_info.checkIn_set[3].number};
  422. uint32_t *arrHeights = calculateBarChartHeights(arr_heights, 6, 200);
  423. uint32_t *numHeights = calculateBarChartHeights(arr_num, 4, 200);
  424. uint8_t *bar_chart_07_04_buf = (uint8_t *)calloc(480 * 300 / 8, sizeof(uint8_t));
  425. memset(tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  426. Paint_NewImage((UBYTE *)tmp_paint_buf, 480, 300, ROTATE_0, WHITE);
  427. Paint_DrawLine(10, 250, 274, 250, WHITE, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
  428. Paint_DrawLine(294, 250, 470, 250, WHITE, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
  429. memset(arr_string, 0, 20);
  430. itoa(arr_heights[0], arr_string, 10);
  431. Paint_DrawRectangle(10 + 2, 250 - arrHeights[0], 10 + 2 + 40, 250, WHITE, 1, 1);
  432. Paint_DrawString_CN(10 + 2 + 8, 250 + 2, (char *)Machine_info.btn_operation, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  433. Paint_DrawString_EN(10 + 2 + 5, 250 - arrHeights[0] - 2 - 16, (char *)arr_string, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  434. memset(arr_string, 0, 20);
  435. itoa(arr_heights[1], arr_string, 10);
  436. Paint_DrawRectangle(10 + 2 + 44, 250 - arrHeights[1], 10 + 2 + 40 + 44, 250, WHITE, 1, 1);
  437. Paint_DrawString_CN(10 + 2 + 8 + 44, 250 + 2, (char *)Machine_info.btn_shutDown_info, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  438. Paint_DrawString_EN(10 + 2 + 5 + 44, 250 - arrHeights[1] - 2 - 16, (char *)arr_string, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  439. memset(arr_string, 0, 20);
  440. itoa(arr_heights[2], arr_string, 10);
  441. Paint_DrawRectangle(10 + 2 + 88, 250 - arrHeights[2], 10 + 2 + 40 + 88, 250, WHITE, 1, 1);
  442. Paint_DrawString_CN(10 + 2 + 8 + 88, 250 + 2, (char *)Machine_info.btn_breakDown_info, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  443. Paint_DrawString_EN(10 + 2 + 5 + 88, 250 - arrHeights[2] - 2 - 16, (char *)arr_string, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  444. memset(arr_string, 0, 20);
  445. itoa(arr_heights[3], arr_string, 10);
  446. Paint_DrawRectangle(10 + 2 + 132, 250 - arrHeights[3], 10 + 2 + 40 + 132, 250, WHITE, 1, 1);
  447. Paint_DrawString_CN(10 + 2 + 8 + 132, 250 + 2, (char *)Machine_info.btn_safeKeep_info, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  448. Paint_DrawString_EN(10 + 2 + 5 + 132, 250 - arrHeights[3] - 2 - 16, (char *)arr_string, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  449. memset(arr_string, 0, 20);
  450. itoa(arr_heights[4], arr_string, 10);
  451. Paint_DrawRectangle(10 + 2 + 176, 250 - arrHeights[4], 10 + 2 + 40 + 176, 250, WHITE, 1, 1);
  452. Paint_DrawString_CN(10 + 2 + 8 + 176, 250 + 2, (char *)Machine_info.btn_upKeep_info, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  453. Paint_DrawString_EN(10 + 2 + 5 + 176, 250 - arrHeights[4] - 2 - 16, (char *)arr_string, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  454. memset(arr_string, 0, 20);
  455. itoa(arr_heights[5], arr_string, 10);
  456. Paint_DrawRectangle(10 + 2 + 220, 250 - arrHeights[5], 10 + 2 + 40 + 220, 250, WHITE, 1, 1);
  457. Paint_DrawString_CN(10 + 2 + 8 + 220, 250 + 2, (char *)Machine_info.btn_waitMaterials_info, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  458. Paint_DrawString_EN(10 + 2 + 5 + 220, 250 - arrHeights[5] - 2 - 16, (char *)arr_string, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  459. // next
  460. char tmp_12[4][6] = {0};
  461. char tmp_34[4][6] = {0};
  462. memcpy(tmp_12[0], Machine_info.checkIn_set[0].other_name, 4);
  463. memcpy(tmp_34[0], Machine_info.checkIn_set[0].other_name + 4, 4);
  464. memcpy(tmp_12[1], Machine_info.checkIn_set[1].other_name, 4);
  465. memcpy(tmp_34[1], Machine_info.checkIn_set[1].other_name + 4, 4);
  466. memcpy(tmp_12[2], Machine_info.checkIn_set[2].other_name, 4);
  467. memcpy(tmp_34[2], Machine_info.checkIn_set[2].other_name + 4, 4);
  468. memcpy(tmp_12[3], Machine_info.checkIn_set[3].other_name, 4);
  469. memcpy(tmp_34[3], Machine_info.checkIn_set[3].other_name + 4, 4);
  470. memset(arr_string, 0, 20);
  471. itoa(arr_num[0], arr_string, 10);
  472. Paint_DrawRectangle(294 + 2, 250 - numHeights[0], 294 + 2 + 40, 250, WHITE, 1, 1);
  473. // Paint_DrawString_CN(294+2+8, 250+2,(char*)str_production, &chinese_type_16,FONT_FOREGROUND,FONT_BACKGROUND );
  474. Paint_DrawString_CN(294 + 2 + 8, 250 + 2, tmp_12[0], &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  475. Paint_DrawString_CN(294 + 2 + 8, 250 + 2 + 16, tmp_34[0], &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  476. Paint_DrawString_EN(292 + 2 + 5, 250 - numHeights[0] - 2 - 16, (char *)arr_string, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  477. memset(arr_string, 0, 20);
  478. itoa(arr_num[1], arr_string, 10);
  479. Paint_DrawRectangle(294 + 2 + 44, 250 - numHeights[1], 294 + 2 + 40 + 44, 250, WHITE, 1, 1);
  480. // Paint_DrawString_CN(294+2+8+44, 250+2,(char*)str_repair, &chinese_type_16,FONT_FOREGROUND,FONT_BACKGROUND );
  481. Paint_DrawString_CN(294 + 2 + 8 + 44, 250 + 2, tmp_12[1], &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  482. Paint_DrawString_CN(294 + 2 + 8 + 44, 250 + 2 + 16, tmp_34[1], &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  483. Paint_DrawString_EN(292 + 2 + 5 + 44, 250 - numHeights[1] - 2 - 16, (char *)arr_string, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  484. memset(arr_string, 0, 20);
  485. itoa(arr_num[2], arr_string, 10);
  486. Paint_DrawRectangle(294 + 2 + 88, 250 - numHeights[2], 294 + 2 + 40 + 88, 250, WHITE, 1, 1);
  487. // Paint_DrawString_CN(294+2+8+88, 250+2, (char*)str_inspection, &chinese_type_16,FONT_FOREGROUND,FONT_BACKGROUND );
  488. Paint_DrawString_CN(294 + 2 + 8 + 88, 250 + 2, tmp_12[2], &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  489. Paint_DrawString_CN(294 + 2 + 8 + 88, 250 + 2 + 16, tmp_34[2], &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  490. Paint_DrawString_EN(292 + 2 + 5 + 88, 250 - numHeights[2] - 2 - 16, (char *)arr_string, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  491. memset(arr_string, 0, 20);
  492. itoa(arr_num[3], arr_string, 10);
  493. Paint_DrawRectangle(294 + 2 + 132, 250 - numHeights[3], 294 + 2 + 40 + 132, 250, WHITE, 1, 1);
  494. // Paint_DrawString_CN(294+2+8+132, 250+2, (char*)str_upKeep, &chinese_type_16,FONT_FOREGROUND,FONT_BACKGROUND );
  495. Paint_DrawString_CN(294 + 2 + 8 + 132, 250 + 2, tmp_12[3], &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  496. Paint_DrawString_CN(294 + 2 + 8 + 132, 250 + 2 + 16, tmp_34[3], &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  497. Paint_DrawString_EN(292 + 2 + 5 + 132, 250 - numHeights[3] - 2 - 16, (char *)arr_string, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  498. free(arrHeights);
  499. free(numHeights);
  500. memcpy(bar_chart_07_04_buf, Paint_info.Image, sizeof(uint8_t) * 480 * 300 / 8);
  501. return bar_chart_07_04_buf;
  502. }
  503. #define RIGHT1_HIGHT 100
  504. #define RIGHT2_HIGHT 172
  505. static uint8_t *partial_right1_quick(Machine_info_t *info)
  506. {
  507. // Machine_info.batt_precent = 100;
  508. uint8_t *partial_right1_buf = (uint8_t *)calloc(RIGHT1_HIGHT * 480 / 8, sizeof(uint8_t));
  509. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  510. Paint_NewImage((uint8_t *)tmp_paint_buf, 480, RIGHT1_HIGHT, ROTATE_0, WHITE);
  511. Paint_DrawLine(10, 95, 470, 95, WHITE, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
  512. int x = center_align(&info->station_name, 480, 16, 32);
  513. Paint_DrawString_CN(x, 25, &info->station_name, &chinese_type_32, FONT_FOREGROUND, FONT_BACKGROUND);
  514. // 显示终端号码
  515. // printf(" terminal name x=%d--------------%s----------------\r\n",x,(char *)&info->terminal_name);
  516. x = center_align(&info->station_number, 480, 8, 16);
  517. Paint_DrawString_CN(x, 70, &info->station_number, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  518. // printf(" terminal_number x=%d--------------%s----------------\r\n",x,(char *)&info->terminal_number);
  519. #define BAT_X_OFFSET 2
  520. #define BAT_Y_OFFSET 2
  521. // batt
  522. Paint_DrawBitMap_Paste((uint8_t *)gImage_battery, 480 - 50 - BAT_X_OFFSET, 24, 37, 18, 1);
  523. #if 1
  524. switch (Machine_info.batt_precent)
  525. {
  526. case 0:
  527. break;
  528. case 1 ... 24:
  529. Paint_DrawRectangle(433 - BAT_X_OFFSET, 27, 439 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  530. break;
  531. case 25 ... 49:
  532. Paint_DrawRectangle(433 - BAT_X_OFFSET, 27, 439 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  533. Paint_DrawRectangle(441 - BAT_X_OFFSET, 27, 447 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  534. break;
  535. case 50 ... 74:
  536. Paint_DrawRectangle(433 - BAT_X_OFFSET, 27, 439 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  537. Paint_DrawRectangle(441 - BAT_X_OFFSET, 27, 447 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  538. Paint_DrawRectangle(449 - BAT_X_OFFSET, 27, 455 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  539. break;
  540. case 75 ... 99:
  541. Paint_DrawRectangle(433 - BAT_X_OFFSET, 27, 439 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  542. Paint_DrawRectangle(441 - BAT_X_OFFSET, 27, 447 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  543. Paint_DrawRectangle(449 - BAT_X_OFFSET, 27, 455 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  544. Paint_DrawRectangle(457 - BAT_X_OFFSET, 27, 462 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  545. break;
  546. case 100:
  547. Paint_DrawRectangle(433 - BAT_X_OFFSET, 27, 439 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  548. Paint_DrawRectangle(441 - BAT_X_OFFSET, 27, 447 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  549. Paint_DrawRectangle(449 - BAT_X_OFFSET, 27, 455 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  550. Paint_DrawRectangle(457 - BAT_X_OFFSET, 27, 462 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  551. break;
  552. default:
  553. break;
  554. }
  555. if (!decection_state_0()) // 判断充电中逻辑
  556. {
  557. Machine_info.batt_precent = read_battery_voltage();
  558. if (Machine_info.batt_precent >= 95)
  559. {
  560. Paint_DrawBitMap_Paste((uint8_t *)gImage_charging, 480 - 47 + 37, 27 - BAT_Y_OFFSET, 8, 18, 1);
  561. }
  562. else
  563. {
  564. Paint_DrawBitMap_Paste((uint8_t *)gImage_charging, 480 - 47 + 35, 27 - BAT_Y_OFFSET, 8, 18, 1);
  565. }
  566. }
  567. #else
  568. Paint_DrawBitMap_Paste((uint8_t *)gImage_filled, 480 - 47 + 37, 24, 8, 18, 1);
  569. Paint_DrawRectangle(433, 27, 439, 41, WHITE, 1, 1);
  570. Paint_DrawRectangle(441, 27, 447, 41, WHITE, 1, 1);
  571. Paint_DrawRectangle(449, 27, 455, 41, WHITE, 1, 1);
  572. Paint_DrawRectangle(457, 27, 462, 41, WHITE, 1, 1);
  573. #endif
  574. #if 0
  575. //rssi
  576. switch (Machine_info.rssi)
  577. {
  578. case 0:
  579. Paint_DrawRectangle(480-57-32,42-3,391+5,42,WHITE,1,0 );
  580. Paint_DrawRectangle(480-57-24,42-8,399+5,42,WHITE,1,0 );
  581. Paint_DrawRectangle(480-57-16,42-13,407+5,42,WHITE,1,0 );
  582. Paint_DrawRectangle(480-57-8,42-18,415+5,42,WHITE,1,0 );
  583. break;
  584. case 1 ... 24:
  585. Paint_DrawRectangle(480-57-32,42-3,391+5,42,WHITE,1,1 );
  586. Paint_DrawRectangle(480-57-24,42-8,399+5,42,WHITE,1,0 );
  587. Paint_DrawRectangle(480-57-16,42-13,407+5,42,WHITE,1,0 );
  588. Paint_DrawRectangle(480-57-8,42-18,415+5,42,WHITE,1,0 );
  589. break;
  590. case 25 ... 49:
  591. Paint_DrawRectangle(480-57-32,42-3,391+5,42,WHITE,1,1 );
  592. Paint_DrawRectangle(480-57-24,42-8,399+5,42,WHITE,1,1 );
  593. Paint_DrawRectangle(480-57-16,42-13,407+5,42,WHITE,1,0 );
  594. Paint_DrawRectangle(480-57-8,42-18,415+5,42,WHITE,1,0 );
  595. break;
  596. case 50 ... 74:
  597. Paint_DrawRectangle(480-57-32,42-3,391+5,42,WHITE,1,1 );
  598. Paint_DrawRectangle(480-57-24,42-8,399+5,42,WHITE,1,1 );
  599. Paint_DrawRectangle(480-57-16,42-13,407+5,42,WHITE,1,1 );
  600. Paint_DrawRectangle(480-57-8,42-18,415+5,42,WHITE,1,0 );
  601. break;
  602. case 75 ... 100:
  603. Paint_DrawRectangle(480-57-32,42-3,391+5,42,WHITE,1,1 );
  604. Paint_DrawRectangle(480-57-24,42-8,399+5,42,WHITE,1,1 );
  605. Paint_DrawRectangle(480-57-16,42-13,407+5,42,WHITE,1,1 );
  606. Paint_DrawRectangle(480-57-8,42-18,415+5,42,WHITE,1,1 );
  607. break;
  608. default:
  609. ESP_LOGW(LOG_TAG," err:rssi ");
  610. Paint_DrawRectangle(480-57-32,42-3,391+5,42,WHITE,1,1 );
  611. Paint_DrawRectangle(480-57-24,42-8,399+5,42,WHITE,1,1 );
  612. Paint_DrawRectangle(480-57-16,42-13,407+5,42,WHITE,1,1 );
  613. Paint_DrawRectangle(480-57-8,42-18,415+5,42,WHITE,1,1 );
  614. break;
  615. }
  616. #else
  617. // 添加在线离线
  618. uint8_t online[6] = {0xd4, 0xda, 0xcf, 0xdf, 0x00, 0x00}; // 在线
  619. uint8_t outline[6] = {0xc0, 0xeb, 0xcf, 0xdf, 0x00, 0x00}; // 离线
  620. Paint_DrawBitMap_Paste((uint8_t *)gImage_online, 480 - 50 - BAT_X_OFFSET - 50, 24, 37, 18, 1);
  621. if (Machine_info.paired)
  622. {
  623. Paint_DrawString_CN(480 - 50 - BAT_X_OFFSET - 50 + 3, 25, (char *)online, &chinese_type_16, FONT_BACKGROUND, FONT_FOREGROUND);
  624. }
  625. else
  626. {
  627. Paint_DrawString_CN(480 - 50 - BAT_X_OFFSET - 50 + 3, 25, (char *)outline, &chinese_type_16, FONT_BACKGROUND, FONT_FOREGROUND);
  628. }
  629. // Paint_DrawRectangle(480-57-32,40-3,391+5,40,WHITE,1,1 );
  630. // Paint_DrawRectangle(480-57-24,40-8,399+5,40,WHITE,1,1 );
  631. // Paint_DrawRectangle(480-57-16,40-13,407+5,40,WHITE,1,1 );
  632. // Paint_DrawRectangle(480-57-8,40-18,415+5,40,WHITE,1,0 );
  633. #endif
  634. memcpy(partial_right1_buf, Paint_info.Image, sizeof(uint8_t) * 480 * RIGHT1_HIGHT / 8);
  635. return partial_right1_buf;
  636. }
  637. #define MAX_NAME_STRING_LEN 52
  638. static void dis_name(char *tmp, int len) // times为空格的次数,如果为管理员要多加4次,管理员字符串->char str_0[14] = {0xb9,0xdc,0x20,0x20,0xc0,0xed,0x20,0x20,0xd4,0xb1,0xa3,0xba,0x00,0x00};
  639. {
  640. if (len < MAX_NAME_STRING_LEN)
  641. {
  642. return;
  643. }
  644. ESP_LOGW(LOG_TAG, "------dis name----");
  645. ESP_LOG_BUFFER_HEX(LOG_TAG, tmp, len);
  646. strcpy(&tmp[MAX_NAME_STRING_LEN], " ...");
  647. tmp[MAX_NAME_STRING_LEN + 4] = 0;
  648. tmp[MAX_NAME_STRING_LEN + 5] = 0;
  649. }
  650. static uint8_t *partial_right2_quick(void)
  651. {
  652. uint8_t *partial_right2_buf = (uint8_t *)calloc(RIGHT2_HIGHT * 480 / 8, sizeof(uint8_t));
  653. char buffer[200] = {0};
  654. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  655. Paint_NewImage((UBYTE *)tmp_paint_buf, 480, RIGHT2_HIGHT, ROTATE_0, WHITE);
  656. ESP_LOGE(LOG_TAG, "paint Charge_close %d %d %d %d %d", Machine_info.person[0].Charge_close, Machine_info.person[1].Charge_close, Machine_info.person[2].Charge_close,
  657. Machine_info.person[3].Charge_close, Machine_info.person[4].Charge_close);
  658. ESP_LOGW(LOG_TAG, "责任人人数 [%d][%d][%d][%d][%d]", person_get_num(0), person_get_num(1), person_get_num(2), person_get_num(3), person_get_num(4)); // 获取当前类型人员数量
  659. // 管理员不会关闭
  660. memset((uint8_t *)buffer, 0, sizeof(buffer));
  661. strcat(buffer, (char *)Machine_info.person[0].other_name);
  662. strcat(buffer, Machine_info.person[0].string_name);
  663. dis_name(buffer, strlen(buffer));
  664. Paint_DrawString_CN(10, 7, (char *)buffer, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  665. if (!Machine_info.person[1].Charge_close)
  666. {
  667. memset((uint8_t *)buffer, 0, sizeof(buffer));
  668. strcat(buffer, (char *)Machine_info.person[1].other_name);
  669. strcat(buffer, Machine_info.person[1].string_name);
  670. dis_name(buffer, strlen(buffer));
  671. Paint_DrawString_CN(10, 41, (char *)buffer, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  672. }
  673. if (!Machine_info.person[2].Charge_close)
  674. {
  675. memset((uint8_t *)buffer, 0, sizeof(buffer));
  676. strcat(buffer, (char *)Machine_info.person[2].other_name);
  677. strcat(buffer, Machine_info.person[2].string_name);
  678. dis_name(buffer, strlen(buffer));
  679. Paint_DrawString_CN(10, 75, (char *)buffer, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  680. }
  681. if (!Machine_info.person[4].Charge_close)
  682. {
  683. memset((uint8_t *)buffer, 0, sizeof(buffer));
  684. strcat(buffer, (char *)Machine_info.person[4].other_name);
  685. strcat(buffer, Machine_info.person[4].string_name);
  686. dis_name(buffer, strlen(buffer));
  687. Paint_DrawString_CN(10, 109, (char *)buffer, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  688. }
  689. if (!Machine_info.person[3].Charge_close)
  690. {
  691. memset((uint8_t *)buffer, 0, sizeof(buffer));
  692. strcat(buffer, (char *)Machine_info.person[3].other_name);
  693. strcat(buffer, Machine_info.person[3].string_name);
  694. dis_name(buffer, strlen(buffer));
  695. Paint_DrawString_CN(10, 143, (char *)buffer, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  696. }
  697. // ESP_LOG_BUFFER_HEX(LOG_TAG,buffer,strlen(buffer));
  698. Paint_DrawLine(10, 170, 470, 170, WHITE, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
  699. memcpy(partial_right2_buf, Paint_info.Image, sizeof(uint8_t) * 480 * RIGHT2_HIGHT / 8);
  700. return partial_right2_buf;
  701. }
  702. static char *right3_change_time_to_dis(bool flag) // flag为true 显示前四个小时 ,flag为false,显示最近
  703. {
  704. char arr_int[5];
  705. char arr_dec[5];
  706. char *arr_string = (char *)malloc(20 * sizeof(char));
  707. uint8_t time_min, time_hour;
  708. if (Machine_info.min >= 30)
  709. {
  710. if (Machine_info.hour >= 4)
  711. {
  712. time_hour = Machine_info.hour - 4;
  713. time_min = 30;
  714. }
  715. else
  716. {
  717. time_hour = Machine_info.hour + 20;
  718. time_min = 30;
  719. }
  720. }
  721. else
  722. {
  723. if (Machine_info.hour >= 4)
  724. {
  725. time_hour = Machine_info.hour - 4;
  726. time_min = 0;
  727. }
  728. else
  729. {
  730. time_hour = Machine_info.hour + 20;
  731. time_min = 0;
  732. }
  733. }
  734. if (flag)
  735. { // 前4小时
  736. memset(arr_string, 0, 20);
  737. itoa(time_hour, arr_int, 10);
  738. if (time_min == 0)
  739. {
  740. strcpy(arr_string, arr_int);
  741. strcat(arr_string, ":");
  742. strcat(arr_string, "00");
  743. }
  744. else
  745. {
  746. itoa(time_min, arr_dec, 10);
  747. strcpy(arr_string, arr_int);
  748. strcat(arr_string, ":");
  749. strcat(arr_string, arr_dec);
  750. }
  751. }
  752. else
  753. {
  754. memset(arr_string, 0, 20);
  755. itoa(Machine_info.hour, arr_int, 10);
  756. strcpy(arr_string, arr_int);
  757. strcat(arr_string, ":");
  758. if (Machine_info.min >= 30)
  759. {
  760. time_min = 30;
  761. itoa(time_min, arr_dec, 10);
  762. strcat(arr_string, arr_dec);
  763. }
  764. else
  765. {
  766. strcat(arr_string, "00");
  767. }
  768. }
  769. return arr_string;
  770. }
  771. static uint8_t *partial_right3_quick(void)
  772. {
  773. /* Get timestamp before entering sleep */
  774. // int64_t t_before_us = esp_timer_get_time();
  775. // //ESP_LOGW(LOG_TAG,"-=-=-=-=-=-=-=");
  776. // printf(" ==>[%lld]",t_before_us);
  777. uint8_t *partial_right3_buf = (uint8_t *)calloc(224 * 480 / 8, sizeof(uint8_t));
  778. #define __MAX_PIXEL 140
  779. uint32_t num_max = 0, i = 0, sum_products = 0;
  780. uint32_t num_totalProducts[8];
  781. uint32_t scale_UR[8];
  782. uint32_t scale_YR[8];
  783. uint8_t time_min, time_hour;
  784. char arr_string[20];
  785. char arr_int[5];
  786. char arr_dec[5];
  787. for (i = 0; i < 8; i++)
  788. {
  789. num_totalProducts[i] = Machine_info.num_goodProducts[i] + Machine_info.num_badProducts[i];
  790. scale_UR[i] = (Machine_info.scale_UR_int[i]) * 100 + Machine_info.scale_UR_dec[i];
  791. scale_YR[i] = (Machine_info.scale_YR_int[i]) * 100 + Machine_info.scale_YR_dec[i];
  792. // ESP_LOGW(LOG_TAG,"good:[%ld] bad[%ld]",num_goodProducts[i],num_badProducts[i]);
  793. // ESP_LOGW(LOG_TAG,"total:[%ld]",num_totalProducts[i]);
  794. // sum_products+=num_totalProducts[i];
  795. if (num_max < (Machine_info.num_goodProducts[i] + Machine_info.num_badProducts[i]))
  796. num_max = Machine_info.num_goodProducts[i] + Machine_info.num_badProducts[i];
  797. }
  798. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  799. Paint_NewImage((UBYTE *)tmp_paint_buf, 480, 224, ROTATE_0, WHITE);
  800. // Paint_DrawLine(10,2,470,2,WHITE,DOT_PIXEL_1X1,LINE_STYLE_DOTTED );
  801. Paint_DrawLine(10, 220, 470, 220, WHITE, DOT_PIXEL_1X1, LINE_STYLE_DOTTED);
  802. unsigned int *chartHeights = calculateBarChartHeights(num_totalProducts, sizeof(num_totalProducts) / sizeof(num_totalProducts[0]), __MAX_PIXEL);
  803. for (i = 0; i < 8; i++)
  804. {
  805. // chartHeights[i] = 140;
  806. Paint_DrawRectangle(60 + i * 25, 192 - chartHeights[i], 80 + i * 25, 192, WHITE, 1, 1);
  807. memset(arr_string, 0, 20);
  808. // itoa((int)num_totalProducts[i],arr_string,10);
  809. // 取消柱状图上方数值
  810. // Paint_DrawString_EN(60+i*25 ,192 - chartHeights[i]-8,(char*)arr_string, &ascii_type_5x7,FONT_FOREGROUND,FONT_BACKGROUND );
  811. // ESP_LOGW(LOG_TAG,"heights = %d",chartHeights[i]);
  812. }
  813. free(chartHeights);
  814. char *time_before = right3_change_time_to_dis(true);
  815. Paint_DrawString_EN(60, 192 + 2, time_before, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  816. free(time_before);
  817. time_before = right3_change_time_to_dis(false);
  818. Paint_DrawString_EN(60 + 150, 192 + 2, time_before, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  819. free(time_before);
  820. memset(arr_string, 0, 20);
  821. itoa(num_totalProducts[7], arr_string, 10);
  822. int x = center_align(&arr_string, 160, 16, 0);
  823. Paint_DrawString_EN(300 + x, 70, (char *)arr_string, &ascii_type_16x32, FONT_FOREGROUND, FONT_BACKGROUND);
  824. uint32_t tmp = 0;
  825. for (i = 0; i < 5; i++)
  826. {
  827. memset(arr_string, 0, 20); // 140 5
  828. tmp = (num_max / 5) * (5 - i);
  829. // strcpy(arr_string,tmp);
  830. // itoa(tmp,arr_string,10);//这里导致数值错误
  831. sprintf(arr_string, "%lu", tmp);
  832. // ESP_LOGW(LOG_TAG,"%s",arr_string);
  833. Paint_DrawString_EN(10, 48 + i * 30, (char *)arr_string, &ascii_type_5x7, FONT_FOREGROUND, FONT_BACKGROUND);
  834. // Paint_DrawString_EN(20,40+i*28,(char*)arr_string, &ascii_type_8x16,FONT_FOREGROUND,FONT_BACKGROUND );
  835. }
  836. for (i = 0; i < 5; i++) // ur yr y坐标
  837. {
  838. memset(arr_string, 0, 20);
  839. tmp = (100 / 5) * (5 - i);
  840. // strcpy(arr_string,tmp);
  841. itoa(tmp, arr_string, 10);
  842. strcat(arr_string, ".00%");
  843. Paint_DrawString_EN(60 + 200, 48 + i * 30, (char *)arr_string, &ascii_type_5x7, FONT_FOREGROUND, FONT_BACKGROUND);
  844. }
  845. char str_ur[8] = {0xbc, 0xda, 0xb6, 0xaf, 0xc2, 0xca, 0x00, 0x00};
  846. Paint_DrawString_CN(320, 170, (char *)str_ur, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND); // ur
  847. Paint_DrawLine(320, 170 + 16 + 3, 368, 170 + 16 + 3, WHITE, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
  848. char str_yr[8] = {0xc1, 0xbc, 0xc6, 0xb7, 0xc2, 0xca, 0x00, 0x00};
  849. Paint_DrawString_CN(390, 170, (char *)str_yr, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND); // yr
  850. Paint_DrawLine(390, 170 + 16 + 3, 438, 170 + 16 + 3, WHITE, DOT_PIXEL_1X1, LINE_STYLE_DOTTED_2);
  851. memset(arr_int, 0, 5);
  852. memset(arr_dec, 0, 5);
  853. memset(arr_string, 0, 20);
  854. itoa(Machine_info.scale_UR_int[7], arr_int, 10);
  855. itoa(Machine_info.scale_UR_dec[7], arr_dec, 10);
  856. strcpy(arr_string, arr_int);
  857. strcat(arr_string, ".");
  858. strcat(arr_string, arr_dec);
  859. strcat(arr_string, "%");
  860. x = center_align(&arr_string, 48, 8, 16);
  861. Paint_DrawString_EN(320 + x, 170 - 16 - 1, (char *)arr_string, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  862. memset(arr_int, 0, 5);
  863. memset(arr_dec, 0, 5);
  864. memset(arr_string, 0, 20);
  865. itoa(Machine_info.scale_YR_int[7], arr_int, 10);
  866. itoa(Machine_info.scale_YR_dec[7], arr_dec, 10);
  867. strcpy(arr_string, arr_int);
  868. strcat(arr_string, ".");
  869. strcat(arr_string, arr_dec);
  870. strcat(arr_string, "%");
  871. x = center_align(&arr_string, 48, 8, 16);
  872. Paint_DrawString_EN(390 + x, 170 - 16 - 1, (char *)arr_string, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  873. // drawQuadraticBezierCurve(uint8_t* framebuffer, int width, int height,
  874. // int x0, int y0, int x1, int y1, int x2, int y2,
  875. // uint8_t color, int thickness)
  876. unsigned int *UR_Heights = getBarChartHeights(scale_UR, sizeof(scale_UR) / sizeof(scale_UR[0]), __MAX_PIXEL);
  877. unsigned int *YR_Heights = getBarChartHeights(scale_YR, sizeof(scale_YR) / sizeof(scale_YR[0]), __MAX_PIXEL);
  878. unsigned int tmp_heihgts[6];
  879. unsigned int tmp1_heihgts[6];
  880. // https://zhuanlan.zhihu.com/p/46676386
  881. #if 1
  882. for (i = 0; i < 6; i++)
  883. {
  884. tmp_heihgts[i] = (UR_Heights[i + 1] + UR_Heights[i + 2]) / 2;
  885. tmp1_heihgts[i] = (YR_Heights[i + 1] + YR_Heights[i + 2]) / 2;
  886. }
  887. #else
  888. for (i = 0; i < 6; i++)
  889. {
  890. tmp_heihgts[i] = 30 + i * 10;
  891. tmp1_heihgts[i] = 10 + i * 10;
  892. }
  893. #endif
  894. // UR
  895. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72, 192 - UR_Heights[0], 72 + 25, 192 - UR_Heights[1], 72 + 25 + 12, 192 - tmp_heihgts[0], 0xff, 2);
  896. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 + 12, 192 - tmp_heihgts[0], 72 + 25 * 2, 192 - UR_Heights[2], 72 + 25 * 2 + 12, 192 - tmp_heihgts[1], 0xff, 2);
  897. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 2 + 12, 192 - tmp_heihgts[1], 72 + 25 * 3, 192 - UR_Heights[3], 72 + 25 * 3 + 12, 192 - tmp_heihgts[2], 0xff, 2);
  898. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 3 + 12, 192 - tmp_heihgts[2], 72 + 25 * 4, 192 - UR_Heights[4], 72 + 25 * 4 + 12, 192 - tmp_heihgts[3], 0xff, 2);
  899. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 4 + 12, 192 - tmp_heihgts[3], 72 + 25 * 5, 192 - UR_Heights[5], 72 + 25 * 5 + 12, 192 - tmp_heihgts[4], 0xff, 2);
  900. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 5 + 12, 192 - tmp_heihgts[4], 72 + 25 * 6, 192 - UR_Heights[6], 72 + 25 * 7, 192 - UR_Heights[7], 0xff, 2);
  901. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72, 192 - UR_Heights[0] + 2, 72 + 25, 192 - UR_Heights[1] + 2, 72 + 25 + 12, 192 - tmp_heihgts[0] + 2, 0, 2);
  902. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 + 12, 192 - tmp_heihgts[0] + 2, 72 + 25 * 2, 192 - UR_Heights[2] + 2, 72 + 25 * 2 + 12, 192 - tmp_heihgts[1] + 2, 0, 2);
  903. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 2 + 12, 192 - tmp_heihgts[1] + 2, 72 + 25 * 3, 192 - UR_Heights[3] + 2, 72 + 25 * 3 + 12, 192 - tmp_heihgts[2] + 2, 0, 2);
  904. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 3 + 12, 192 - tmp_heihgts[2] + 2, 72 + 25 * 4, 192 - UR_Heights[4] + 2, 72 + 25 * 4 + 12, 192 - tmp_heihgts[3] + 2, 0, 2);
  905. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 4 + 12, 192 - tmp_heihgts[3] + 2, 72 + 25 * 5, 192 - UR_Heights[5] + 2, 72 + 25 * 5 + 12, 192 - tmp_heihgts[4] + 2, 0, 2);
  906. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 5 + 12, 192 - tmp_heihgts[4] + 2, 72 + 25 * 6, 192 - UR_Heights[6] + 2, 72 + 25 * 7, 192 - UR_Heights[7] + 2, 0, 2);
  907. // YR
  908. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72, 192 - YR_Heights[0], 72 + 25, 192 - YR_Heights[1], 72 + 25 + 12, 192 - tmp1_heihgts[0], 0xff, 1);
  909. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 + 12, 192 - tmp1_heihgts[0], 72 + 25 * 2, 192 - YR_Heights[2], 72 + 25 * 2 + 12, 192 - tmp1_heihgts[1], 0xff, 1);
  910. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 2 + 12, 192 - tmp1_heihgts[1], 72 + 25 * 3, 192 - YR_Heights[3], 72 + 25 * 3 + 12, 192 - tmp1_heihgts[2], 0xff, 1);
  911. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 3 + 12, 192 - tmp1_heihgts[2], 72 + 25 * 4, 192 - YR_Heights[4], 72 + 25 * 4 + 12, 192 - tmp1_heihgts[3], 0xff, 1);
  912. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 4 + 12, 192 - tmp1_heihgts[3], 72 + 25 * 5, 192 - YR_Heights[5], 72 + 25 * 5 + 12, 192 - tmp1_heihgts[4], 0xff, 1);
  913. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 5 + 12, 192 - tmp1_heihgts[4], 72 + 25 * 6, 192 - YR_Heights[6], 72 + 25 * 7, 192 - YR_Heights[7], 0xff, 1);
  914. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72, 192 - YR_Heights[0] + 1, 72 + 25, 192 - YR_Heights[1] + 1, 72 + 25 + 12, 192 - tmp1_heihgts[0], 0, 1);
  915. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 + 12, 192 - tmp1_heihgts[0] + 1, 72 + 25 * 2, 192 - YR_Heights[2] + 1, 72 + 25 * 2 + 12, 192 - tmp1_heihgts[1] + 1, 0, 1);
  916. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 2 + 12, 192 - tmp1_heihgts[1] + 1, 72 + 25 * 3, 192 - YR_Heights[3] + 1, 72 + 25 * 3 + 12, 192 - tmp1_heihgts[2] + 1, 0, 1);
  917. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 3 + 12, 192 - tmp1_heihgts[2] + 1, 72 + 25 * 4, 192 - YR_Heights[4] + 1, 72 + 25 * 4 + 12, 192 - tmp1_heihgts[3] + 1, 0, 1);
  918. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 4 + 12, 192 - tmp1_heihgts[3] + 1, 72 + 25 * 5, 192 - YR_Heights[5] + 1, 72 + 25 * 5 + 12, 192 - tmp1_heihgts[4] + 1, 0, 1);
  919. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 5 + 12, 192 - tmp1_heihgts[4] + 1, 72 + 25 * 6, 192 - YR_Heights[6] + 1, 72 + 25 * 7, 192 - YR_Heights[7] + 1, 0, 1);
  920. free(UR_Heights);
  921. free(YR_Heights);
  922. Paint_DrawLine(60, 192, 80 + 7 * 25, 192, WHITE, DOT_PIXEL_2X2, LINE_STYLE_SOLID); // 表格线
  923. extern Node *clockIn_list;
  924. // int production_num = countClockNodes_byCMD(clockIn_list,0x00);
  925. // int repair_num = countClockNodes_byCMD(clockIn_list,0x01);
  926. // int upKeep_num = countClockNodes_byCMD(clockIn_list,0x03);
  927. // int inspection_num = countClockNodes_byCMD(clockIn_list,0x02);
  928. int type_num[4] = {countClockNodes_byCMD(clockIn_list, 0x00), countClockNodes_byCMD(clockIn_list, 0x01), countClockNodes_byCMD(clockIn_list, 0x02), countClockNodes_byCMD(clockIn_list, 0x03)};
  929. ESP_LOGI(LOG_TAG, "在岗人数 :[%d] [%d] [%d] [%d]", type_num[0], type_num[1], type_num[2], type_num[3]);
  930. char str_arr[20];
  931. char str_ren[] = {0xc8, 0xcb, 0x00, 0x00};
  932. char str_Currently[] = {0xb5, 0xb1, 0xc7, 0xb0, 0xd4, 0xda, 0xb8, 0xda, 0x3a, 0xba, 0x00, 0x00}; // 当前在岗B5B1C7B0D4DAB8DAA3BA
  933. // char str_test[] = {0xB2,0xE2,0xCA,0xD4,0xB8,0xBA,0xD4,0xF0,0x00,0x00};
  934. // memcpy((char*)Machine_info.checkIn_set[3].other_name,str_test,strlen(str_test));//测试签到人数
  935. int all_len = 0;
  936. int other_name_len = 0;
  937. Paint_DrawString_CN(10, 5, (char *)str_Currently, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  938. memset(str_arr, 0, 20);
  939. itoa(type_num[0], str_arr, 10);
  940. other_name_len = strlen((char *)Machine_info.checkIn_set[0].other_name) * 8;
  941. all_len = other_name_len + strlen(str_arr) * 8;
  942. if (!Machine_info.checkIn_set[0].checkIn_close)
  943. {
  944. Paint_DrawString_CN(10 + 16 * 5, 5, (char *)Machine_info.checkIn_set[0].other_name, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  945. Paint_DrawString_EN(10 + 16 * 5 + other_name_len, 5, (char *)str_arr, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  946. Paint_DrawString_CN(10 + 16 * 5 + all_len, 5, (char *)str_ren, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  947. }
  948. memset(str_arr, 0, 20);
  949. itoa(type_num[1], str_arr, 10);
  950. other_name_len = strlen((char *)Machine_info.checkIn_set[1].other_name) * 8;
  951. all_len = other_name_len + strlen(str_arr) * 8;
  952. if (!Machine_info.checkIn_set[1].checkIn_close)
  953. {
  954. Paint_DrawString_CN(186, 5, (char *)Machine_info.checkIn_set[1].other_name, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  955. Paint_DrawString_EN(186 + other_name_len, 5, (char *)str_arr, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  956. Paint_DrawString_CN(186 + all_len, 5, (char *)str_ren, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  957. }
  958. memset(str_arr, 0, 20);
  959. itoa(type_num[2], str_arr, 10);
  960. other_name_len = strlen((char *)Machine_info.checkIn_set[2].other_name) * 8;
  961. all_len = other_name_len + strlen(str_arr) * 8;
  962. if (!Machine_info.checkIn_set[2].checkIn_close)
  963. {
  964. Paint_DrawString_CN(282, 5, (char *)Machine_info.checkIn_set[2].other_name, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  965. Paint_DrawString_EN(282 + other_name_len, 5, (char *)str_arr, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  966. Paint_DrawString_CN(282 + all_len, 5, (char *)str_ren, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  967. }
  968. memset(str_arr, 0, 20);
  969. itoa(type_num[3], str_arr, 10);
  970. other_name_len = strlen((char *)Machine_info.checkIn_set[3].other_name) * 8;
  971. all_len = other_name_len + strlen(str_arr) * 8;
  972. if (!Machine_info.checkIn_set[3].checkIn_close)
  973. {
  974. Paint_DrawString_CN(378, 5, (char *)Machine_info.checkIn_set[3].other_name, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  975. Paint_DrawString_EN(378 + other_name_len, 5, (char *)str_arr, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  976. Paint_DrawString_CN(378 + all_len, 5, (char *)str_ren, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  977. }
  978. memcpy(partial_right3_buf, Paint_info.Image, sizeof(uint8_t) * 480 * 224 / 8);
  979. return partial_right3_buf;
  980. }
  981. static uint8_t *partial_right3_2_quick(void)
  982. {
  983. uint8_t *partial_right3_buf = (uint8_t *)calloc(224 * 480 / 8, sizeof(uint8_t));
  984. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  985. Paint_NewImage((UBYTE *)tmp_paint_buf, 480, 224, ROTATE_0, WHITE);
  986. Paint_DrawLine(10, 220, 470, 220, WHITE, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); // 分隔右屏第三部分和第四部分线表格线
  987. #if 0
  988. extern Node *clockIn_list;
  989. int production_num = countClockNodes_byCMD(clockIn_list,0x00);
  990. int repair_num = countClockNodes_byCMD(clockIn_list,0x01);
  991. int upKeep_num = countClockNodes_byCMD(clockIn_list,0x03);
  992. int inspection_num = countClockNodes_byCMD(clockIn_list,0x02);
  993. ESP_LOGD(LOG_TAG,"(2)生产【%d】,巡检【%d】,保养【%d】,维修【%d】",production_num,repair_num,upKeep_num,inspection_num);
  994. char str_arr[20];
  995. char str_ren[4] = {0xc8,0xcb,0x00,0x00};
  996. char str_now_and_production[16] = {0xb5,0xb1,0xc7,0xb0,0xd4,0xda,0xb8,0xda,0xa3,0xba,0xc9,0xfa,0xb2,0xfa,0x00,0x00};//当前在岗:生产
  997. // char str_inspection[6] = {0xd1,0xb2,0xbc,0xec,0x00,0x00};
  998. // char str_upKeep[]
  999. memset(str_arr,0,20);
  1000. itoa(production_num,str_arr,10);
  1001. Paint_DrawString_CN(10, 5,(char*)str_now_and_production, &chinese_type_16,FONT_FOREGROUND,FONT_BACKGROUND );
  1002. Paint_DrawString_EN(10+16*7,5,(char*)str_arr, &ascii_type_8x16,FONT_FOREGROUND,FONT_BACKGROUND );
  1003. Paint_DrawString_CN(10+16*7+strlen(str_arr)*8, 5,(char*)str_ren, &chinese_type_16,FONT_FOREGROUND,FONT_BACKGROUND );
  1004. memset(str_arr,0,20);
  1005. itoa(inspection_num,str_arr,10);
  1006. Paint_DrawString_CN(180, 5,(char*)str_inspection, &chinese_type_16,FONT_FOREGROUND,FONT_BACKGROUND );
  1007. Paint_DrawString_EN(180+16*2,5,(char*)str_arr, &ascii_type_8x16,FONT_FOREGROUND,FONT_BACKGROUND );
  1008. Paint_DrawString_CN(180+16*2+strlen(str_arr)*8, 5,(char*)str_ren, &chinese_type_16,FONT_FOREGROUND,FONT_BACKGROUND );
  1009. memset(str_arr,0,20);
  1010. itoa(upKeep_num,str_arr,10);
  1011. Paint_DrawString_CN(280, 5,(char*)str_upKeep, &chinese_type_16,FONT_FOREGROUND,FONT_BACKGROUND );
  1012. Paint_DrawString_EN(280+16*2,5,(char*)str_arr, &ascii_type_8x16,FONT_FOREGROUND,FONT_BACKGROUND );
  1013. Paint_DrawString_CN(280+16*2+strlen(str_arr)*8, 5,(char*)str_ren, &chinese_type_16,FONT_FOREGROUND,FONT_BACKGROUND );
  1014. memset(str_arr,0,20);
  1015. itoa(repair_num,str_arr,10);
  1016. Paint_DrawString_CN(380, 5,(char*)str_repair, &chinese_type_16,FONT_FOREGROUND,FONT_BACKGROUND );
  1017. Paint_DrawString_EN(380+16*2,5,(char*)str_arr, &ascii_type_8x16,FONT_FOREGROUND,FONT_BACKGROUND );
  1018. Paint_DrawString_CN(380+16*2+strlen(str_arr)*8, 5,(char*)str_ren, &chinese_type_16,FONT_FOREGROUND,FONT_BACKGROUND );
  1019. #else
  1020. extern Node *clockIn_list;
  1021. int type_num[4] = {countClockNodes_byCMD(clockIn_list, 0x00), countClockNodes_byCMD(clockIn_list, 0x01), countClockNodes_byCMD(clockIn_list, 0x02), countClockNodes_byCMD(clockIn_list, 0x03)};
  1022. char str_arr[20];
  1023. ESP_LOGI(LOG_TAG, "#在岗人数 :[%d] [%d] [%d] [%d]", type_num[0], type_num[1], type_num[2], type_num[3]);
  1024. char str_ren[] = {0xc8, 0xcb, 0x00, 0x00};
  1025. char str_Currently[] = {0xb5, 0xb1, 0xc7, 0xb0, 0xd4, 0xda, 0xb8, 0xda, 0x3a, 0xba, 0x00, 0x00}; // 当前在岗B5B1C7B0D4DAB8DAA3BA
  1026. int all_len = 0;
  1027. int other_name_len = 0;
  1028. Paint_DrawString_CN(10, 5, (char *)str_Currently, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  1029. memset(str_arr, 0, 20);
  1030. itoa(type_num[0], str_arr, 10);
  1031. other_name_len = strlen((char *)Machine_info.checkIn_set[0].other_name) * 8;
  1032. all_len = other_name_len + strlen(str_arr) * 8;
  1033. if (!Machine_info.checkIn_set[0].checkIn_close)
  1034. {
  1035. Paint_DrawString_CN(10 + 16 * 5, 5, (char *)Machine_info.checkIn_set[0].other_name, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  1036. Paint_DrawString_EN(10 + 16 * 5 + other_name_len, 5, (char *)str_arr, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  1037. Paint_DrawString_CN(10 + 16 * 5 + all_len, 5, (char *)str_ren, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  1038. }
  1039. memset(str_arr, 0, 20);
  1040. itoa(type_num[1], str_arr, 10);
  1041. other_name_len = strlen((char *)Machine_info.checkIn_set[1].other_name) * 8;
  1042. all_len = other_name_len + strlen(str_arr) * 8;
  1043. if (!Machine_info.checkIn_set[1].checkIn_close)
  1044. {
  1045. Paint_DrawString_CN(186, 5, (char *)Machine_info.checkIn_set[1].other_name, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  1046. Paint_DrawString_EN(186 + other_name_len, 5, (char *)str_arr, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  1047. Paint_DrawString_CN(186 + all_len, 5, (char *)str_ren, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  1048. }
  1049. memset(str_arr, 0, 20);
  1050. itoa(type_num[2], str_arr, 10);
  1051. other_name_len = strlen((char *)Machine_info.checkIn_set[2].other_name) * 8;
  1052. all_len = other_name_len + strlen(str_arr) * 8;
  1053. if (!Machine_info.checkIn_set[2].checkIn_close)
  1054. {
  1055. Paint_DrawString_CN(282, 5, (char *)Machine_info.checkIn_set[2].other_name, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  1056. Paint_DrawString_EN(282 + other_name_len, 5, (char *)str_arr, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  1057. Paint_DrawString_CN(282 + all_len, 5, (char *)str_ren, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  1058. }
  1059. memset(str_arr, 0, 20);
  1060. itoa(type_num[3], str_arr, 10);
  1061. other_name_len = strlen((char *)Machine_info.checkIn_set[3].other_name) * 8;
  1062. all_len = other_name_len + strlen(str_arr) * 8;
  1063. if (!Machine_info.checkIn_set[3].checkIn_close)
  1064. {
  1065. Paint_DrawString_CN(378, 5, (char *)Machine_info.checkIn_set[3].other_name, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  1066. Paint_DrawString_EN(378 + other_name_len, 5, (char *)str_arr, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  1067. Paint_DrawString_CN(378 + all_len, 5, (char *)str_ren, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  1068. }
  1069. memcpy(partial_right3_buf, Paint_info.Image, sizeof(uint8_t) * 480 * 224 / 8);
  1070. #endif
  1071. // 画表格
  1072. int i;
  1073. char arr_string[20];
  1074. uint32_t tmp = 0;
  1075. // 柱状图
  1076. uint16_t num_max_manHour = 0;
  1077. uint32_t num_tmp[8];
  1078. for (i = 0; i < 8; i++)
  1079. {
  1080. num_tmp[i] = (uint32_t)Machine_info.num_manHour[i];
  1081. }
  1082. unsigned int *manHour_Heights = calculateBarChartHeights(num_tmp, 8, __MAX_PIXEL);
  1083. for (i = 0; i < 8; i++)
  1084. {
  1085. if (num_max_manHour < Machine_info.num_manHour[i])
  1086. {
  1087. num_max_manHour = Machine_info.num_manHour[i];
  1088. }
  1089. // Paint_DrawRectangle(60+i*25 ,192 - manHour_Heights[i] ,80+i*25, 192,WHITE,1,1 );
  1090. Paint_DrawRectangle(60 + i * 25, 193 - manHour_Heights[i], 80 + i * 25, 193, WHITE, 1, 1);
  1091. memset(arr_string, 0, 20);
  1092. itoa((int)Machine_info.num_manHour[i], arr_string, 10);
  1093. // ESP_LOGW(LOG_TAG,"%s",arr_string);
  1094. // 取消柱状图上方数值
  1095. Paint_DrawString_EN(60 + i * 25, 192 - manHour_Heights[i] - 8, (char *)arr_string, &ascii_type_5x7, FONT_FOREGROUND, FONT_BACKGROUND);
  1096. // ESP_LOGW(LOG_TAG,"manHour_Heights = %d,num_manHour = %d,max_manHour = %d ",manHour_Heights[i],Machine_info.num_manHour[i],num_max_manHour);
  1097. }
  1098. for (i = 0; i < 5; i++)
  1099. {
  1100. tmp = ((int)(num_max_manHour / 5)) * (5 - i);
  1101. memset(arr_string, 0, 20); // 140 5
  1102. // strcpy(arr_string,tmp);
  1103. // itoa(tmp,arr_string,10);//这里导致数值错误
  1104. sprintf(arr_string, "%lu", tmp);
  1105. // ESP_LOGW(LOG_TAG,"3——2 %s",arr_string);
  1106. Paint_DrawString_EN(20, 48 + i * 30, (char *)arr_string, &ascii_type_5x7, FONT_FOREGROUND, FONT_BACKGROUND);
  1107. }
  1108. // 右屏3_2 贝塞尔曲线
  1109. uint16_t num_max_people = 0;
  1110. for (i = 0; i < 8; i++)
  1111. {
  1112. num_tmp[i] = (uint32_t)Machine_info.num_people[i];
  1113. }
  1114. unsigned int *people_Heights = calculateBarChartHeights(num_tmp, sizeof(Machine_info.num_people) / sizeof(Machine_info.num_people[0]), __MAX_PIXEL);
  1115. unsigned int tmp_heihgts[6];
  1116. for (i = 0; i < 8; i++)
  1117. {
  1118. if (num_max_people < Machine_info.num_people[i])
  1119. {
  1120. num_max_people = Machine_info.num_people[i];
  1121. }
  1122. // ESP_LOGW(LOG_TAG,"num_people[%d]=(%d),max :[%d]",i,Machine_info.num_people[i],num_max_people);
  1123. }
  1124. // https://zhuanlan.zhihu.com/p/46676386
  1125. for (i = 0; i < 6; i++)
  1126. {
  1127. tmp_heihgts[i] = (people_Heights[i + 1] + people_Heights[i + 2]) / 2;
  1128. }
  1129. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72, 192 - people_Heights[0], 72 + 25, 192 - people_Heights[1], 72 + 25 + 12, 192 - tmp_heihgts[0], 0xff, 1);
  1130. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 + 12, 192 - tmp_heihgts[0], 72 + 25 * 2, 192 - people_Heights[2], 72 + 25 * 2 + 12, 192 - tmp_heihgts[1], 0xff, 1);
  1131. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 2 + 12, 192 - tmp_heihgts[1], 72 + 25 * 3, 192 - people_Heights[3], 72 + 25 * 3 + 12, 192 - tmp_heihgts[2], 0xff, 1);
  1132. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 3 + 12, 192 - tmp_heihgts[2], 72 + 25 * 4, 192 - people_Heights[4], 72 + 25 * 4 + 12, 192 - tmp_heihgts[3], 0xff, 1);
  1133. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 4 + 12, 192 - tmp_heihgts[3], 72 + 25 * 5, 192 - people_Heights[5], 72 + 25 * 5 + 12, 192 - tmp_heihgts[4], 0xff, 1);
  1134. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 5 + 12, 192 - tmp_heihgts[4], 72 + 25 * 6, 192 - people_Heights[6], 72 + 25 * 7, 192 - people_Heights[7], 0xff, 1);
  1135. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72, 192 - people_Heights[0] - 1, 72 + 25, 192 - people_Heights[1] - 1, 72 + 25 + 12, 192 - tmp_heihgts[0], 0, 1);
  1136. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 + 12, 192 - tmp_heihgts[0] - 1, 72 + 25 * 2, 192 - people_Heights[2] - 1, 72 + 25 * 2 + 12, 192 - tmp_heihgts[1] - 1, 0, 1);
  1137. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 2 + 12, 192 - tmp_heihgts[1] - 1, 72 + 25 * 3, 192 - people_Heights[3] - 1, 72 + 25 * 3 + 12, 192 - tmp_heihgts[2] - 1, 0, 1);
  1138. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 3 + 12, 192 - tmp_heihgts[2] - 1, 72 + 25 * 4, 192 - people_Heights[4] - 1, 72 + 25 * 4 + 12, 192 - tmp_heihgts[3] - 1, 0, 1);
  1139. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 4 + 12, 192 - tmp_heihgts[3] - 1, 72 + 25 * 5, 192 - people_Heights[5] - 1, 72 + 25 * 5 + 12, 192 - tmp_heihgts[4] - 1, 0, 1);
  1140. drawQuadraticBezierCurve(Paint_info.Image, 480, 224, 72 + 25 * 5 + 12, 192 - tmp_heihgts[4] - 1, 72 + 25 * 6, 192 - people_Heights[6] - 1, 72 + 25 * 7, 192 - people_Heights[7] - 1, 0, 1);
  1141. for (i = 0; i < 5; i++)
  1142. {
  1143. memset(arr_string, 0, 20);
  1144. if ((num_max_people <= 5) && (i == 0))
  1145. {
  1146. tmp = num_max_people;
  1147. }
  1148. else
  1149. {
  1150. tmp = (num_max_people / 5) * (5 - i);
  1151. }
  1152. sprintf(arr_string, "%lu", tmp);
  1153. // ESP_LOGW(LOG_TAG,"%s",arr_string);
  1154. // ESP_LOG_BUFFER_HEX(LOG_TAG,arr_string,30);
  1155. Paint_DrawString_EN(60 + 200, 48 + i * 30, (char *)arr_string, &ascii_type_5x7, FONT_FOREGROUND, FONT_BACKGROUND);
  1156. }
  1157. free(manHour_Heights);
  1158. free(people_Heights);
  1159. Paint_DrawLine(60, 193, 80 + 7 * 25, 193, WHITE, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
  1160. // 画表格结束
  1161. memset(arr_string, 0, 20);
  1162. itoa(Machine_info.num_manHour[7], arr_string, 10); // 最近工时显示
  1163. i = center_align(&arr_string, 160, 16, 32);
  1164. Paint_DrawString_EN(300 + i, 70, (char *)arr_string, &ascii_type_16x32, FONT_FOREGROUND, FONT_BACKGROUND);
  1165. memset(arr_string, 0, 20);
  1166. itoa(Machine_info.num_people[7], arr_string, 10); // 最近人数显示
  1167. // strcat(arr_string,"123456");
  1168. i = center_align(&arr_string, 160, 8, 16);
  1169. Paint_DrawString_EN(300 + i, 150, (char *)arr_string, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  1170. char str_people[8] = {0xC8, 0xCB, 0xCA, 0xFD, 0x00, 0x00};
  1171. // i = center_align(&arr_string,160,8,16);
  1172. Paint_DrawString_CN(300 + i + strlen(arr_string) * 4 - 16, 165, (char *)str_people, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND); // ur
  1173. // Paint_DrawLine(300+i,167+18,300+i+strlen(arr_string)*8,167+18,WHITE,DOT_PIXEL_1X1,LINE_STYLE_DOTTED );
  1174. Paint_DrawLine(300 + i + strlen(arr_string) * 4 - 16, 167 + 18, 300 + i + strlen(arr_string) * 4 + 16, 167 + 18, WHITE, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
  1175. char *time_before = right3_change_time_to_dis(true);
  1176. Paint_DrawString_EN(60, 192 + 2, time_before, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  1177. free(time_before);
  1178. time_before = right3_change_time_to_dis(false);
  1179. Paint_DrawString_EN(60 + 150, 192 + 2, time_before, &ascii_type_8x16, FONT_FOREGROUND, FONT_BACKGROUND);
  1180. free(time_before);
  1181. memcpy(partial_right3_buf, Paint_info.Image, sizeof(uint8_t) * 480 * 224 / 8);
  1182. return partial_right3_buf;
  1183. }
  1184. static uint8_t *partial_right4_quick(void)
  1185. {
  1186. uint8_t *partial_right4_buf = (uint8_t *)calloc(152 * 480 / 8, sizeof(uint8_t));
  1187. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1188. char str_announcement[8] = {0xb9, 0xab, 0xb8, 0xe6, 0x3a, 0x00, 0x00, 0x00};
  1189. Paint_NewImage((UBYTE *)tmp_paint_buf, 480, 152, ROTATE_0, WHITE);
  1190. uint8_t *string_infor = malloc(120);
  1191. memset(string_infor, 0x00, 120);
  1192. strcat((char *)string_infor, str_announcement);
  1193. strcat((char *)string_infor, (char *)Machine_info.announcement);
  1194. Paint_DrawString_CN(10, 6, (char *)string_infor, &chinese_type_16, FONT_FOREGROUND, FONT_BACKGROUND);
  1195. free(string_infor);
  1196. // #if 0//系统消息固定
  1197. // //系统提示:系统3.01固件版本更新了新的功能,请及时更新。
  1198. // //CFB5CDB3CCE1CABE3ACFB5CDB3332E302E31B9CCBCFEB0E6B1BEB8FCD0C2C1CBD0C2B5C4B9A6C4DCA3ACC7EBBCB0CAB1B8FCD0C2A1A30A
  1199. // uint8_t string_system_message[] = {0xCF,0xB5,0xCD,0xB3,0xCC,0xE1,0xCA,0xBE,0x3A,0xCF,0xB5,0xCD,0xB3,0x33,0x2E,0x30,0x2E,0x31,0xB9,0xCC,0xBC,0xFE,0xB0,0xE6,0xB1,0xBE
  1200. // ,0xB8,0xFC,0xD0,0xC2,0xC1,0xCB,0xD0,0xC2,0xB5,0xC4,0xB9,0xA6,0xC4,0xDC,0xA3,0xAC, 0xC7,0xEB,0xBC,0xB0,0xCA,0xB1,0xB8,0xFC,0xD0,0xC2,0xA1,0xA3,0x0A,0x00,0x00};
  1201. // Paint_DrawString_CN(20, 122,(char*)string_system_message, &chinese_type_16,FONT_FOREGROUND,FONT_BACKGROUND );
  1202. // #else
  1203. // uint8_t *string_sys = malloc(120);
  1204. // char str_xitong[12] = {0xcf,0xb5,0xcd,0xb3,0xcc,0xe1,0xca,0xbe,0x3a,0x00,0x00,0x00};
  1205. // memset(string_sys,0x00,120);
  1206. // strcat((char *)string_sys,str_xitong);
  1207. // strcat((char *)string_sys,(char *)Machine_info.systemMessage);
  1208. // Paint_DrawString_CN(10, 90,(char*)string_sys, &chinese_type_16,FONT_FOREGROUND,FONT_BACKGROUND );
  1209. // free(string_sys);
  1210. // #endif
  1211. memcpy(partial_right4_buf, Paint_info.Image, sizeof(uint8_t) * 480 * 152 / 8);
  1212. return partial_right4_buf;
  1213. }
  1214. // 下面是2023.12.31 把屏幕显示全部统一
  1215. static void dis_left_sms(void)
  1216. {
  1217. ESP_LOGW(LOG_TAG, "dis left instruction book");
  1218. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1219. Paint_NewImage((uint8_t *)tmp_paint_buf, 648, 480, ROTATE_180, WHITE);
  1220. Paint_DrawBitMap_Paste(gImage_left_instructions, 0, 0, 648, 480, 1);
  1221. // qrcode
  1222. char qrcode_string[1024] = {0};
  1223. qrcode_protocol_create(qrcode_string, Machine_info);
  1224. QRGenerator_quick(qrcode_string);
  1225. Paint_DrawBitMap_Paste((uint8_t *)gImage_nfc, 573, 215, 44, 44, 1);
  1226. epd_init_cmd(SCREEN_LEFT);
  1227. epd_display(SCREEN_LEFT, Paint_info.Image);
  1228. memcpy(last_paint_buf_left, Paint_info.Image, sizeof(uint8_t) * 648 * 480 / 8);
  1229. // int ret = memcmp(last_paint_buf_left,Paint_info.Image,38880);
  1230. // ESP_LOGW(LOG_TAG,"memcmp :ret = %d",ret);
  1231. if (memcmp(last_paint_buf_left, Paint_info.Image, 38880))
  1232. {
  1233. ESP_LOGE(LOG_TAG, "err:last_paint_buf_left");
  1234. }
  1235. }
  1236. static void dis_right_sms(void)
  1237. {
  1238. ESP_LOGW(LOG_TAG, "dis right instruction book");
  1239. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1240. Paint_NewImage((uint8_t *)tmp_paint_buf, 648, 480, ROTATE_270, WHITE);
  1241. Paint_DrawBitMap_Paste(gImage_right_instruction, 0, 0, 480, 648, 1);
  1242. if (!decection_state_0()) // 判断充电中逻辑
  1243. {
  1244. #define BAT_X_OFFSET 2
  1245. #define BAT_Y_OFFSET 2
  1246. Paint_DrawBitMap_Paste((uint8_t *)gImage_battery, 480 - 50 - BAT_X_OFFSET, 24, 37, 18, 1);
  1247. ESP_LOGW(LOG_TAG, "判断充电中逻辑batt_precent = %d", Machine_info.batt_precent);
  1248. switch (Machine_info.batt_precent)
  1249. {
  1250. case 0:
  1251. break;
  1252. case 1 ... 24:
  1253. Paint_DrawRectangle(433 - BAT_X_OFFSET, 27, 439 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  1254. break;
  1255. case 25 ... 49:
  1256. Paint_DrawRectangle(433 - BAT_X_OFFSET, 27, 439 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  1257. Paint_DrawRectangle(441 - BAT_X_OFFSET, 27, 447 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  1258. break;
  1259. case 50 ... 74:
  1260. Paint_DrawRectangle(433 - BAT_X_OFFSET, 27, 439 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  1261. Paint_DrawRectangle(441 - BAT_X_OFFSET, 27, 447 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  1262. Paint_DrawRectangle(449 - BAT_X_OFFSET, 27, 455 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  1263. break;
  1264. case 75 ... 99:
  1265. Paint_DrawRectangle(433 - BAT_X_OFFSET, 27, 439 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  1266. Paint_DrawRectangle(441 - BAT_X_OFFSET, 27, 447 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  1267. Paint_DrawRectangle(449 - BAT_X_OFFSET, 27, 455 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  1268. Paint_DrawRectangle(457 - BAT_X_OFFSET, 27, 462 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  1269. break;
  1270. case 100:
  1271. Paint_DrawRectangle(433 - BAT_X_OFFSET, 27, 439 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  1272. Paint_DrawRectangle(441 - BAT_X_OFFSET, 27, 447 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  1273. Paint_DrawRectangle(449 - BAT_X_OFFSET, 27, 455 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  1274. Paint_DrawRectangle(457 - BAT_X_OFFSET, 27, 462 - BAT_X_OFFSET, 41, WHITE, 1, 1);
  1275. break;
  1276. default:
  1277. break;
  1278. }
  1279. Machine_info.batt_precent = read_battery_voltage();
  1280. if (Machine_info.batt_precent >= 95)
  1281. {
  1282. Paint_DrawBitMap_Paste((uint8_t *)gImage_filled, 480 - 47 + 37, 27 - BAT_Y_OFFSET, 8, 18, 1);
  1283. }
  1284. else
  1285. {
  1286. Paint_DrawBitMap_Paste((uint8_t *)gImage_charging, 480 - 47 + 35, 27 - BAT_Y_OFFSET, 8, 18, 1);
  1287. }
  1288. }
  1289. else
  1290. {
  1291. if (read_battery_voltage() < 10)
  1292. {
  1293. Paint_DrawBitMap_Paste(gImage_low_batt, 30, 428, 420, 154, 1); // 低电量请充电
  1294. }
  1295. }
  1296. epd_init_cmd(SCREEN_RIGHT);
  1297. epd_display(SCREEN_RIGHT, Paint_info.Image);
  1298. memcpy(last_paint_buf_right, Paint_info.Image, sizeof(uint8_t) * 648 * 480 / 8);
  1299. if (memcmp(last_paint_buf_right, Paint_info.Image, 38880))
  1300. {
  1301. ESP_LOGE(LOG_TAG, "err:右屏说明书保存失败");
  1302. }
  1303. }
  1304. void Paint_leftScreen(bool is_poweron, bool is_quick)
  1305. {
  1306. ESP_LOGI(LOG_TAG, "Paint_leftScreen %s - %s ", is_quick ? "quick" : "low", is_poweron ? "poweron" : "poweroff");
  1307. if (!is_poweron)
  1308. {
  1309. // 关机展示说明书
  1310. dis_left_sms();
  1311. return;
  1312. }
  1313. int x = 0; // 居中偏移
  1314. // 先利用NewImage,得到各个部分的图像buf
  1315. // 再画图
  1316. uint8_t *image_320x384_buf = (uint8_t *)calloc(320 * 384 / 8, sizeof(uint8_t));
  1317. #if 1
  1318. uint8_t *tmp = NULL;
  1319. switch (Machine_info.left_display_mode)
  1320. {
  1321. case 0x00:
  1322. // ESP_LOGW(LOG_TAG,"left_display_mode 0x01:");
  1323. break;
  1324. case 0x01:
  1325. /* code */
  1326. tmp = partial_bar_chart_07_02_quick(&Machine_info);
  1327. break;
  1328. case 0x02:
  1329. /* code */
  1330. tmp = partial_bar_chart_07_03_quick(&Machine_info);
  1331. break;
  1332. case 0x03:
  1333. /* code */
  1334. tmp = partial_bar_chart_07_04_quick(&Machine_info);
  1335. break;
  1336. default:
  1337. break;
  1338. }
  1339. #else
  1340. tmp = partial_bar_chart_07_04_quick(info);
  1341. #endif
  1342. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1343. Paint_NewImage((uint8_t *)tmp_paint_buf, 64, 32, ROTATE_0, WHITE);
  1344. x = center_align(&Machine_info.btn_operation, 64, 16, 32);
  1345. Paint_DrawString_CN(0 + x, 0, (char *)Machine_info.btn_operation, &chinese_type_32, FONT_FOREGROUND, FONT_BACKGROUND);
  1346. uint8_t *operation_64x32_buf = (uint8_t *)calloc(64 * 32 / 8, sizeof(uint8_t));
  1347. memcpy(operation_64x32_buf, Paint_info.Image, sizeof(uint8_t) * 64 * 32 / 8);
  1348. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1349. Paint_NewImage((uint8_t *)tmp_paint_buf, 96, 48, ROTATE_0, WHITE);
  1350. Paint_DrawBitMap_Paste(operation_64x32_buf, 16, 8, 64, 32, 1);
  1351. uint8_t *operation_background_96x48_buf = (uint8_t *)calloc(96 * 48 / 8, sizeof(uint8_t));
  1352. memcpy(operation_background_96x48_buf, Paint_info.Image, sizeof(uint8_t) * 96 * 48 / 8);
  1353. free(operation_64x32_buf);
  1354. // str_shutDown
  1355. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1356. Paint_NewImage((uint8_t *)tmp_paint_buf, 32, 64, ROTATE_90, WHITE);
  1357. x = center_align(&Machine_info.btn_shutDown_info, 64, 16, 32);
  1358. Paint_DrawString_CN(0, 0, (char *)Machine_info.btn_shutDown_info, &chinese_type_32, FONT_FOREGROUND, FONT_BACKGROUND);
  1359. uint8_t *shutDown_64x32_buf = (uint8_t *)calloc(64 * 32 / 8, sizeof(uint8_t));
  1360. memcpy(shutDown_64x32_buf, Paint_info.Image, sizeof(uint8_t) * 64 * 32 / 8);
  1361. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1362. Paint_NewImage((uint8_t *)tmp_paint_buf, 48, 96, ROTATE_0, WHITE);
  1363. Paint_DrawBitMap_Paste(shutDown_64x32_buf, 8, 16, 32, 64, 1);
  1364. uint8_t *shutDown_background_96x48_buf = (uint8_t *)calloc(96 * 48 / 8, sizeof(uint8_t));
  1365. memcpy(shutDown_background_96x48_buf, Paint_info.Image, sizeof(uint8_t) * 96 * 48 / 8);
  1366. free(shutDown_64x32_buf);
  1367. // str_breakDown
  1368. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1369. Paint_NewImage((uint8_t *)tmp_paint_buf, 32, 64, ROTATE_90, WHITE);
  1370. x = center_align(&Machine_info.btn_breakDown_info, 64, 16, 32);
  1371. Paint_DrawString_CN(0, 0, (char *)Machine_info.btn_breakDown_info, &chinese_type_32, FONT_FOREGROUND, FONT_BACKGROUND);
  1372. uint8_t *breakDown_64x32_buf = (uint8_t *)calloc(64 * 32 / 8, sizeof(uint8_t));
  1373. memcpy(breakDown_64x32_buf, Paint_info.Image, sizeof(uint8_t) * 64 * 32 / 8);
  1374. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1375. Paint_NewImage((uint8_t *)tmp_paint_buf, 48, 96, ROTATE_0, WHITE);
  1376. Paint_DrawBitMap_Paste(breakDown_64x32_buf, 8, 16, 32, 64, 1);
  1377. uint8_t *breakDown_background_96x48_buf = (uint8_t *)calloc(96 * 48 / 8, sizeof(uint8_t));
  1378. memcpy(breakDown_background_96x48_buf, Paint_info.Image, sizeof(uint8_t) * 96 * 48 / 8);
  1379. free(breakDown_64x32_buf);
  1380. // str_safeKeep
  1381. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1382. Paint_NewImage((uint8_t *)tmp_paint_buf, 64, 32, ROTATE_0, WHITE);
  1383. x = center_align(&Machine_info.btn_safeKeep_info, 64, 16, 32);
  1384. Paint_DrawString_CN(0, 0, (char *)Machine_info.btn_safeKeep_info, &chinese_type_32, FONT_FOREGROUND, FONT_BACKGROUND);
  1385. uint8_t *safeKeep_64x32_buf = (uint8_t *)calloc(64 * 32 / 8, sizeof(uint8_t));
  1386. memcpy(safeKeep_64x32_buf, Paint_info.Image, sizeof(uint8_t) * 64 * 32 / 8);
  1387. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1388. Paint_NewImage((uint8_t *)tmp_paint_buf, 96, 48, ROTATE_0, WHITE);
  1389. Paint_DrawBitMap_Paste(safeKeep_64x32_buf, 16, 8, 64, 32, 1);
  1390. uint8_t *safeKeep_background_96x48_buf = (uint8_t *)calloc(96 * 48 / 8, sizeof(uint8_t));
  1391. memcpy(safeKeep_background_96x48_buf, Paint_info.Image, sizeof(uint8_t) * 96 * 48 / 8);
  1392. free(safeKeep_64x32_buf);
  1393. // str_upKeep
  1394. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1395. Paint_NewImage((uint8_t *)tmp_paint_buf, 32, 64, ROTATE_270, WHITE);
  1396. x = center_align(&Machine_info.btn_upKeep_info, 64, 16, 32);
  1397. Paint_DrawString_CN(0, 0, (char *)Machine_info.btn_upKeep_info, &chinese_type_32, FONT_FOREGROUND, FONT_BACKGROUND);
  1398. uint8_t *upKeep_64x32_buf = (uint8_t *)calloc(64 * 32 / 8, sizeof(uint8_t));
  1399. memcpy(upKeep_64x32_buf, Paint_info.Image, sizeof(uint8_t) * 64 * 32 / 8);
  1400. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1401. Paint_NewImage((uint8_t *)tmp_paint_buf, 48, 96, ROTATE_0, WHITE);
  1402. Paint_DrawBitMap_Paste(upKeep_64x32_buf, 8, 16, 32, 64, 1);
  1403. uint8_t *upKeep_background_96x48_buf = (uint8_t *)calloc(96 * 48 / 8, sizeof(uint8_t));
  1404. memcpy(upKeep_background_96x48_buf, Paint_info.Image, sizeof(uint8_t) * 96 * 48 / 8);
  1405. free(upKeep_64x32_buf);
  1406. // str_waitMaterials
  1407. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1408. Paint_NewImage((uint8_t *)tmp_paint_buf, 32, 64, ROTATE_270, WHITE);
  1409. x = center_align(&Machine_info.btn_waitMaterials_info, 64, 16, 32);
  1410. Paint_DrawString_CN(0, 0, (char *)Machine_info.btn_waitMaterials_info, &chinese_type_32, FONT_FOREGROUND, FONT_BACKGROUND);
  1411. uint8_t *waitMaterials_64x32_buf = (uint8_t *)calloc(64 * 32 / 8, sizeof(uint8_t));
  1412. memcpy(waitMaterials_64x32_buf, Paint_info.Image, sizeof(uint8_t) * 64 * 32 / 8);
  1413. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1414. Paint_NewImage((uint8_t *)tmp_paint_buf, 48, 96, ROTATE_0, WHITE);
  1415. Paint_DrawBitMap_Paste(waitMaterials_64x32_buf, 8, 16, 32, 64, 1);
  1416. uint8_t *waitMaterials_background_96x48_buf = (uint8_t *)calloc(96 * 48 / 8, sizeof(uint8_t));
  1417. memcpy(waitMaterials_background_96x48_buf, Paint_info.Image, sizeof(uint8_t) * 96 * 48 / 8);
  1418. free(waitMaterials_64x32_buf);
  1419. uint8_t *background_128x64_buf = (uint8_t *)calloc(128 * 64 / 8, sizeof(uint8_t));
  1420. // 得到图像buf
  1421. ESP_LOGW(LOG_TAG, "----------------Machine_info.left_state = %d-------left_display_mode =%d -------\r\n", Machine_info.left_state, Machine_info.left_display_mode);
  1422. switch (Machine_info.left_state)
  1423. {
  1424. case STATE_NONE:
  1425. case STATE_OPERATION:
  1426. {
  1427. if (Machine_info.left_display_mode == 0)
  1428. {
  1429. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1430. Paint_NewImage((uint8_t *)tmp_paint_buf, 96, 48, ROTATE_0, WHITE);
  1431. Paint_DrawBitMap_Paste((uint8_t *)gImage_button, 0, 0, 96, 48, 1);
  1432. x = center_align(&Machine_info.btn_operation, 64, 16, 32);
  1433. Paint_DrawString_CN(16 + x, 8, (char *)Machine_info.btn_operation, &chinese_type_32, FONT_BACKGROUND, FONT_FOREGROUND);
  1434. memcpy(operation_background_96x48_buf, Paint_info.Image, sizeof(uint8_t) * 96 * 48 / 8);
  1435. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1436. Paint_NewImage((uint8_t *)tmp_paint_buf, 320, 384, ROTATE_0, WHITE);
  1437. Paint_DrawBitMap_Paste((uint8_t *)gImage_mid_, 0, 0, 320, 384, 1);
  1438. x = center_align(&Machine_info.btn_operation, 128, 64, 64);
  1439. Paint_DrawString_CN64(96 + x, 160, (char *)Machine_info.btn_operation);
  1440. memcpy(image_320x384_buf, Paint_info.Image, sizeof(uint8_t) * 320 * 384 / 8);
  1441. }
  1442. else
  1443. {
  1444. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1445. Paint_NewImage((uint8_t *)tmp_paint_buf, 128, 64, ROTATE_0, WHITE);
  1446. Paint_DrawBitMap_Paste((uint8_t *)gImage_button_128x64, 0, 0, 128, 64, 1);
  1447. x = center_align(&Machine_info.btn_operation, 96, 24, 48);
  1448. // Paint_DrawString_CN(16+x,8,(char*)Machine_info.btn_operation,&chinese_type_32,FONT_BACKGROUND,FONT_FOREGROUND);
  1449. Paint_DrawString_CN48(16 + x, 8, (char *)Machine_info.btn_operation, false);
  1450. memcpy(background_128x64_buf, Paint_info.Image, sizeof(uint8_t) * 128 * 64 / 8);
  1451. }
  1452. }
  1453. break;
  1454. case STATE_SHUT_DOWN:
  1455. {
  1456. if (Machine_info.left_display_mode == 0)
  1457. {
  1458. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1459. Paint_NewImage((uint8_t *)tmp_paint_buf, 48, 96, ROTATE_90, WHITE);
  1460. Paint_DrawBitMap_Paste((uint8_t *)gImage_button, 0, 0, 96, 48, 1);
  1461. x = center_align(&Machine_info.btn_shutDown_info, 64, 16, 32);
  1462. Paint_DrawString_CN(16 + x, 8, (char *)Machine_info.btn_shutDown_info, &chinese_type_32, FONT_BACKGROUND, FONT_FOREGROUND);
  1463. memcpy(shutDown_background_96x48_buf, Paint_info.Image, sizeof(uint8_t) * 96 * 48 / 8);
  1464. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1465. Paint_NewImage((uint8_t *)tmp_paint_buf, 320, 384, ROTATE_0, WHITE);
  1466. Paint_DrawBitMap_Paste((uint8_t *)gImage_right_, 0, 0, 320, 384, 1);
  1467. x = center_align(&Machine_info.btn_shutDown_info, 128, 64, 64);
  1468. Paint_DrawString_CN64(96 + x, 160, (char *)Machine_info.btn_shutDown_info);
  1469. memcpy(image_320x384_buf, Paint_info.Image, sizeof(uint8_t) * 320 * 384 / 8);
  1470. }
  1471. else
  1472. {
  1473. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1474. Paint_NewImage((uint8_t *)tmp_paint_buf, 64, 128, ROTATE_90, WHITE);
  1475. Paint_DrawBitMap_Paste((uint8_t *)gImage_button_128x64, 0, 0, 128, 64, 1);
  1476. x = center_align(&Machine_info.btn_shutDown_info, 96, 24, 48);
  1477. // Paint_DrawString_CN(16+x,8,(char*)Machine_info.btn_shutDown_info,&chinese_type_32,FONT_BACKGROUND,FONT_FOREGROUND);
  1478. Paint_DrawString_CN48(16 + x, 8, (char *)Machine_info.btn_shutDown_info, false);
  1479. memcpy(background_128x64_buf, Paint_info.Image, sizeof(uint8_t) * 128 * 64 / 8);
  1480. }
  1481. }
  1482. break;
  1483. case STATE_BREAKDOWN:
  1484. {
  1485. if (Machine_info.left_display_mode == 0)
  1486. {
  1487. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1488. Paint_NewImage((uint8_t *)tmp_paint_buf, 48, 96, ROTATE_90, WHITE);
  1489. Paint_DrawBitMap_Paste((uint8_t *)gImage_button, 0, 0, 96, 48, 1);
  1490. x = center_align(&Machine_info.btn_breakDown_info, 64, 16, 32);
  1491. Paint_DrawString_CN(16 + x, 8, (char *)Machine_info.btn_breakDown_info, &chinese_type_32, FONT_BACKGROUND, FONT_FOREGROUND);
  1492. memcpy(breakDown_background_96x48_buf, Paint_info.Image, sizeof(uint8_t) * 96 * 48 / 8);
  1493. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1494. Paint_NewImage((uint8_t *)tmp_paint_buf, 320, 384, ROTATE_180, WHITE);
  1495. Paint_DrawBitMap_Paste((uint8_t *)gImage_left_, 0, 0, 320, 384, 1);
  1496. memcpy(image_320x384_buf, Paint_info.Image, sizeof(uint8_t) * 320 * 384 / 8);
  1497. Paint_NewImage(image_320x384_buf, 320, 384, ROTATE_0, WHITE);
  1498. x = center_align(&Machine_info.btn_breakDown_info, 128, 64, 64);
  1499. Paint_DrawString_CN64(96 + x, 160, (char *)Machine_info.btn_breakDown_info);
  1500. memcpy(image_320x384_buf, Paint_info.Image, sizeof(uint8_t) * 320 * 384 / 8);
  1501. }
  1502. else
  1503. {
  1504. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1505. Paint_NewImage((uint8_t *)tmp_paint_buf, 64, 128, ROTATE_90, WHITE);
  1506. Paint_DrawBitMap_Paste((uint8_t *)gImage_button_128x64, 0, 0, 128, 64, 1);
  1507. x = center_align(&Machine_info.btn_breakDown_info, 96, 24, 48);
  1508. // Paint_DrawString_CN(16+x,8,(char*)Machine_info.btn_breakDown_info,&chinese_type_32,FONT_BACKGROUND,FONT_FOREGROUND);
  1509. Paint_DrawString_CN48(16 + x, 8, (char *)Machine_info.btn_breakDown_info, false);
  1510. memcpy(background_128x64_buf, Paint_info.Image, sizeof(uint8_t) * 128 * 64 / 8);
  1511. }
  1512. }
  1513. break;
  1514. case STATE_SAFEKEEP:
  1515. {
  1516. if (Machine_info.left_display_mode == 0)
  1517. {
  1518. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1519. Paint_NewImage((uint8_t *)tmp_paint_buf, 96, 48, ROTATE_0, WHITE);
  1520. Paint_DrawBitMap_Paste((uint8_t *)gImage_button, 0, 0, 96, 48, 1);
  1521. x = center_align(&Machine_info.btn_safeKeep_info, 64, 16, 32);
  1522. Paint_DrawString_CN(16 + x, 8, (char *)Machine_info.btn_safeKeep_info, &chinese_type_32, FONT_BACKGROUND, FONT_FOREGROUND);
  1523. memcpy(safeKeep_background_96x48_buf, Paint_info.Image, sizeof(uint8_t) * 96 * 48 / 8);
  1524. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1525. Paint_NewImage((uint8_t *)tmp_paint_buf, 320, 384, ROTATE_180, WHITE);
  1526. Paint_DrawBitMap_Paste((uint8_t *)gImage_mid_, 0, 0, 320, 384, 1);
  1527. memcpy(image_320x384_buf, Paint_info.Image, sizeof(uint8_t) * 320 * 384 / 8);
  1528. Paint_NewImage(image_320x384_buf, 320, 384, ROTATE_0, WHITE);
  1529. x = center_align(&Machine_info.btn_safeKeep_info, 128, 64, 64);
  1530. Paint_DrawString_CN64(96 + x, 160, (char *)Machine_info.btn_safeKeep_info);
  1531. memcpy(image_320x384_buf, Paint_info.Image, sizeof(uint8_t) * 320 * 384 / 8);
  1532. }
  1533. else
  1534. {
  1535. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1536. Paint_NewImage((uint8_t *)tmp_paint_buf, 128, 64, ROTATE_0, WHITE);
  1537. Paint_DrawBitMap_Paste((uint8_t *)gImage_button_128x64, 0, 0, 128, 64, 1);
  1538. x = center_align(&Machine_info.btn_safeKeep_info, 96, 24, 48);
  1539. // Paint_DrawString_CN(16+x,8,(char*)Machine_info.btn_safeKeep_info,&chinese_type_32,FONT_BACKGROUND,FONT_FOREGROUND);
  1540. Paint_DrawString_CN48(16 + x, 8, (char *)Machine_info.btn_safeKeep_info, false);
  1541. memcpy(background_128x64_buf, Paint_info.Image, sizeof(uint8_t) * 128 * 64 / 8);
  1542. }
  1543. }
  1544. break;
  1545. case STATE_UPKEEP:
  1546. {
  1547. if (Machine_info.left_display_mode == 0)
  1548. {
  1549. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1550. Paint_NewImage((uint8_t *)tmp_paint_buf, 48, 96, ROTATE_270, WHITE);
  1551. Paint_DrawBitMap_Paste((uint8_t *)gImage_button, 0, 0, 96, 48, 1);
  1552. x = center_align(&Machine_info.btn_upKeep_info, 64, 16, 32);
  1553. Paint_DrawString_CN(16 + x, 8, (char *)Machine_info.btn_upKeep_info, &chinese_type_32, FONT_BACKGROUND, FONT_FOREGROUND);
  1554. memcpy(upKeep_background_96x48_buf, Paint_info.Image, sizeof(uint8_t) * 96 * 48 / 8);
  1555. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1556. Paint_NewImage((uint8_t *)tmp_paint_buf, 320, 384, ROTATE_180, WHITE);
  1557. Paint_DrawBitMap_Paste((uint8_t *)gImage_right_, 0, 0, 320, 384, 1);
  1558. memcpy(image_320x384_buf, Paint_info.Image, sizeof(uint8_t) * 320 * 384 / 8);
  1559. Paint_NewImage(image_320x384_buf, 320, 384, ROTATE_0, WHITE);
  1560. x = center_align(&Machine_info.btn_upKeep_info, 128, 64, 64);
  1561. Paint_DrawString_CN64(96 + x, 160, (char *)Machine_info.btn_upKeep_info);
  1562. memcpy(image_320x384_buf, Paint_info.Image, sizeof(uint8_t) * 320 * 384 / 8);
  1563. }
  1564. else
  1565. {
  1566. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1567. Paint_NewImage((uint8_t *)tmp_paint_buf, 64, 128, ROTATE_270, WHITE);
  1568. Paint_DrawBitMap_Paste((uint8_t *)gImage_button_128x64, 0, 0, 128, 64, 1);
  1569. x = center_align(&Machine_info.btn_upKeep_info, 96, 24, 48);
  1570. // Paint_DrawString_CN(16+x,8,(char*)Machine_info.btn_upKeep_info,&chinese_type_32,FONT_BACKGROUND,FONT_FOREGROUND);
  1571. Paint_DrawString_CN48(16 + x, 8, (char *)Machine_info.btn_upKeep_info, false);
  1572. memcpy(background_128x64_buf, Paint_info.Image, sizeof(uint8_t) * 128 * 64 / 8);
  1573. }
  1574. }
  1575. break;
  1576. case STATE_WAIT_MATERIALS:
  1577. {
  1578. if (Machine_info.left_display_mode == 0)
  1579. {
  1580. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1581. Paint_NewImage((uint8_t *)tmp_paint_buf, 48, 96, ROTATE_270, WHITE);
  1582. Paint_DrawBitMap_Paste((uint8_t *)gImage_button, 0, 0, 96, 48, 1);
  1583. x = center_align(&Machine_info.btn_waitMaterials_info, 64, 16, 32);
  1584. Paint_DrawString_CN(16 + x, 8, (char *)Machine_info.btn_waitMaterials_info, &chinese_type_32, FONT_BACKGROUND, FONT_FOREGROUND);
  1585. memcpy(waitMaterials_background_96x48_buf, Paint_info.Image, sizeof(uint8_t) * 96 * 48 / 8); // 黑底白字
  1586. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1587. Paint_NewImage((uint8_t *)tmp_paint_buf, 320, 384, ROTATE_0, WHITE);
  1588. Paint_DrawBitMap_Paste((uint8_t *)gImage_left_, 0, 0, 320, 384, 1);
  1589. x = center_align(&Machine_info.btn_waitMaterials_info, 128, 64, 64);
  1590. Paint_DrawString_CN64(96 + x, 160, (char *)Machine_info.btn_waitMaterials_info);
  1591. memcpy(image_320x384_buf, Paint_info.Image, sizeof(uint8_t) * 320 * 384 / 8);
  1592. }
  1593. else
  1594. {
  1595. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1596. Paint_NewImage((uint8_t *)tmp_paint_buf, 64, 128, ROTATE_270, WHITE);
  1597. Paint_DrawBitMap_Paste((uint8_t *)gImage_button_128x64, 0, 0, 128, 64, 1);
  1598. x = center_align(&Machine_info.btn_waitMaterials_info, 96, 24, 48);
  1599. // Paint_DrawString_CN(16+x,8,(char*)Machine_info.btn_waitMaterials_info,&chinese_type_32,FONT_BACKGROUND,FONT_FOREGROUND);
  1600. Paint_DrawString_CN48(16 + x, 8, (char *)Machine_info.btn_waitMaterials_info, false);
  1601. memcpy(background_128x64_buf, Paint_info.Image, sizeof(uint8_t) * 128 * 64 / 8); // 黑底白字
  1602. }
  1603. }
  1604. break;
  1605. default:
  1606. ESP_LOGE(LOG_TAG, " err: (info->left_state)");
  1607. break;
  1608. }
  1609. // 画图
  1610. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1611. Paint_NewImage((uint8_t *)tmp_paint_buf, 648, 480, ROTATE_180, WHITE);
  1612. Paint_DrawBitMap_Paste(operation_background_96x48_buf, 272, 0, 96, 48, 1);
  1613. Paint_DrawBitMap_Paste(shutDown_background_96x48_buf, 600, 48, 48, 96, 1);
  1614. Paint_DrawBitMap_Paste(breakDown_background_96x48_buf, 600, 336, 48, 96, 1);
  1615. Paint_DrawBitMap_Paste(safeKeep_background_96x48_buf, 272, 432, 96, 48, 1);
  1616. Paint_DrawBitMap_Paste(upKeep_background_96x48_buf, 0, 336, 48, 96, 1);
  1617. Paint_DrawBitMap_Paste(waitMaterials_background_96x48_buf, 0, 48, 48, 96, 1);
  1618. free(operation_background_96x48_buf);
  1619. free(shutDown_background_96x48_buf);
  1620. free(breakDown_background_96x48_buf);
  1621. free(upKeep_background_96x48_buf);
  1622. free(safeKeep_background_96x48_buf);
  1623. free(waitMaterials_background_96x48_buf);
  1624. if (Machine_info.left_display_mode != 0)
  1625. {
  1626. switch (Machine_info.left_state)
  1627. {
  1628. case STATE_NONE:
  1629. case STATE_OPERATION:
  1630. Paint_DrawBitMap_Paste(background_128x64_buf, 272 - 16, 0, 128, 64, 1);
  1631. break;
  1632. case STATE_SHUT_DOWN:
  1633. Paint_DrawBitMap_Paste(background_128x64_buf, 600 - 16, 48 - 8, 64, 128, 1);
  1634. break;
  1635. case STATE_BREAKDOWN:
  1636. Paint_DrawBitMap_Paste(background_128x64_buf, 600 - 16, 336 - 8, 64, 128, 1);
  1637. break;
  1638. case STATE_SAFEKEEP:
  1639. Paint_DrawBitMap_Paste(background_128x64_buf, 272 - 16, 432 - 16, 128, 64, 1);
  1640. break;
  1641. case STATE_UPKEEP:
  1642. Paint_DrawBitMap_Paste(background_128x64_buf, 0, 336 - 16, 64, 128, 1);
  1643. break;
  1644. case STATE_WAIT_MATERIALS:
  1645. Paint_DrawBitMap_Paste(background_128x64_buf, 0, 48 - 16, 64, 128, 1);
  1646. break;
  1647. default:
  1648. break;
  1649. }
  1650. }
  1651. free(background_128x64_buf);
  1652. Paint_DrawBitMap_Paste((uint8_t *)gImage_nfc, 573, 215, 44, 44, 1);
  1653. if ((Machine_info.left_display_mode == 0x00))
  1654. {
  1655. Paint_DrawBitMap_Paste(image_320x384_buf, 164, 48, 320, 384, 1);
  1656. }
  1657. else
  1658. {
  1659. Paint_DrawBitMap_Paste(tmp, 84, 90, 480, 300, 1); // 648-480 168
  1660. free(tmp);
  1661. }
  1662. // qrcode
  1663. char qrcode_string[1024] = {0};
  1664. qrcode_protocol_create(qrcode_string, Machine_info);
  1665. QRGenerator_quick(qrcode_string);
  1666. //
  1667. // printf("btn_operation = %s\r\n",Machine_info.btn_operation);
  1668. // printf("btn_breakDown_info = %s\r\n",Machine_info.btn_breakDown_info);
  1669. // printf("btn_upKeep_info = %s\r\n",Machine_info.btn_upKeep_info);
  1670. // printf("btn_shutDown_info = %s\r\n",Machine_info.btn_shutDown_info);
  1671. // printf("btn_safeKeep_info = %s\r\n",Machine_info.btn_safeKeep_info);
  1672. // printf("btn_waitMaterials_info = %s\r\n",Machine_info.btn_operation);
  1673. int reson = is_wake_up_reson(); // 返回唤醒的原
  1674. if (is_quick)
  1675. {
  1676. bool ret = epd_cache_quick(SCREEN_LEFT, (uint8_t *)last_paint_buf_left, Paint_info.Image);
  1677. epd_powerOn_refresh_sleep(SCREEN_LEFT);
  1678. }
  1679. else
  1680. {
  1681. epd_init_cmd(SCREEN_LEFT);
  1682. epd_display(SCREEN_LEFT, Paint_info.Image);
  1683. }
  1684. // 保存上一帧画面
  1685. memcpy(last_paint_buf_left, Paint_info.Image, sizeof(uint8_t) * 648 * 480 / 8);
  1686. if (memcmp(last_paint_buf_left, Paint_info.Image, 38880))
  1687. {
  1688. ESP_LOGE(LOG_TAG, "err:last_paint_buf_left");
  1689. }
  1690. free(image_320x384_buf);
  1691. }
  1692. void Paint_rightScreen(bool is_poweron, bool is_quick)
  1693. {
  1694. ESP_LOGI(LOG_TAG, "Paint_rightScreen %s - %s ", is_quick ? "quick" : "low", is_poweron ? "poweron" : "poweroff");
  1695. if (!is_poweron)
  1696. {
  1697. // 关机展示说明书
  1698. dis_right_sms();
  1699. return;
  1700. }
  1701. uint8_t *right1_buf = partial_right1_quick(&Machine_info);
  1702. uint8_t *right2_buf = partial_right2_quick();
  1703. uint8_t *right3_buf = NULL;
  1704. if (Machine_info.right_display_mode == 1)
  1705. {
  1706. right3_buf = partial_right3_2_quick();
  1707. }
  1708. else
  1709. {
  1710. right3_buf = partial_right3_quick();
  1711. }
  1712. uint8_t *right4_buf = partial_right4_quick();
  1713. memset((uint8_t *)tmp_paint_buf, 0, DISPLAY_BUFFER_SIZE /*sizeof(tmp_paint_buf)*/);
  1714. Paint_NewImage((uint8_t *)tmp_paint_buf, 648, 480, ROTATE_270, WHITE);
  1715. Paint_DrawBitMap_Paste(right1_buf, 0, 0, 480, 100, 1);
  1716. free(right1_buf);
  1717. Paint_DrawBitMap_Paste(right2_buf, 0, 100, 480, 172, 1);
  1718. free(right2_buf);
  1719. Paint_DrawBitMap_Paste(right3_buf, 0, 272, 480, 224, 1);
  1720. free(right3_buf);
  1721. Paint_DrawBitMap_Paste(right4_buf, 0, 496, 480, 152, 1);
  1722. free(right4_buf);
  1723. if (is_quick)
  1724. {
  1725. bool ret = epd_cache_quick(SCREEN_RIGHT, (uint8_t *)last_paint_buf_right, Paint_info.Image);
  1726. epd_powerOn_refresh_sleep(SCREEN_RIGHT);
  1727. }
  1728. else
  1729. {
  1730. epd_init_cmd(SCREEN_RIGHT);
  1731. epd_display(SCREEN_RIGHT, Paint_info.Image);
  1732. }
  1733. // 保存右屏上一帧画面
  1734. memcpy(last_paint_buf_right, Paint_info.Image, sizeof(uint8_t) * 648 * 480 / 8);
  1735. // int ret = memcmp(last_paint_buf_right,Paint_info.Image,38880);
  1736. // ESP_LOGW(LOG_TAG,"memcmp :ret = %d",ret);
  1737. if (memcmp(last_paint_buf_right, Paint_info.Image, 38880))
  1738. {
  1739. ESP_LOGE(LOG_TAG, "err:last_paint_buf_right");
  1740. }
  1741. Machine_info.last_batt_precent = Machine_info.batt_precent; // 右屏刷完后记录电池电量
  1742. }