Telit GL865 GET yöntemi ile bağlantı sorunu

Başlatan sdonmez, 25 Ocak 2017, 12:22:55

sdonmez

#15
Alıntı yapılan: Klein - 27 Ocak 2017, 05:38:26
Get sorgusunun sonuna "\x1A"  karakteri eklemezseniz bazı siteler cevap vermiyor.

Bunu ilk defa duyuyorum. Deneyecegim.

Edit:  bu komut sms gondermede kullanilan Ctrl+Z.

Fakat dedigim gibi bazen gayet guzel cevap aliyorum. Anlamadigim da bu..

Ben ayni kartimla daha once de benzer bir sistem yapmistim. Boyle bir sorun yasamamistim. 9600 baud rate ile calisiyordum.

Sonra Int_rda kesmesi altindaki okuma sistemini, gelen verinin  bittigini algilayacagim sekilde switch-case yapisina donusturdum. Bu yapi cok daha guzel calisiyor cunku.. Ve 38400 baud rate'e ciktim..

Dun gece acaba okuma hizini arttirdigim icin mi boyle oldu diye dusundum ama degistiremedim henuz..

Web sorgusuna kadar olan AT komutlarinda 38400 baud da sorunum yok ama.. Web sorgusunda bir sekilde etkisi olabilir mi?


sdonmez

Sorunu hala çözemedim.

GSM modulü bile değiştirdim ama nafile..

Kendi sitemin haricinde www.telit.com adresine de sorgu göndermeyi denedim. Sorgu başarılı olmuş ise html kodlarının tamamını aldığımı gördüm. Fakat yaptığım sorguların çoğunda Bad Request alıyorum.

Modüle gönderdiğim komutlar:

fprintf(COM1, "AT#SKTD=0,80,www.telit.com\r");   
fprintf(COM1, "GET / HTTP/1.1\r\n");
delay_ms(50);                                   
fprintf(COM1, "Host: www.telit.com\r\n"); 
delay_ms(50);                                             
fprintf(COM1, "Connection: keep-alive");
delay_ms(50);                                           
fprintf(COM1, "\r\n\r\n"); 



Dönen Bad Request cevabı:

HTTP/1.1 400 Bad Request                                                     
Content-Type: text/html                                                      
Cache-Control: no-cache                                                     
Connection: close                                                            
Content-Length: 630
                                                           
X-Iinfo: 10-53068326-0 0NNN RT(1485670871684 5299) q(-1 -1 -1 -1) r(0 -1) b1
                                                                           
<html style="height:100%"><head><META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
<meta name="format-detection" content="telephone=no"><meta name="viewport" conte
nt="initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrom
e=1"></head><body style="margin:0px;height:100%"><iframe src="/_Incapsula_Resour
ce?CWUDNSAI=2&xinfo=10-53068326-0 0NNN RT(1485670871684 5299) q(-1 -1 -1 -1) r(0
 -1) b1&incident_id=0-432198904000481354&edet=3&cinfo=ffffffff" frameborder=0 wi
dth="100%" height="100%" marginheight="0px" marginwidth="0px">Request unsuccessf
ul. Incapsula incident ID: 0-432198904000481354</iframe></body></html>
        
NO CARRIER



Neyi yanlış yaptığımı bir türlü anlamıyorum. Yardımınızı rica ederim.

mufitsozen

AT#SKDT satirini daha dikkatli olusturunuz.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

sdonmez

#18
Merhaba,

Sorunu çözdüm. Problem, "fprintf(COM1, "AT#SKTD=0,80,www......com,255\r"); " komutunu sadece 1 kez gönderip cevap beklemek yerine arka arkaya göndermemden kaynaklanıyormuş. Ben CONNECT cevabı alıyorum nasıl olsa diye çok üstünde durmamıştım. Sanırım bir hataya sebep oluyordu.

Şimdi web sayfasına sorgu yapıyorum ve Switch-case içinde gelen verileri kontrol ediyorum. Yine takıldığım bir nokta oldu. Başka bir gözün daha kontrol etmesinde fayda var.

Web sayfasından dönen cevap şöyle:
HTTP/1.1 200 OK                                                                 
Cache-Control: private                                                          
Content-Type: text/html; charset=utf-8                                          
Server: Microsoft-IIS/8.5                                                       
X-AspNet-Version: 4.0.30319                                                     
X-Powered-By: ASP.NET                                                           
Date: Wed, 01 Feb 2017 21:50:05 GMT                                             
Content-Length: 693                                                             
                                                                                
                                                                                
                                                                                
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or
g/TR/xhtml1/DTD/xhtml1-transitional.dtd">                                       
                                                                                
