#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 } } }