bosko lekovic
/
EthTCPclient_05_02
p1
Diff: main.cpp
- Revision:
- 1:10e2a0bef1b4
- Parent:
- 0:b01306ccbbe1
- Child:
- 2:4deba4264f65
--- 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 ={ ð, &sa, crm_req, crm_fun }; + struct s_rm s_srm ={ ð, &sa, srm_req, srm_fun }; - Thread TCPThread; - TCPThread.start( callback( tcpThread_fun, ð )); - +// Thread TCPThread; +// TCPThread.start( callback( tcpThread_fun, ð )); + + + 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; +} +