<html xmlns="http://www.w3.org/1999/xhtml">                                     
<head><title>                                                                   
                                                                                
</title></head>                                                                 
    <body>                                                                      
            <form name="form1" method="post" action="./deneme.aspx?id=78&amp;ver
i=1&amp;girisim=0" id="form1">                                                  
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJOTczNTMy
NjI5D2QWAgIDD2QWAgIBDw8WAh4EVGV4dAUFU2FkYW5kZGTXCEfVjpDT+E/H33ra6p0XUGO0mL/vqDu1
ZEF46JAxpA==" />                                                                
                                                                                
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value
="5DFC4FE4" />                                                                  
                <span id="Label1">Sadan</span>                                  
    </form>                                                                     
                                                                                
    </body>                                                                     
</html>


Ben bu kod içindeki "Sadan" ifadesini arıyorum. Program bulamayınca, aralara ne olduğunu anlamak için bazı bayraklar, sayaçlar ekledim. Gördüm ki, "FlagA_cnt" sayacı bana "S" karakterinin dönen tüm cevap içinde 7 kez bulunduğunu gösteriyor. Halbuki "Sadan" içindeki "S" harfi sekizinci "S" karakteri.


RDA kesmesinin ilgili bölümü şöyle:

if(response_rcvd == 0)        
		{                                  
			indexS ++;  
			                                         
	   	switch (gsm_state)       
			{
				case  0:
	                response = 0;                   // Clear response
	                if (tmp == 'O')                  // We have 'O', it could be "OK" or "Ok"
	                  gsm_state = 1;                 // Expecting 'K'
	                if (tmp == '>')                  // We have '>', it could be "> "      
	                  gsm_state = 10;                // Expecting ' '
	                if (tmp == 'E')                  // We have 'E', it could be "ERROR"
	                  gsm_state = 30;                // Expecting 'R'
	                if (tmp == "S")                  // We have 'S', it could be "Sadan" 
	                {                                                                    
	                  gsm_state = 40;                // Expecting 'a' 
	                  gsc = 0;    
	                  FlagA = 1; 
	                  FlagA_index = indexS; 
	                  FlagA_cnt ++;                   
	                }
	                if (tmp == 'R')                  // We have 'R', it could be "READY"
	                  gsm_state = 50;                // Expecting 'E' 
	                if (tmp == '+')                  // We have '+', it could be "+CREG: 0,1"
	                  gsm_state = 60;                // Expecting 'C'    
	                if (tmp == 'G')                  // We have 'G', it could be "GPRS: 1"
	                  gsm_state = 70;                // Expecting 'P'   
	                if (tmp == 'C')                  // We have 'C', it could be "CONNECT"
	                  gsm_state = 110;               // Expecting O   
	                break;
				case  1:                                                                    
	                if (tmp == 'K') {                // We have 'K' ->
	                  response = GSM_OK;             // We have "OK" response
	                  gsm_state = 20;                // Expecting CR+LF
	                }                  
	                else                      
	                  gsm_state = 0;                 // Reset state machine 
	                break;
	      	case 10:                        
	                if (tmp == ' ') 
	                {
	                  response_rcvd = 1;             // We have "> " response 
	                  response = GSM_Ready_To_Receive_Message; // Set reception flag
	                  responseID = response;         // Set response ID 
	                  gsc = 10; 
	                }
	                gsm_state = 0;                   // Reset state machine
	                break;
	      	case 20:           
	                if (tmp == 13)                   // We have 13, it could be CR+LF
	                  gsm_state = 21;                // Expecting LF
	                else
	                  gsm_state = 0;                 // Reset state machine
	                break;
	      	case 21: 
	                if (tmp == 10) 
	                {                					// We have LF, response is complete
	                  response_rcvd = 1;             // Set reception flag 
	                  responseID = response;         // Set response ID
	                }                    
	                gsm_state = 0;                   // Reset state machine
	                break;
	      	case 30: 
	                if (tmp == 'R')                  // We have 'R', it could be "ERROR"
	                  gsm_state = 31;                // Expecting 'R'
	                else
	                  gsm_state = 0;                 // Reset state machine
	                break;                                                                                                                               
	      	case 31: 
	                if (tmp == 'R')                  // We have 'R', it could be "ERROR"
	                  gsm_state = 32;                // Expecting 'O'
	                else                     
	                  gsm_state = 0;                 // Reset state machine
	                break;
	      	case 32:                                           
	                if (tmp == 'O')                  // We have 'O', it could be "ERROR"
	                  gsm_state = 33;                // Expecting 'R'
	                else
	                  gsm_state = 0;                 // Reset state machine
	                break;
	      	case 33: 
	                if (tmp == 'R'){                 // We have 'R'
	                  response_rcvd = 1;             // We have "ERROR" response
	                  response = GSM_ERROR;          // Set reception flag       
	                  responseID = response;         // Set response ID
	                }                
	                gsm_state = 0;                   // Reset state machine
	                break; 
	   case 40: 
	                if (tmp == "a")                  // We have 'a', it could be "Sadan"
	                {
	                  gsm_state = 41;                // Expecting 'd' 
	                  gsc = 40;    
	                  FlagB = 1;
	                  FlagB_index = indexS;                
	                }
	                else
	                  gsm_state = 0;             	// Reset state machine
	                break;           
	      	case 41: 
	                if (tmp == "d")                  // We have 'd', it could be "Sadan"
	                { 
	                  gsm_state = 42;                // Expecting 'a'
	                  gsc = 41;    
	                  FlagC = 1; 
	                  FlagC_index = indexS;
	                }
	                else
	                  gsm_state = 0;                 // Reset state machine
	                break;        
	      	case 42: 
	                if (tmp == "a")                  // We have 'a', it could be "Sadan"
	                { 
	                  gsm_state = 43;                // Expecting 'n'
	                  gsc = 42; 
	                }             
	                else                
	                  gsm_state = 0;                 // Reset state machine
	                break;                  
	      	case 43:           
	                if (tmp == "n")
	                {                						// We have "Sadan"
	                  response_rcvd = 1;             // 
	                  response = GSM_WEBEND;          // Set reception flag
	                  responseID = response;         // Set response ID
	                  gsc = 43;    
	                }
	                else                   
	                  gsm_state = 0;                 // Reset state machine
	                break;   
	       case 50: 
	                if (tmp == 'E')                  // We have 'E', it could be "READY"
	                  gsm_state = 31;                // Expecting 'A'
	                else
	                  gsm_state = 0;                 // Reset state machine
	                break;  
	       case 51: 
	                if (tmp == 'A')                  // We have 'A', it could be "ERROR"
	                  gsm_state = 31;                // Expecting 'D'
	                else
	                  gsm_state = 0;                 // Reset state machine
	                break;  
	       case 52: 
	                if (tmp == 'D')                  // We have 'D', it could be "ERROR"
	                  gsm_state = 31;                // Expecting 'Y'
	                else
	                  gsm_state = 0;                 // Reset state machine
	                break;                            
	       case 53: 
	                if (tmp == 'Y'){                 // We have 'Y'
	                  response_rcvd = 1;             // We have "READY" response
	                  response = GSM_READY;          // Set reception flag
	                  responseID = response;         // Set response ID
	                }                
	                gsm_state = 0;                   // Reset state machine
	                break;   
	       case 60: 
	                if (tmp == 'C')                  // We have 'C', it could be "+CREG: 0,1"    
	                  gsm_state = 61;                // Expecting 'R' 
	                else
	                  gsm_state = 0;                 // Reset state machine 
	                break;   
	       case 61:                  
	                if (tmp == 'R')                  // We have 'R', it could be "+CREG: 0,1"     
	                  gsm_state = 62;                // Expecting 'E'   
	                else
	                    gsm_state = 0;               // Reset state machine
	               break;                 
	       case 62:                                                                                  
	                if (tmp == 'E')                  // We have 'E', it could be "+CREG: 0,1"     
	                  gsm_state = 63;                // Expecting 'G'   
	                else
	                  gsm_state = 0;                 // Reset state machine
	                break;                               
	       case 63: 
	                if (tmp == 'G')                  // We have 'G', it could be "+CREG: 0,1"    
	                  gsm_state = 64;                // Expecting ':'      
	                else
	                  gsm_state = 0;                 // Reset state machine
	                break;  
	       case 64: 
	                if (tmp == ':')                  // We have ':', it could be "+CREG: 0,1"
	                  gsm_state = 65;                // Expecting ' '
	                else                   
	                  gsm_state = 0;                 // Reset state machine
	                break;  
	       case 65: 
	                if (tmp == ' ')                  // We have ' ', it could be "+CREG: 0,1"
	                  gsm_state = 66;                // Expecting '0'
	                else
	                  gsm_state = 0;                 // Reset state machine
	                break;  
	       case 66: 
	                if (tmp == '0')                  // We have '0', it could be "+CREG: 0,1"
	                  gsm_state = 67;                // Expecting ','
	                else
	                  gsm_state = 0;                 // Reset state machine
	                break;  
	       case 67: 
	                if (tmp == ',')                  // We have ',', it could be "+CREG: 0,1"
	                  gsm_state = 68;                // Expecting '1'
	                else
	                  gsm_state = 0;                 // Reset state machine
	                break;                  
	       case 68:                          
	                if (tmp == '1'){                 // We have '1'   
	                  response_rcvd = 1;             // We have "+CREG: 0,1" response
	                  response = GSM_REGISTERED;          // Set reception flag  
	                  responseID = response;         // Set response ID 
	                }
	                else
	                {
	                  response_rcvd = 1;             // We have "+CREG: 0,x" response 
	                  response = GSM_NOTREGISTERED;  // Set reception flag  
	                  responseID = response;         // Set response ID 
	                }   
	                gsm_state = 0;                   // Reset state machine
	                break;       
	       case 70: 
	                if (tmp == 'P')                  // We have 'P', it could be "GPRS: 1"    
	                  gsm_state = 71;                // Expecting 'R' 
	                else
	                  gsm_state = 0;                 // Reset state machine 
	                break;  
	       case 71: 
	                if (tmp == 'R')                  // We have 'R', it could be "GPRS: 1"    
	                  gsm_state = 72;                // Expecting S' 
	                else
	                  gsm_state = 0;                 // Reset state machine 
	                break; 
	       case 72: 
	                if (tmp == 'S')                  // We have 'S', it could be "GPRS: 1"    
	                  gsm_state = 73;                // Expecting ':' 
	                else
	                  gsm_state = 0;                 // Reset state machine 
	                break;   
	       case 73: 
	                if (tmp == ':')                  // We have ':', it could be "GPRS: 1"    
	                  gsm_state = 74;                // Expecting ' ' 
	                else
	                  gsm_state = 0;                 // Reset state machine 
	                break;               
	       case 74: 
	                if (tmp == ' ')                  // We have ' ', it could be "GPRS: 1"    
	                  gsm_state = 75;                // Expecting '1' 
	                else
	                  gsm_state = 0;                 // Reset state machine 
	                break; 
	       case 75: 
	                if (tmp == '1'){                 // We have '1'   
	                  response_rcvd = 1;             // We have "GPRS: 1" response
	                  response = GSM_IPPRESENT;      // Set reception flag  
	                  responseID = response;         // Set response ID      
	                } 
	                else           
	                {
	                  response_rcvd = 1;             // We have "GPRS: 0" or "GPRS: 2" response 
	                  response = GSM_IPNOTPRESENT;   // Set reception flag  
	                  responseID = response;         // Set response ID 
	                }   
	                gsm_state = 0;                   // Reset state machine
	                break;     
	       case 110: 
						if (tmp == 'O'){              	// We have 'O', it could be "CONNECT" 
							gsm_state = 111;  
							gsc = 110; 
						}
						else                          
							gsm_state = 0;
						break;  
	       case 111: 
	                if (tmp == 'N'){             	// We have 'N', it could be "CONNECT" 
	                     gsm_state = 112;  
	                     gsc = 111; 
	                }
	                else                                    
	                     gsm_state = 0;
	                break;
	       case 112:
						if (tmp == 'N'){              // We have 'N', it could be "CONNECT" 
							gsm_state = 113;    
							gsc = 112; 
						}
						else
							gsm_state = 0;
						break;    
	       case 113: 
						if (tmp == 'E'){              // We have 'E', it could be "CONNECT" 
							gsm_state = 114;
							gsc = 113; 
						}                    
						else
							gsm_state = 0;
						break;   
	       case 114: 
						if (tmp == 'C'){              // We have 'C', it could be "CONNECT" 
							gsm_state = 115;   
							gsc = 114; 
						}
						else
							gsm_state = 0;
						break; 
	       case 115:                 
						if (tmp == 'T'){              	// We have 'T'
	                  response_rcvd = 1;            // We have "CONNECT" response
	                  response = GSM_CONNECT;        // Set reception flag
	                  responseID = response;        // Set response ID 
	                  gsc = 115; 
	                }  
						gsm_state = 0;
						break; 
	      default:                                  // Unwanted character
	                gsm_state = 0;                   // Reset state machine
	              
	    }                                  
		                     
	  }           


"Sadan" ifadesi için konuşacak olursak, normalde Case 0, 40, 41,42... adımlarını izlemesi lazım fakat son "S" yi bulamıyor.
Gece gece yine kafamı karıştırdı.


sdonmez

Buldum.

">" kontrolünden kaynaklıymış. Teşekkürler