p1

Files at this revision

API Documentation at this revision

Comitter:
bosko001
Date:
Thu Jun 18 15:23:05 2020 +0000
Parent:
6:19e7658575fe
Commit message:
p1

Changed in this revision

PGSdisplay.cpp Show annotated file Show diff for this revision Revisions of this file
PGSdisplay.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/PGSdisplay.cpp	Mon Feb 24 17:14:44 2020 +0000
+++ b/PGSdisplay.cpp	Thu Jun 18 15:23:05 2020 +0000
@@ -9,49 +9,82 @@
 #define DISP_ADR   40
 
 DigitalOut tast(PTB19,0);
+DigitalOut proba(PTB18,0);
 ////RawSerial rs485(PTC17,PTC16);
-RawSerial rs485(PTD3,PTD2);
+//Serial rs485(PTD3,PTD2);
+UARTSerial rs485(PTD3,PTD2);
+DigitalOut led(LED2,1);
+
+
+void printT(char *s, char *tel, int duzina);
+
+char urxbuf[100];
+int urb=0;
 
 
-void ev(int)
+void rec( void )
 {
-    tast=0;
+   int i = 0, j = 0;
+    while(true)
+    {
+proba = 1;
+            int k;
+     //     if( rs485.readable() ) 
+          {
+              urb = rs485.read((uint8_t*)&urxbuf[0],100/*,NULL,NULL*/);
+ 
+//             printf("k=%x\n\r",k);
+                printT("prijem", urxbuf, urb);
+            }
+proba = 0;
+        thread_sleep_for(1);
+    }
 }
 
-uint8_t rs[100];
-void init_disp( void)
+
+int dispGetResponce( void )
 {
-    rs485.format(8,RawSerial::Even,1);  
-    while(rs485.readable())
-    {
-        rs485.read(rs,1,NULL);
-    }
-    putOnDisp("elcom", 3);
-    int i =0;
-    //while(rs485.readable()==0);
-    wait(0.5);
-    if(rs485.readable())
-    {
-        
-        rs485.read(rs+i,1,NULL);
-        i++;
-    }
-    printf("ODGOVOR: %X - %d\n\r",rs[0],i);
-    //int i=0;
-//    
-//    printf("%d\n\r",rs485.readable());
-//    if(rs485.readable())
-//    {
-//        printf("\n\rRECEIVE: ");   
-//        while(rs485.readable())
-//        {
-//            rs[i++] = rs485.getc();
-//        }
-//        printf("%X:  RECEIVED %d: \n\r",rs[0], i);   
-//    }
+   urb = 0;
+   thread_sleep_for(100);
+   if(urb && (urxbuf[0] == 0xe5))      return 1;
+   return 0;
 }
 
 unsigned char buf_tel[100] = {0x71,0x00,0x0D,0x71,0x43,DISP_ADR,0x1B,0x4A,0x01,0x01,  /*0x1b,0x45,0x1,*/  0x1B,0x43,1,0x33,0xD5,0x16};
+
+void init_disp( void)
+{
+    rs485.set_format(8,SerialBase::Even,1);
+//   rs485.attach( tast_off, Serial::TxIrq );  
+//   rs485.attach( rc, Serial::RxIrq );  
+
+    Thread *Ttast = new Thread;
+    extern void tast_fun(void);
+    Ttast->start( (tast_fun ));
+
+
+    Thread *Trec = new Thread;
+    Trec->start( rec );
+
+    
+    while( true )
+    {      
+     extern void putOnDispNo( int i, char boja);
+     static int i=1;
+       buf_tel[5] = i;
+        putOnDispNo(i, 1);
+
+        char *r;
+        if( dispGetResponce( ) ) { printf( "adresa je %d\n\r", i); break;}
+        i++;
+        if(i==0) i++;
+        else if(i == 254) {i = 1; break;}
+    }
+
+}
+
+
+
 #define NO_BEFORE_DATA 13
 #define NO_WITH_DATA (NO_BEFORE_DATA + strlen(s))
 
@@ -71,10 +104,15 @@
     buf_tel[1]=ubb>>8;
     buf_tel[2]=ubb;
 
+    
+//      Thread *t = new Thread;
+//    extern void tast_fun(Thread* t);
+//    t->start( callback(tast_fun, t ));
+//    thread_sleep_for(1);  
 
