From db40049993bd217a651a0bc92851b3b9521798a2 Mon Sep 17 00:00:00 2001 From: xu <1012118331@qq.com> Date: Thu, 8 Oct 2026 09:17:12 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mpp/sample/common/sample_comm_vo.c | 2 +- mpp/sample/cx6771_uart/lc660x | Bin 0 -> 30256 bytes mpp/sample/lc6600_uart/Make.txt | 1 + mpp/sample/lc6600_uart/ctrl_pnl.c | 79 ++- mpp/sample/lc6600_uart/ctrl_pnl_test.c | 450 ++++++++++++++++++ mpp/sample/lc6600_uart/lc6600_test | Bin 0 -> 29976 bytes .../{ctrl_pnl_suzhou.c => ctrl_pnl_anjian.c} | 0 7 files changed, 489 insertions(+), 43 deletions(-) create mode 100644 mpp/sample/cx6771_uart/lc660x create mode 100644 mpp/sample/lc6600_uart/ctrl_pnl_test.c create mode 100644 mpp/sample/lc6600_uart/lc6600_test rename mpp/sample/uart2net_mesh/{ctrl_pnl_suzhou.c => ctrl_pnl_anjian.c} (100%) diff --git a/mpp/sample/common/sample_comm_vo.c b/mpp/sample/common/sample_comm_vo.c index ee43fe8..9874785 100644 --- a/mpp/sample/common/sample_comm_vo.c +++ b/mpp/sample/common/sample_comm_vo.c @@ -289,7 +289,7 @@ void sample_vo_chn_switch(int value){ } #endif -#if 1 +#if 1 //2lu switch (value) { case 0: /* 布局一 双屏:视频1(左) + 视频2(右),各 960x720 */ vo_chn_switch(0, 1, 1); diff --git a/mpp/sample/cx6771_uart/lc660x b/mpp/sample/cx6771_uart/lc660x new file mode 100644 index 0000000000000000000000000000000000000000..5b488950bddfcaba4f260ad1b6ece0a14c46c7d2 GIT binary patch literal 30256 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 literal 0 HcmV?d00001 diff --git a/mpp/sample/lc6600_uart/Make.txt b/mpp/sample/lc6600_uart/Make.txt index 5682273..cdec757 100644 --- a/mpp/sample/lc6600_uart/Make.txt +++ b/mpp/sample/lc6600_uart/Make.txt @@ -1,3 +1,4 @@ arm-mix410-linux-gcc -o lc6600_uart_hisi ctrl_pnl.c confile.c serial.c uartinf.c udp_util.c -lrt arm-mix410-linux-gcc -o lc660x_uart_hisi ctrl_pnl_new.c confile.c serial.c uartinf.c udp_util.c -lrt arm-mix410-linux-gcc -o lc660x_uart_hisi ctrl_pnl.c confile.c serial.c uartinf.c udp_util.c -lrt +arm-mix410-linux-gcc -o lc660x_uart_hisi ctrl_pnl_test.c confile.c serial.c uartinf.c udp_util.c -lrt diff --git a/mpp/sample/lc6600_uart/ctrl_pnl.c b/mpp/sample/lc6600_uart/ctrl_pnl.c index 2351e8e..3042542 100644 --- a/mpp/sample/lc6600_uart/ctrl_pnl.c +++ b/mpp/sample/lc6600_uart/ctrl_pnl.c @@ -125,9 +125,6 @@ int setup_lc6600(struct lc6600_param *pparam){ if(read_ok == NULL){ printf("can not exce AT+CFUN=1"); } - - - } static long elapsed_ms(struct timeval *start, struct timeval *end) @@ -275,8 +272,6 @@ int get_rx2_freq(char *rx2){ #endif - - int main (int argc, char *argv[]) { int n_read; @@ -370,49 +365,49 @@ int main (int argc, char *argv[]) n_read = uart_read(ROUTE_UART, _rx_data); - printf("%s\n",_rx_data); + printf("%s\n",_rx_data); #if 1 - if(n_read > 10){ + if(n_read > 10){ - //ip_str=strstr(_rx_data,argv[2]); - //ip_str=strstr(_rx_data,"192.168.1.15"); - //ip_len = strlen(ip_str); - //printf("ip_str %d \n ",ip_len); - ip_str=strstr(_rx_data,argv[2]); - ip_len = strlen(argv[2]); - if(ip_str){ - //buffer_param[0] = 0x55; - //printf("ip_str %s \n ",ip_str); - memcpy(index,ip_str+(ip_len+2),1); - //printf("index %s \n ",index); + //ip_str=strstr(_rx_data,argv[2]); + //ip_str=strstr(_rx_data,"192.168.1.15"); + //ip_len = strlen(ip_str); + //printf("ip_str %d \n ",ip_len); + ip_str=strstr(_rx_data,argv[2]); + ip_len = strlen(argv[2]); + if(ip_str){ + //buffer_param[0] = 0x55; + //printf("ip_str %s \n ",ip_str); + memcpy(index,ip_str+(ip_len+2),1); + //printf("index %s \n ",index); - if(strcmp(index, "1") == 0){ - memcpy(rssi1,ip_str+(ip_len+5),3); - dbm1 = atoi(rssi1); - printf("++dbm1:%d\n",dbm1); - buffer_param[1] = dbm1; - gettimeofday(&tv_rx1, NULL); + if(strcmp(index, "1") == 0){ + memcpy(rssi1,ip_str+(ip_len+5),3); + dbm1 = atoi(rssi1); + printf("++dbm1:%d\n",dbm1); + buffer_param[1] = dbm1; + gettimeofday(&tv_rx1, NULL); + } + + if(strcmp(index, "2") == 0){ + memcpy(rssi2,ip_str+(ip_len+5),3); + dbm2 = atoi(rssi2); + printf("++dbm2:%d\n",dbm2); + buffer_param[2] = dbm2; + gettimeofday(&tv_rx2, NULL); + } + + }else{ + printf("no signal\n"); + } + } - - if(strcmp(index, "2") == 0){ - memcpy(rssi2,ip_str+(ip_len+5),3); - dbm2 = atoi(rssi2); - printf("++dbm2:%d\n",dbm2); - buffer_param[2] = dbm2; - gettimeofday(&tv_rx2, NULL); + else{ + printf("no \n"); + uart_write(ROUTE_UART, "AT^DAPR=1\r"); + // buffer_param[0] = 0xAA; } - - }else{ - printf("no signal\n"); - } - - } - else{ - printf("no \n"); - uart_write(ROUTE_UART, "AT^DAPR=1\r"); - // buffer_param[0] = 0xAA; - } #endif } diff --git a/mpp/sample/lc6600_uart/ctrl_pnl_test.c b/mpp/sample/lc6600_uart/ctrl_pnl_test.c new file mode 100644 index 0000000..0c9a5e9 --- /dev/null +++ b/mpp/sample/lc6600_uart/ctrl_pnl_test.c @@ -0,0 +1,450 @@ +#include +#include +#include // gettimeofday +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "serial.h" +#include "uartinf.h" +#include "confile.h" +#include "udp_util.h" + +char _rx_data[1024]; + +struct lc6600_param{ + int password; + int freq; + int power; + int bw; + int ap_sta; + int ip; + int setup; +}; + +char freq1[10]; +char freq2[10]; +//char dbm1[5]; +//char dbm2[5]; + +#define RSSI_TIMEOUT_MS 3000 //超时时间 +#define RSSI_NO_SIGNAL 0x55 //无信号值 + + + +int setup_lc6600(struct lc6600_param *pparam){ + int n_read; + char *read_ok; + char str[30]; + + uart_write(ROUTE_UART, "AT+CFUN=0\r"); + n_read = uart_read(ROUTE_UART, _rx_data); + read_ok = strstr(_rx_data,"OK"); + if(read_ok == NULL){ + printf("can not exce AT+CFUN=0"); + } + sleep(1); + //password + sprintf(str,"AT^DAPI=%d\r",pparam->password); + uart_write(ROUTE_UART, str); + printf("%s\n",str); + n_read = uart_read(ROUTE_UART, _rx_data); + read_ok = strstr(_rx_data,"OK"); + if(read_ok == NULL){ + printf("can not exce AT^DAPI"); + } + sleep(1); + // 1 center 2 station + sprintf(str,"AT^DDTC=%d\r",pparam->ap_sta); + uart_write(ROUTE_UART, str); + printf("%s\n",str); + n_read = uart_read(ROUTE_UART, _rx_data); + read_ok = strstr(_rx_data,"OK"); + if(read_ok == NULL){ + printf("can not exce AT^DDTC"); + } + sleep(1); + +// sprintf(str,"AT^DDTC=%d\r",pparam->ap_sta); + uart_write(ROUTE_UART, "AT^DSTC=2\r"); + printf("AT^DSTC\n"); + n_read = uart_read(ROUTE_UART, _rx_data); + read_ok = strstr(_rx_data,"OK"); + if(read_ok == NULL){ + printf("can not exce AT^DDSTC"); + } + sleep(1); + + + // 2 5M 3 10M 4 15M 5 20M "25" dbm + sprintf(str,"AT^DRPS=,%d,\"%d\"\r",pparam->bw,pparam->power); + uart_write(ROUTE_UART, str); + printf("%s\n",str); + n_read = uart_read(ROUTE_UART, _rx_data); + read_ok = strstr(_rx_data,"OK"); + if(read_ok == NULL){ + printf("can not exce AT^DRPS\n"); + } + sleep(1); + // 01 800M 04 1.4G 08 2.4G + sprintf(str,"AT^DAOCNDI=0%d\r",pparam->freq); + uart_write(ROUTE_UART, str); + printf("%s\n",str); + n_read = uart_read(ROUTE_UART, _rx_data); + read_ok = strstr(_rx_data,"OK"); + if(read_ok == NULL){ + printf("can not exce AT^DAOCNDI\n"); + } + + sleep(1); + + + sprintf(str,"AT^NETIFCFG=2,\"192.168.2.%d\"\r",pparam->ip); + uart_write(ROUTE_UART, str); + printf("%s\n",str); + n_read = uart_read(ROUTE_UART, _rx_data); + read_ok = strstr(_rx_data,"OK"); + if(read_ok == NULL){ + printf("can not exce AT^DAOCNDI\n"); + } + + sleep(1); + + uart_write(ROUTE_UART, "AT+CFUN=1\r"); + n_read = uart_read(ROUTE_UART, _rx_data); + read_ok = strstr(_rx_data,"OK"); + if(read_ok == NULL){ + printf("can not exce AT+CFUN=1"); + } + + + +} + +static long elapsed_ms(struct timeval *start, struct timeval *end) +{ + return (end->tv_sec - start->tv_sec) * 1000L + + (end->tv_usec - start->tv_usec) / 1000L; +} + +#define LINK_FLAG "/tmp/link_stat" + +static void write_link_stat(void) +{ + char buf[64]; + int fd, n; + + fd = open(LINK_FLAG ".tmp", O_CREAT | O_WRONLY | O_TRUNC, 0666); + if (fd < 0) + return; + n = snprintf(buf, sizeof(buf), "link=1\nts=%ld\n", (long)time(NULL)); + write(fd, buf, n); + close(fd); + rename(LINK_FLAG ".tmp", LINK_FLAG); +} + +static int force_up = 0; /* 调试用:强制标记为已连通 */ + + +#if 0 + +int get_rx1_freq(char *rx1){ + + char *s1; + char *s2; + char *s3; + char *s4; + int len; + int i; + + s1=strchr(rx1,','); + s2=strchr(s1+1,','); + s3=strchr(s2+1,','); + s4=strchr(s3+1,','); + + len= s2-s1-1; + + for(i=0;i 3) + force_up = atoi(argv[3]); + + + fd_param = shm_open("/param.txt",O_RDWR|O_CREAT|O_EXCL,0777); + if(fd_param < 0){ + fd_param = shm_open("/param.txt",O_RDWR,0777); + }else + ftruncate(fd_param,4096); + buffer_param= mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_SHARED,fd_param,0); + +#if 1 + uart_write(ROUTE_UART, "AT^DRPS?\r"); + n_read = uart_read(ROUTE_UART, _rx_data); + printf("%s\n",_rx_data); + buffer_freq = (n_read > 0) ? strstr(_rx_data, "^DRPS:") : NULL; + if(buffer_freq){ + memcpy(freq_str, buffer_freq+6, 6); + freq_str[6] = '\0'; + + printf("drps : %s\n",freq_str); + freq = atoi(freq_str); + + printf("freq %d \n",freq); + buffer_param[3]=freq; + }else{ + printf("no freq\n"); + } +#endif + + + //freq=atoi(argv[3]); +// buffer_param[0] = 0x55; + //buffer_param[3] = 14300; + if(lc6600.ap_sta == 1){ + uart_write(ROUTE_UART, "AT^DAPR=1\r"); + // n_read = uart_read(ROUTE_UART, _rx_data); + // printf("%s\n",_rx_data); + + + while(1){ + + gettimeofday(&tv_now, NULL); + + rx1_ok = (tv_rx1.tv_sec != 0 && elapsed_ms(&tv_rx1, &tv_now) <= RSSI_TIMEOUT_MS); + rx2_ok = (tv_rx2.tv_sec != 0 && elapsed_ms(&tv_rx2, &tv_now) <= RSSI_TIMEOUT_MS); + + if (!rx1_ok) { + buffer_param[1] = RSSI_NO_SIGNAL; + printf("rx1 no signal timeout\n"); + } + + if (!rx2_ok) { + buffer_param[2] = RSSI_NO_SIGNAL; + printf("rx2 no signal timeout\n"); + } + + if(force_up) + write_link_stat(); + printf("%s\n",_rx_data); + +#if 1 + if(n_read > 10){ + + //ip_str=strstr(_rx_data,argv[2]); + //ip_str=strstr(_rx_data,"192.168.1.15"); + //ip_len = strlen(ip_str); + //printf("ip_str %d \n ",ip_len); + ip_str=strstr(_rx_data,argv[2]); + ip_len = strlen(argv[2]); + if(ip_str){ + write_link_stat(); + //buffer_param[0] = 0x55; + //printf("ip_str %s \n ",ip_str); + memcpy(index,ip_str+(ip_len+2),1); + //printf("index %s \n ",index); + + if(strcmp(index, "1") == 0){ + memcpy(rssi1,ip_str+(ip_len+5),3); + dbm1 = atoi(rssi1); + printf("++dbm1:%d\n",dbm1); + buffer_param[1] = dbm1; + gettimeofday(&tv_rx1, NULL); + } + + if(strcmp(index, "2") == 0){ + memcpy(rssi2,ip_str+(ip_len+5),3); + dbm2 = atoi(rssi2); + printf("++dbm2:%d\n",dbm2); + buffer_param[2] = dbm2; + gettimeofday(&tv_rx2, NULL); + } + + }else{ + printf("no signal\n"); + } + + } + else{ + printf("no \n"); + uart_write(ROUTE_UART, "AT^DAPR=1\r"); + // buffer_param[0] = 0xAA; + } + +#endif + } + } + +} diff --git a/mpp/sample/lc6600_uart/lc6600_test b/mpp/sample/lc6600_uart/lc6600_test new file mode 100644 index 0000000000000000000000000000000000000000..263a523a9c209f1ddd09f7d6a7e3156db85d9d26 GIT binary patch literal 29976 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