Advertisement
Guest User

Patched RGMII_AT_Client.c for Quectel modems

a guest
Apr 22nd, 2025
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.38 KB | Source Code | 0 0
  1. #include <netinet/in.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <errno.h>
  5. #include <fcntl.h>
  6. #include <unistd.h>
  7.  
  8.  
  9. #define SERVER_IP      "192.168.224.1"
  10. #define SERVER_PORT    1555
  11. #define BUFFER_SIZE    2048*4
  12.  
  13. int ql_rgmii_manager_server_fd_state(int n)
  14. {
  15.     if(n == -1 && (errno == EAGAIN || errno == EWOULDBLOCK))
  16.     {
  17.         return 1;
  18.     }
  19.     if( n < 0  && (errno == EINTR || errno == EINPROGRESS))
  20.     {
  21.         return 2;
  22.     }
  23.     else
  24.     {
  25.         return 0;
  26.     }
  27. }
  28.  
  29. int main(int argc, char **argv)
  30. {
  31.     char buffer_send[BUFFER_SIZE] = {0};
  32.     char buffer_recv[BUFFER_SIZE] = {0};
  33.     char buffer_temp[BUFFER_SIZE] = {0};
  34.     int rv = 0;
  35.     int count = 0;
  36.     int len = 0;
  37.     int i = 0;
  38.     int ok = 0;
  39.     char * datap = NULL;
  40.    
  41.     if(argc == 2)
  42.     {
  43.         if(BUFFER_SIZE-3-2 <= strlen(argv[1])) return 0;
  44.         memcpy(buffer_send+3, argv[1], strlen(argv[1]));
  45.         memcpy(buffer_send+3+strlen(argv[1]), "\r\n", 2);
  46.     }
  47.     else if(argc == 1)
  48.         snprintf(buffer_send+3, BUFFER_SIZE-3, "at\r\n");
  49.     else
  50.         return 0;
  51.    
  52.           buffer_send[0] = 0xa4;
  53.     buffer_send[1] = (uint8_t)((strlen(buffer_send+3) & (0xff00))>>8);
  54.     buffer_send[2] = (uint8_t)(strlen(buffer_send+3) & (0x00ff));
  55.    
  56.    
  57.     struct sockaddr_in client_addr;
  58.     memset(&client_addr, 0, sizeof(client_addr));
  59.     client_addr.sin_family = AF_INET;
  60.     client_addr.sin_addr.s_addr = htons(INADDR_ANY);
  61.     client_addr.sin_port = htons(0);
  62.    
  63.     int client_socket = socket(AF_INET,SOCK_STREAM,0);
  64.     if( client_socket < 0)
  65.     {
  66.         fprintf(stderr,"! Create Socket Failed!\r\n");
  67.         return 0;
  68.     }
  69.    
  70.     if( bind(client_socket,(struct sockaddr*)&client_addr,sizeof(client_addr)))
  71.     {
  72.         fprintf(stderr,"! Client Bind Port Failed!\r\n");
  73.         return 0;
  74.     }
  75.    
  76.     struct sockaddr_in server_addr;
  77.     memset(&server_addr, 0, sizeof(server_addr));
  78.     server_addr.sin_family = AF_INET;
  79.     if(inet_aton(SERVER_IP, &server_addr.sin_addr) == 0)
  80.     {
  81.         fprintf(stderr,"! Server IP Address Error!\r\n");
  82.         return 0;
  83.     }
  84.     server_addr.sin_port = htons(SERVER_PORT);
  85.     socklen_t server_addr_length = sizeof(server_addr);
  86.    
  87.     //set_non_blocking_mode client_socket
  88.     fcntl(client_socket, F_SETFL, fcntl(client_socket, F_GETFL, 0) | O_NONBLOCK);
  89.    
  90.    
  91.     fprintf(stderr,"! RGMII-AT Client Up => %s:%d\r\n", SERVER_IP, SERVER_PORT);
  92.     while(1)
  93.     {
  94.         if(connect(client_socket,(struct sockaddr*)&server_addr, server_addr_length) >= 0)
  95.         {
  96.             break;
  97.         }
  98.         printf("! Can Not Connect To => %s:%d\r\n", SERVER_IP, SERVER_PORT);
  99.         usleep(200*1000);
  100.     }
  101.  
  102.    
  103.     if(1)
  104.     {
  105.         rv = send(client_socket, buffer_send, (3+(int)strlen(buffer_send+3)),0);
  106. //        printf("\r\n\r\nsend:\r\n\r\n====================================> send all:%d\r\n==> len=%d head=0x%02x\r\n\"%s\"\r\n",
  107. //                    rv, (int)strlen(buffer_send+3), (uint8_t)buffer_send[0], buffer_send+3);
  108.         if(rv != (3+(int)strlen(buffer_send+3)))
  109.         {
  110.             fprintf(stderr,"! Send buf not complete\r\n");
  111.             //return 0;
  112.         }
  113.     }
  114.  
  115.    
  116. //    printf("\r\n\r\nrecv:");
  117.     while(1)
  118.     {
  119.         rv = recv(client_socket, buffer_recv, BUFFER_SIZE, 0);
  120.         if(rv >= 3)
  121.         {
  122. //            printf("\r\n\r\n====================================> recv all:%d", rv);
  123.            
  124.             datap = buffer_recv;
  125.             do
  126.             {
  127.                 len = (((uint16_t)((uint8_t)*(datap+1))<<8) | ((uint16_t)((uint8_t)*(datap+2)) & (0x00ff)));
  128.                 memset(buffer_temp, 0, sizeof(buffer_temp));
  129.                 memcpy(buffer_temp, datap+3, len);
  130.                
  131. //                printf("\r\n==> len=%d head=0x%02x\r\n\"%s\"\r\n", len, (uint8_t)*(datap), buffer_temp);
  132.                printf("%s\n",buffer_temp);
  133.                if (! strncmp(buffer_temp+len-4,"OK\r\n",4)) {
  134. //               printf("--detected OK--\r\n");
  135.                  ok=1;
  136.                }
  137. //               else {
  138. //                 printf("last 4 bytes: 0x%02x 0x%02x 0x%02x 0x%02x \r\n",*(buffer_temp+len-4),*(buffer_temp+len-3),*(buffer_temp+len-2),*(buffer_temp+len-1));
  139. //               }
  140. //                for(i=0; i<len; i++)
  141. //                {
  142. //                    //printf("0x%02x ", buffer_temp[i]);
  143. //                }
  144. //                printf("\r\n");
  145.                
  146.                 rv = rv-len-3;
  147.                 if(rv>0)
  148.                     datap = buffer_recv+3+len;
  149.                 if(rv<0)
  150.                     fprintf(stderr,"! client_socket recv not complete\r\n");
  151.                
  152.             }while(rv > 0);
  153.            
  154.             memset(buffer_recv, 0, sizeof(buffer_recv));
  155.            
  156.         }
  157.         else if(rv > 0)
  158.         {
  159.             fprintf(stderr,"! client_socket recv error internal\r\n");
  160.             break;
  161.         }
  162.         else
  163.         {
  164.             if(!ql_rgmii_manager_server_fd_state(rv))
  165.             {
  166.                 fprintf(stderr,"! client_socket recv error\r\n");
  167.                 break;
  168.             }
  169.            
  170.         }
  171.        
  172.         count++;
  173.         usleep(10*1000);
  174.        
  175.         if((count == 300) || (ok == 1))   // jnh
  176.         {
  177.             break;
  178.         }
  179.        
  180.     }
  181.     printf("\r\n");
  182.     close(client_socket);
  183.     return 0;
  184. }
  185.  
  186.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement