EthTCPclient_05

Revision:
1:10e2a0bef1b4
Parent:
0:b01306ccbbe1
Child:
2:4deba4264f65
diff -r b01306ccbbe1 -r 10e2a0bef1b4 main.cpp
--- a/main.cpp	Wed Feb 12 20:25:05 2020 +0000
+++ b/main.cpp	Sat Feb 15 15:38:25 2020 +0000
@@ -10,11 +10,14 @@
 
 #include <stdio.h>
 #include <string.h>
+#include <sstream>
+#include <iostream>
 #include "TCPSocket.h"
 
 
 void putOnDispNo(int broj, char boja);
 void putOnDisp(char *s, char boja);
+void requestMessageThread(struct s_rm *s);
 void slanjefun();
 
 #define IP_ADDR   "192.168.2.11"
@@ -27,8 +30,10 @@
 EthernetInterface eth;
 nsapi_error_t err;
 
+char * extract_string( char delimiter, char *ulazni_str, int n_str );
+void putOnDisp( char *s, char boja);
 
-int strcount( unsigned char *ps)
+int strcount( char *ps)
 {
  int i=0;
   for(i=0; ps[i] != 0; i++);
@@ -36,14 +41,48 @@
 }
 
 void tcpThread_fun( EthernetInterface *e);
+void requestMessage( EthernetInterface *e);
 
  DigitalOut tast(PTB19,0);               
 //RawSerial rs485(PTC17,PTC16);           
 RawSerial rs485(PTD3,PTD2);
- 
+
+struct s_rm
+{
+    EthernetInterface *e;
+    SocketAddress *sa;
+    char *tx_msg;
+    void (*fun_rec)(char*);
+};
+
+char crm_req[]={'{','1','|','1','}'};//"{1|1}";
+char crm_resp[100];
+void crm_fun( char *rx)
+{
+  printf("crm_resp: %s\n\r",rx);
+  strcmp(crm_resp, rx);
+}
+
+char srm_req[]="{5|1|1}";
+void srm_fun( char *rx )
+{
+   printf("srm_resp: %s\n\r",rx);
+   char *strno= extract_string(';',rx, 2);
+   char boja = 0;
+   if(atoi(strno) == 0) { boja = 1; }
+   else if(atoi(strno) >0 && atoi(strno)<5) { boja = 4; }
+   else { boja = 2; }
+   printf("broj: %d - boja: %d\n\r", atoi(strno),boja);
+   putOnDisp((char*)strno, boja);
+}
+
+
+
 
 int main(void)
 {
+   
+
  
  rs485.format(8, mbed::RawSerial::Even, 1);
  
@@ -62,15 +101,28 @@
     printf( "IP adresa:  %s\n\r", ip);
     printf( "net mask:   %s\n\r", eth.get_netmask() );
     printf( "GW adresa:  %s\n\r", eth.get_gateway() );
+ 
+    SocketAddress sa("192.168.2.254", 12197);
+ 
+ struct s_rm s_crm ={ &eth, &sa, crm_req, crm_fun }; 
+ struct s_rm s_srm ={ &eth, &sa, srm_req, srm_fun }; 
     
-    Thread TCPThread;
-    TCPThread.start( callback( tcpThread_fun, &eth ));
- 
+//    Thread TCPThread;
+//    TCPThread.start( callback( tcpThread_fun, &eth ));
+    
+    
+      Thread CRMThread;
+      CRMThread.start( callback( requestMessageThread, &s_crm ));
+      CRMThread.join();
     int i=0;
   
     while(true)
     {
-      thread_sleep_for(20000);
+      thread_sleep_for(10000);
+      Thread SRMThread;
+      printf("Thread id= %d\n\r",(int)&SRMThread);
+      SRMThread.start( callback( requestMessageThread, &s_srm ));
+      SRMThread.join();
       printf("main %d\n\r",i++);
     }
  //   printf("\n\rmain: Kraj, error=%d\n\r",err);    fflush(stdout);
@@ -92,7 +144,7 @@
 
     TCPSocket tcpSocket;  
     nsapi_error_t err=NULL;      
-    SocketAddress sa("192.168.2.254", 12197);
+    SocketAddress sa("192.168.1.26", 12197);
     printf("ip= %s, ver= %d, port= %d\n\r", sa.get_ip_address(), sa.get_ip_version(), sa.get_port() ); 
     int i=1;
     
@@ -105,10 +157,10 @@
             while( true)
             {
                 printf("iteracija %d   \n\r", i);
-                    if(strcount(txbuf) )
+                    if(strcount((char*)txbuf) )
                     {
-                        printf(" za slanje %d bajtova: %s\n\r", strcount(txbuf), txbuf);
-                        if( (err = tcpSocket.send(txbuf,strcount(txbuf))<0 ) )   {    printf("send err %d\n\r", err); break; }
+                        printf(" za slanje %d bajtova: %s\n\r", strcount((char*)txbuf), txbuf);
+                        if( (err = tcpSocket.send(txbuf,strcount((char*)txbuf))<0 ) )   {    printf("send err %d\n\r", err); break; }
                         else(" poslano %d bajtova od: %s\n\r", err, txbuf);
                         memset(txbuf, 0, sizeof(txbuf) );
                     }
@@ -141,8 +193,128 @@
      }
 }
 
