From d52c94b866512126d1ee6af7e03093c1ee8c0ebd Mon Sep 17 00:00:00 2001 From: wmano Date: Sun, 19 Oct 2025 22:11:21 +0800 Subject: [PATCH] add lcd --- apps/boot/application/func/firmware.c | 2 + apps/boot/application/main.c | 7 +- apps/chrg/applications/bsp/chrg_vcom.c | 4 + apps/chrg/applications/main.c | 6 +- apps/chrg/applications/main.h | 8 -- apps/chrg/applications/thread/chrg_lcd.c | 151 +++++++++++++++++++++ apps/chrg/applications/thread/chrg_lcd.h | 23 ++++ apps/chrg/applications/thread/chrg_roll.c | 6 +- apps/chrg/applications/thread/chrg_south.c | 7 +- apps/chrg/applications/utils/chrg_pkg.c | 6 +- docs/1.HMI | Bin 9888636 -> 9888636 bytes 11 files changed, 201 insertions(+), 19 deletions(-) delete mode 100644 apps/chrg/applications/main.h diff --git a/apps/boot/application/func/firmware.c b/apps/boot/application/func/firmware.c index fe41d04..5541197 100644 --- a/apps/boot/application/func/firmware.c +++ b/apps/boot/application/func/firmware.c @@ -56,6 +56,7 @@ void FM_Init (void) #endif #endif +#if 0 printf("onchip size : 0x%lX\r\n", SIZE_ONCHIP_FLASH); printf("0x%08lX+0x%lX 'parameters'.\r\n", BASE_PARAMETERS, SIZE_PART_PARAMETERS); printf("0x%08X+0x%X 'app'.\r\n", _flash_app_part.addr, _flash_app_part.len); @@ -65,6 +66,7 @@ void FM_Init (void) printf("0x%08X+0x%X 'factory'.\r\n", _flash_factory_part.addr, _flash_app_part.len); #endif #endif +#endif #if (CONFIG_DECRYPT) AES_init_ctx_iv(&aesCtx, (uint8_t *)AES256_KEY, (uint8_t *)AES256_IV); diff --git a/apps/boot/application/main.c b/apps/boot/application/main.c index 6082407..5304dbe 100644 --- a/apps/boot/application/main.c +++ b/apps/boot/application/main.c @@ -168,7 +168,7 @@ int main (void) MX_GPIO_Init(); MX_DMA_Init(); MX_USART_Init(); - +#if 0 printf("\r\n\r\n========================================\r\n"); printf("\t%s boot V%d.%d.%d\r\n", NAME_CHIP, VERSION_MAIN, VERSION_SUB, VERSION_FIX); @@ -176,7 +176,10 @@ int main (void) printf("Chip UID: %08X - %08X - %08X\r\n", HAL_GetUIDw0(), HAL_GetUIDw1(), HAL_GetUIDw2()); printf("========================================\r\n"); - +#else + printf("\tboot V%d.%d.%d built @ %s\r\n", + VERSION_MAIN, VERSION_SUB, VERSION_FIX, BUILD_TIMESTAMP); +#endif APP_Init(); while (1) { diff --git a/apps/chrg/applications/bsp/chrg_vcom.c b/apps/chrg/applications/bsp/chrg_vcom.c index c4a974b..34e85bd 100644 --- a/apps/chrg/applications/bsp/chrg_vcom.c +++ b/apps/chrg/applications/bsp/chrg_vcom.c @@ -3,6 +3,8 @@ #include #include "chrg_vcom.h" +#include "chrg_lcd.h" + #define DBG_TAG "chrg.vcom" #include @@ -34,6 +36,8 @@ int chrg_vcom_console_init (void) { rt_console_set_device(DEV_NAME_VCOM); + chrg_lcd_init(); + return 0; } diff --git a/apps/chrg/applications/main.c b/apps/chrg/applications/main.c index dd3f21c..b825a15 100644 --- a/apps/chrg/applications/main.c +++ b/apps/chrg/applications/main.c @@ -7,11 +7,11 @@ #include #include "shell.h" -#include "main.h" #include "chrg_wdt.h" void show_app_version (void) { +#if 0 rt_kprintf("\r\n\r\n================================================\r\n"); rt_kprintf("\tcharger control via RT-Thread v%d.%d.%d\r\n", RT_VERSION_MAJOR, RT_VERSION_MINOR, RT_VERSION_PATCH); @@ -19,6 +19,10 @@ void show_app_version (void) rt_kprintf("\tUID: %08X %08X %08X\r\n", HAL_GetUIDw2(), HAL_GetUIDw1(), HAL_GetUIDw0()); rt_kprintf("================================================\r\n"); +#else + rt_kprintf("\tcharger control via RT-Thread v%d.%d.%d built @ %s, %s\r\n", + RT_VERSION_MAJOR, RT_VERSION_MINOR, RT_VERSION_PATCH, __DATE__, __TIME__); +#endif } int main(void) diff --git a/apps/chrg/applications/main.h b/apps/chrg/applications/main.h deleted file mode 100644 index a6d6dfc..0000000 --- a/apps/chrg/applications/main.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __MAIN_H__ -#define __MAIN_H__ - -#include - - -#endif - diff --git a/apps/chrg/applications/thread/chrg_lcd.c b/apps/chrg/applications/thread/chrg_lcd.c index 3b7b08a..277f95d 100644 --- a/apps/chrg/applications/thread/chrg_lcd.c +++ b/apps/chrg/applications/thread/chrg_lcd.c @@ -1,4 +1,155 @@ +#include +#include + +#include "chrg_roll.h" +#include "chrg_north.h" +#include "chrg_south.h" #include "chrg_lcd.h" +#define LOG_TAG "chrg.lcd" +#define DBG_LEVEL DBG_LOG +#include + +struct chrg_lcd_t chrglcd = { + .name = THR_NAME_LCD, + .devname = DEV_NAME_LCD, + .tid = RT_NULL, + .tty = RT_NULL, + +}; + + +static int chrg_lcd_parse (char *recv) +{ + + if (strstr(recv, "main.CH1_RunStop.txt")) { + if (strstr(recv, "run")) { + chrgroll.en_nor[IDX_CH_0] = 1; + } else if (strstr(recv, "stop")) { + chrgroll.en_nor[IDX_CH_0] = 0; + } + +// ... + + } + + return 0; +} + + +int chrg_lcd_send (char *cmd) +{ + rt_ssize_t ret = -1; + struct chrg_tty_t *pTTY = chrglcd.tty; + if (RT_NULL == cmd) { + return -1; + } + + int len = strlen(cmd); + rt_uint8_t *data = rt_malloc(len+3); + if (RT_NULL == data) { + LOG_E("malloc failed."); + return -1; + } + + memcpy(data, cmd, len); + memset(&data[len], 0xFF, 3); + + if (RT_NULL != pTTY) { + ret = chrg_tty_send(pTTY, data, len+3); + } + + if (RT_NULL != data) { + rt_free(data); + data = RT_NULL; + } + + return ret; +} + +static void chrg_lcd_thread_entry (void *data) +{ + struct chrg_lcd_t *pLCD = (struct chrg_lcd_t *)data; + + if ((RT_NULL == pLCD)||(RT_NULL == pLCD->tty)) { + return ; + } + + int len = 0; + struct chrg_tty_t *pTTY = pLCD->tty; + + chrg_tty_set_recv_tmo(pTTY, 100); + if (chrg_tty_connect(pTTY) != RT_EOK) { + chrg_tty_destory(pTTY); + return; + } + + while (1) { + len = chrg_tty_recv(pTTY, pLCD->rx_buf, sizeof(pLCD->rx_buf)); + if (len <= 0) { + rt_thread_mdelay(1); + continue; + } + + rt_kprintf("%s\r\n", (char *)pLCD->rx_buf); + + chrg_lcd_parse((char *)pLCD->rx_buf); + } + +} + +int chrg_lcd_init (void) +{ + rt_err_t ret; + struct chrg_lcd_t *pLCD = &chrglcd; + + pLCD->tty = chrg_tty_create(pLCD->devname, 115200, 0, -1, 1); + if (RT_NULL == pLCD->tty) { + LOG_E("tty can't create."); + return -1; + } + + rt_memset(pLCD->rx_buf, 0, SIZE_BUF_TTY); + + ret = rt_mutex_init(&pLCD->lock, pLCD->name, RT_IPC_FLAG_FIFO); + if (ret != RT_EOK) { + LOG_E("init mutex '%s' failed.", pLCD->name); + return ret; + } + + pLCD->tid = rt_thread_create(pLCD->name, chrg_lcd_thread_entry, pLCD, 4096, + RT_MAIN_THREAD_PRIORITY, 20); + if (RT_NULL != pLCD->tid) { + rt_thread_startup(pLCD->tid); + } else { + LOG_E("create thread '%s' failed.", pLCD->name); + } + + return 0; +} + + +//INIT_APP_EXPORT(chrg_lcd_init); + +#if 1 +static int lcdsend(rt_uint8_t argc, char **argv) +{ + if (2 != argc) { + rt_kprintf("help : %s \r\n e.g. %s main.CH1_Volt_Show.txt=\"5.000\"", + argv[0], argv[0]); + return -1; + } + + chrg_lcd_send(argv[1]); + + return 0; +} + + +MSH_CMD_EXPORT(lcdsend, lcd send test); +#endif + + + diff --git a/apps/chrg/applications/thread/chrg_lcd.h b/apps/chrg/applications/thread/chrg_lcd.h index 856043f..0f5738c 100644 --- a/apps/chrg/applications/thread/chrg_lcd.h +++ b/apps/chrg/applications/thread/chrg_lcd.h @@ -1,6 +1,29 @@ #ifndef __CHRG_LCD_H__ #define __CHRG_LCD_H__ +#include + +#include "chrg_tty.h" + +#define THR_NAME_LCD "thr.lcd" +#define DEV_NAME_LCD "uart2" + +struct chrg_lcd_t { + const char *name; + const char *devname; + struct rt_thread *tid; + struct rt_mutex lock; + + struct chrg_tty_t *tty; + rt_uint8_t rx_buf[SIZE_BUF_TTY]; + +}; + +extern struct chrg_lcd_t chrglcd; + +extern int chrg_lcd_send (char *cmd); + +extern int chrg_lcd_init (void); #endif diff --git a/apps/chrg/applications/thread/chrg_roll.c b/apps/chrg/applications/thread/chrg_roll.c index 80f4d61..4ccd311 100644 --- a/apps/chrg/applications/thread/chrg_roll.c +++ b/apps/chrg/applications/thread/chrg_roll.c @@ -76,7 +76,7 @@ static void chrg_roll_thread_entry (void *data) sink_get_vc(pSW->sink.loadv, pSW->sink.loadc); } - rt_kprintf("Nor[%d].%d\r\n", pNOR->idx, pSW->id); + //rt_kprintf("Nor[%d].%d\r\n", pNOR->idx, pSW->id); } } else { sou_idx = pROLL->idx - TOTAL_CHS; @@ -89,11 +89,11 @@ static void chrg_roll_thread_entry (void *data) chrg_switch_south(pSOU->idx); pSW = &pSOU->sw[pSOU->idx]; - // todo pkg send if (ID_ELOAD == pSW->id) { source_get_vc(pSW->source.voltage, pSW->source.current); + // change pro modbus } - rt_kprintf("Sou[%d].%d\r\n", pSOU->idx, pSW->id); + //rt_kprintf("Sou[%d].%d\r\n", pSOU->idx, pSW->id); } } diff --git a/apps/chrg/applications/thread/chrg_south.c b/apps/chrg/applications/thread/chrg_south.c index 56f3435..7ae321d 100644 --- a/apps/chrg/applications/thread/chrg_south.c +++ b/apps/chrg/applications/thread/chrg_south.c @@ -83,7 +83,7 @@ static int chrg_south_init (void) rt_err_t ret; struct chrg_south_t *pSOU = &chrgsouth; - pSOU->tty = chrg_tty_create(pSOU->devname, 2000000, 0, -1, 1); + pSOU->tty = chrg_tty_create(pSOU->devname, 115200, 0, -1, 1); if (RT_NULL == pSOU->tty) { LOG_E("tty can't create."); return -1; @@ -111,10 +111,11 @@ static int chrg_south_init (void) INIT_APP_EXPORT(chrg_south_init); -#if 0 +#if 1 static int south_send(rt_uint8_t argc, char **argv) { - return chrg_south_send("1234567890abcdef", 16); + return source_get_vc(5000, 1000); + //return chrg_south_send("1234567890abcdef", 16); } diff --git a/apps/chrg/applications/utils/chrg_pkg.c b/apps/chrg/applications/utils/chrg_pkg.c index e07498c..ae9a84f 100644 --- a/apps/chrg/applications/utils/chrg_pkg.c +++ b/apps/chrg/applications/utils/chrg_pkg.c @@ -2,6 +2,8 @@ #include #include +#include "chrg_north.h" +#include "chrg_south.h" #include "chrg_pkg.h" #include "chrg_utils.h" @@ -38,10 +40,10 @@ int chrg_pkg_send (eIDX_TTY idx, rt_uint8_t *data, rt_uint16_t len) switch (idx) { case IDX_TTY_NORTH: -// pTTY = chrgnorth.tty; + pTTY = chrgnorth.tty; break; case IDX_TTY_SOUTH: -// pTTY = chrgsouth.tty; + pTTY = chrgsouth.tty; break; default: return -1; diff --git a/docs/1.HMI b/docs/1.HMI index 58f0285dd9e942969d7414fab184e690b6e1d241..42743061307c45cd0184e3831eb98d2669726a66 100644 GIT binary patch delta 8136 zcmeHMeRNdS5r6Lm7Lovou)7%f$RZ#pfrKO?NFXFJ;X9H*BJ!1uAqbeT`!>68Q$CU? zR|9^65H3`K&|*cP7zp&0`T_kAv>;6_6+E1x){062fujddfzJE5Z|)|$#eaHE&uRCZ z$(en3<~MU^=IzYA`Qgy1c0T}#_pKI3NcQ%-Gp>r$gdyHif%`PQ>lF$+3xXJZyj@zW zHR(gIFca2;_q*Fp3km^pAlxL}&no;A-=gcXxPTZ3w)H*%*UR9=U*L;Hl3 zR%_c{3kn-%g-RS*(0&ilF- z{(AX9Tm3+r2qXbT0ks2a4`fpZ+B%%P_WuYQ#qpnu@N&1U-VG^mLkirG0ym_<4JmL# z3f#61jo1Dg1e)EpPZG&+GJ@PsMv@FNii{?iWDLn7*(8TNKypbQ8B4~I@niy-NG6fV zB%eG;rjP(PD49)iJ+9z7H9o<26u|!|JJjCkzDJ^H{O5u0bWU=0gL*U3w_Z|5ca_to zb$;)T=1lEZVK_L|kACx^cTjB;yw}G}hilpiLeO;h+YZQA#3KJ$7vyKa3#yp%Ee_=K z5|DqhrywjbW$tq!zo)Ox*XrRJJU|eZnnJJLgHh`XKW{988;7Dy!oA2hz-E~4Z5hZv zmnjHUCZ>>sd{rLuXU2nlCiF1;$T9xt6y!6fA;0G#YqRGCy3P5Us=u}#9Ihy;SiGO zC8#?CVZ2&U5UdxWP#p%q#V-O4=xchYzF11LzLXu}A`2l&+)6)P3Xh&q`#i6_EE*v0 zxBWY)*A;ZogENA4G`W-Pr0;i>v*{;2eNMF|!MD*A)HY0C?+b55VmkcMq{SFoN~)an zSVuWaoJ>nUg;%7t#=<}N9W*XZ?rz|p`c2Tl7k?IBJ~1ocpugPfH{`{=oP{glH7*>7 zfVk#WnHte_^&-V#>>=)Xf7?A|9s_Xt2Dqi~VGhcRTj=iL{@>bjzsfw)kFWwS%6&TQPT_8ksw1RZo)mosqfduth{i z#>0j`N@4mPX~7k*L*(@7_L%{v7(x4HS4c^Ix?<*ZwxNBVv)-r&UW^HEy{R4o^Zn#% zGsEW^{e0yoiB}En@Gk&8I;h%7g9Y%%tSBve;#ZvY$$C;mTX^fyH4O5$bR4s-VwA3G zCGnpW>xZ3@fqXz!>aa8Z_3w68$LDX?#!#(gr5Y`3Iy|PA^%Jq z@=`Z!P1R21FK{huZZB+8A9F2hMnA4){grE31%t3n9pPG5ZYs8;-*PQ$6wJD;W$ou$ z*1co!`EF=gtZycb#pl~5K+9sv{qhB2nc3sE6bM3%$tM<}LmQ?e-)$D^zEFY&V#@IO zQ}d9Q79xIarHK#rh3j4f4f>J46h!69C1~Kw8hk$Y3FJR{5)I5=i5oceEMgX|LjF%{ z1fhuSej-H!hklBn*_)7mdkY#E`3f4?zYRgtb^`xD+*?_Lj@5>VyuhL|{{j!)y$AZk zk7&12w;uX5t1A}<7FmPHk7&G--I^?hmK1v`aEhU~>cNtOQ_TtZd}#O9?O1a5(tYl% zPfwm;Ij4QA)+}}Jt?PEtbPE@Fy%ptX`qq6~yq#XE^4nuH?FXiy=B@g*n84{xw)Ae< zx1~FbI6-<+Bjh%um1q-HgjOQ;uri%m(kjz>Gv`~HF=<6Y>S-k}HB8=lhs+Ty5>PJ= zsC5;z@yVFYB0=@GY69lua5cfZMYX9d5>ld7ArPmq6~aTA16>3#(Z%wf8m3-&oPRe3 zh zDv8H2hWQ9M{W+Ylg~TJ7g%o~kcUg4=r=_rU#6cN#6dq`RRYnk_@MXjyu`&vaB@Sfy zPYYK?9E?##;X&@^Kw1|O2f>OcEQoZERYU1*Ye+N(%#Z`&wJ--ly@m!^HIyDwL;B3g zL+Ddy=!sGXNV0OC9$Gu1+c;m~xpc5`J_tFL>KKDLjF7sa`WXWetTRSij3HLV!1*|| zVq)}T9KRWO9rVLOTbN|4ULYQ!^vC}N5r8V1lEZd zO?TUUp@;oR`dPD0YD(+j(phbu6a039ZA9{}p&M?{tewiP+B$Q*eF+9}#`hSA1KxU= z!`V3ONEQUYDZditaK>MUIh^q_%;Ajx9Om$^&3mxpnK&pG=2(2K&;oZyY{t%?fc#Oo zI%326SeV1za4OM0uNEWU0cLOZ{Lxb655v68bhBaJX8c<)Z!>FmJQSU3mdz9)o$C$$wnC4nuTo z0~*WSh{oP&#OE1X@%fvtB2dZ>0S!|$FzKKB&L>_07(S)myGcR{ejWvTYbI)i-CS>zX7Kz`X} zLAYiXm+~$0o~y{u|6b$aDoMVd9vtRtr*7I4PVqz!8aGH-3NE zI)!y7&3vHBsWu)DY?jzdIkY6FxMXVXGy~+T69B?3cMk?J2_i$W9bi68E)J->`#{ zvmGuQ_o3D@jUS@e)J&W53r@zkb+u&FRk0xu#+4{8e-W?rii2ri`wszx5+Y!QQhnW} z>}!u1XR|ZQxY}ial5OMHTU7+CJ5}&;V>AXhhs*eZx}a079IouMvXmN9EJsHw&C%!^ z#N6_Y*5!fjm^@`O=O7!&EC*Lk3UM&4q?LoP?xZOjtFvkT1b~}T5X`k)1z~hm9WyhC zbqh;eNsliL@e=ZlUandM5qRsd5HDHt*SuW)0bC$!VWN#QpoAJdK_?f`^w$3B0R?~e zO6uE7l&@?otRTqw3SmWGVM+H@g@5>rjS-C*Mn4Y1k!q^nLq#ZPyoXjZRx1;uP)t90 zg@~z}UksLV68b)p(E9;w?&^gsV^) z{OZ`PA*))lP}eAq{8yC}4nT_$C!%L2bG!0`sM>3S*&@wMRO~eNWUz^DdRcMQ&)QxM z^b?@PKuds@0xbio0jdS619}|j383Xb1n5bir-15#RsgL8dK%~%pl5-e19~3l1)xzW~}8ZFc|w delta 3571 zcmeHIYgAO%6+Y(<44{$@Ei=RiVl1JJKK6G3QbL=ms#-#mH#n{3PAf$S2n!+v z5sI*Kr#0-@_y1SaAO(V*09~*|1TJP;I_8MvC%A< zjbSM)m8G$Cmcg7XleySfHjcf>#=l;7X0lxN zQ#Om`vDs`6o6F|0`OMAo*#fqZEnX0b3LXJ{26VClf z+!|SU#JfkopQEwWqo8Do6z^+BdQQ-LpO9Zz2vHIG6BQQZ72Sfo18;PvjS@wOV%mR= zH>Q&>crwT@^(JJkX)_}($j|jR_;};6iGv6!HjPd`N5~qJXABAQ!@~*D%? z3OPi5DyHzw%cQ>!gOV7J9kTjrHQd(I(=0$*foz96HVyc&9+E3BbmtA_>U0Qe702@L zn#7R;+&rk*q2epa2^TMk)%?k3@h=fwL|gdw-^=xRq>B~`KWY`@6H}2ko1%qdOkbJ& zZ=r;=85t3B#u|)$TsQ7+6~CpFfcd~<+>dN(c|a%SYancQl2_mWd9Yu}^7pfv?QF50=PYJHK{D&bL5ZW|1B0 z?~4ErPRkD7;rC*l@5|VhZ`nM+-OPJd;Mf1D7F!_Q?~Ufaxv$*a%Tx9#EAGSlTQxhx z?p9)9=2@*br0mjW^1Zv2%I*+#LurR~b=V}mH!Jfkyyl3uDGaVuX{Kq~4kd>l_(bzr z;0|zZWG)2W`(08T(ET`G%H1a=KiF(V z4vxFUQvRS#DW%YU%wy*R4$8k1z<)`tHSR0le@L#3g!2VTJiIpmU418HphqC{O9{8B zE3(3=TWTup3!m?i?DW;@OwUGe{#r@llTOJI)X*M=SUoiy1wSjm3|;o?XJoe}Ap7IB z$T%m*z)*@A8?}Hmzc+?w{7Xr;7>dxIKwCsRIKL6A4K?`kHueKiN~-b<&0E@QF@%_2}YtZx_XbQK)GrDnntDVl@6)|vCiFmHuY2G>q|9LCgx z%9W`1s((mUSdpmOz+IrZcw?f9HM0#+kHK#Ts}3lBUAEV>i+-5*oMsxw+O<^P*kAJq zaO77g$DC)>YI85DS>bMiX6`lrS#_>J2g3TJShov<)%g}W2r~5yG7_}87W$0w0uP#` zz!BGcW;`6@0c?tIQOe@&Mc8A_lEaANn?0D(+i-jrCLFg{bJ50zOixc7meI(|%{6C<7lVqO@JNxD;|AP*E#VuLEq1{}e z+4)>er)w(F*11|YDBF&-V~sY+6t|;VMRA`8=_-x}qa%&vjE=-8&5kU`L5Wz6Sc6!L zC`PP9lpuTvKVm(i6tMxp5I;whA<7XIh*uFC5t|UNAvPnnAhseZ5!(>2BdQSF5!D>( IYHlR|2c&nou>b%7