-    tast=1;
-    rs485.write(buf_tel, NO_WITH_DATA+2+2,ev);
-    
+    tast = 1;
+    rs485.write((const void*)buf_tel, (size_t)(NO_WITH_DATA+2+2));
+//     for(int i=0; i<  NO_WITH_DATA+2+2; i++ ) rs485.putc(buf_tel[i]);
 }
 
 void putOnDispNo(int broj, char boja)
@@ -101,6 +139,39 @@
 }
 
 
+
+int rs485tastovanje( int tast )
+{ 
+static int start = 0;
+int ret = -1;
+      if( tast == 0 ) { start = 0;  }
+      else
+      { 
+        if(  start == 0)  { start = 1; ret = 0;  thread_sleep_for(1);} 
+        else 
+        {
+          volatile char c = UART2->S1;
+           if ( c & UART_S1_TC_MASK)  {ret = 1; start = 0; }
+        }        
+      }
+  return ret;
+}
+
+
+void tast_fun( /*Thread *t*/void )
+{
+    while( true )
+   {
+     extern int rs485tastovanje( int );
+     int ret;
+      if( (ret = rs485tastovanje( tast )) == 1 ) { tast = 0; }
+    }   
+//   kos = t;
+//  printf("___istastovanje %d  tast = %d   thr=%d \n\r", brb, (int)tast, t);
+//  fflush(stdout);
+}
+
+
 char * extract_string( char delimiter, char *ulazni_str, int n_str )
 {
     int br_str=0;
@@ -122,3 +193,14 @@
     return NULL;
 }
 
+
+void printT(char *s, char *tel, int duzina){
+    int i=0;
+    printf("%s duzina = %d: ",s,duzina);
+    while(i<duzina){   
+        printf("%02X ", tel[i]);
+        i++;
+    }
+    printf("\n\r");
+    fflush(stdout);
+}
--- a/PGSdisplay.h	Mon Feb 24 17:14:44 2020 +0000
+++ b/PGSdisplay.h	Thu Jun 18 15:23:05 2020 +0000
@@ -5,6 +5,7 @@
 void init_disp( void);
 void putOnDisp( char *s, char boja);
 void putOnDispNo(int broj, char boja);
+int dispGetResponce( void );
 char * extract_string( char delimiter, char *ulazni_str, int n_str );
 
 
--- a/main.cpp	Mon Feb 24 17:14:44 2020 +0000
+++ b/main.cpp	Thu Jun 18 15:23:05 2020 +0000
@@ -48,6 +48,7 @@
     SocketAddress *sa;
     char *tx_msg;
     void (*fun_rec)(char*);
+    int response;
 };
 
 char crm_req[]= {'{','1','|','1','}'}; //"{1|1}";
@@ -83,10 +84,12 @@
 
 int main(void)
 {
-
+printf("\n\r----------------Pocetak------------ \n\r"); fflush(stdout);
 
     init_disp( );
-
+    thread_sleep_for(2000);
+   
+   putOnDisp("elcom", 3);
 
     if( (err = eth.set_network(IP_ADDR,NET_MASK,GATW_ADDR))!= NSAPI_ERROR_OK )  {
         printf(" greska setovanja mreze %d \n\r", err);
@@ -107,8 +110,8 @@
 
     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 };
+    struct s_rm s_crm = { &eth, &sa, crm_req, crm_fun, 0 };
+    struct s_rm s_srm = { &eth, &sa, srm_req, srm_fun, 0 };
 
 
     putOnDisp("flash", 2);
@@ -123,9 +126,10 @@
         thread_sleep_for(5000);
 
         Thread SRMThread;
+        s_srm.response = 0;
         SRMThread.start( callback( requestMessageThread, &s_srm ));
         SRMThread.join();
-        printf("main %d\n\r",i++);
+        printf("status response %d\n\r",s_srm.response);
     }
 //   printf("\n\rmain: Kraj, error=%d\n\r",err);    fflush(stdout);
 }
@@ -169,6 +173,8 @@
 
                     printf("requestMessage - prim tel %d: %s\n\r", err, rxbuf) ;
                     s->fun_rec( rxbuf );
+                    s->response = dispGetResponce(  );
+
                 }
             }
         }