+char conf_server_ip[] = "192.168.1.26";
+int conf_server_port = 12197;
+unsigned char msg_request_message[] = "{5|1|1;2}";
+unsigned char msg_catalogue_request_message[] = "{1|1}";
+
+
+
+
+void requestMessage(EthernetInterface *e)
+{
     
+    while(true)
+    {
+        
+        TCPSocket tcpSocket;  
+        nsapi_error_t err=NULL;      
+        SocketAddress sa(conf_server_ip, conf_server_port);
+        char rxbuf[1024];
+        memset(rxbuf, 0, sizeof(rxbuf)); 
+        if((err=tcpSocket.open( e )) ==0 )        
+        {
+            if((err = tcpSocket.connect(sa)) == 0)
+            {
+                if( (err = tcpSocket.send(msg_request_message,strcount((char*)msg_request_message))<0 ) )   
+                {    
+                    printf("requestMessage - send err: %d\n\r", err);
+                }
+                else
+                {
+                    printf("requestMessage - poslano: %d bajtova od: %s\n\r", err, msg_request_message);
+                    if( (err = tcpSocket.recv(rxbuf,sizeof(rxbuf)) <0 )) {    printf("requestMessage - recv err %d\n\r", err); }
+                    else                                                 
+                    {
+                      
+                            printf("requestMessage - prim tel %d: %s\n\r", err, rxbuf) ; 
+                            
+//                            char* parts[100];
+//                            int partcount = 0;
+//                            
+//                            parts[partcount++] = rxbuf;
+//                            
+//                            char* ptr = rxbuf;
+//                            while(*ptr) { //check if the string is over
+//                                if(*ptr == ';') {
+//                                    *ptr = 0;
+//                                    parts[partcount++] = ptr + 1;
+//                                }
+//                                ptr++;
+//                            }
+                            
+                            extern char * extract_string( char delimiter, char *ulazni_str, int n_str );
 
+                            char *strno= extract_string(';',rxbuf, 2);
+                            printf("%s\n\r",strno);
+                            int color = 0;
+                            int brojMesta = atoi(strno);
+                            printf("Broj mesta: %d\n\r",brojMesta);
+                            if (brojMesta==0) { color=1; }
+                            else if(brojMesta>0&&brojMesta<10){ color=4; }
+                            else { color=2; }
+                            printf("Color: %d\n\r",color);
+                            {
+                              extern  void putOnDisp(char *, char );
+                                 putOnDisp((char*)strno, color);
+                            } 
+                    } 
+                }
+            }
+            
+            printf("requestMessage - zatvaranje konekcije\n\r");
+            tcpSocket.close();
+        }
+        
+      thread_sleep_for(30000);
+    }
+    
+}   
+
+//
+//struct s_rm
+//{
+//    EthernetInterface *e;
+//    SocketAddress *sa;
+//    char *tx_msg;
+//    void (*fun_rec)(char*);
+//};
+
+
+void requestMessageThread(struct s_rm *s)
+{
+        
+        TCPSocket tcpSocket;  
+        nsapi_error_t err=NULL;      
+        char rxbuf[1024];
+        memset(rxbuf, 0, sizeof(rxbuf)); 
+        if((err=tcpSocket.open( s->e )) ==0 )        
+        {
+            if((err = tcpSocket.connect(*(s->sa))) == 0)
+            {
+                char *ss = s->tx_msg;
+                if( (err = tcpSocket.send(s->tx_msg,strcount(ss))<0 ) )   
+                {    
+                    printf("requestMessage - send err: %d\n\r", err);
+                }
+                else
+                {
+                    printf("requestMessage - poslano: %d bajtova od: %s\n\r", err, s->tx_msg);
+                    if( (err = tcpSocket.recv(rxbuf,sizeof(rxbuf)) <0 )) {    printf("requestMessage - recv err %d\n\r", err); }
+                    else                                                 
+                    {
+                      
+                            printf("requestMessage - prim tel %d: %s\n\r", err, rxbuf) ; 
+                            s->fun_rec( rxbuf );                            
+                    } 
+                }
+            }
+            
+            printf("requestMessage - zatvaranje konekcije\n\r");
+            tcpSocket.close();
+        }
+    
+}   
 
 //
 //enum nsapi_error {
@@ -175,11 +347,12 @@
 unsigned char buf_tel[100] = {0x71,0x00,0x0D,0x71,0x43,0x01,0x1B,0x4A,0x01,0x01,0x1B,0x43,1,0x33,0xD5,0x16};
 void putOnDisp( char *s, char boja)
 {
-    int ubb = 13+strlen(s)+1+1-4-2;
+    int ubb = 13+strlen(s)+1+1-4-2; // ubb = ukupan broj bajtova
     unsigned char lh, ll;
     ll=ubb;
     lh=ubb>>8;
-
+    printf("Boja: %d\n\r",boja);
+    buf_tel[12]=boja;
     memcpy(buf_tel+13, s, strlen(s)+2);
     
     int suma=0;
@@ -218,3 +391,29 @@
         thread_sleep_for(1000);
     }
 }
+
+
+char * extract_string( char delimiter, char *ulazni_str, int n_str )
+{
+  int br_str=0;
+  char *ret_str=ulazni_str;
+  char* ptr = ulazni_str;
+                            
+    while(*ptr) 
+    { 
+        if(*ptr == delimiter) 
+        {
+           *ptr = 0;
+           if( br_str == n_str )   return ret_str;
+           else
+           {
+              br_str++;
+              ret_str = ptr + 1;
+           }
+        }
+        ptr++;
+    }
+    if( br_str == n_str )   return ret_str;
+    return NULL;
+}
+