p1

Revision:
7:be56cf51685d
Parent:
6:19e7658575fe
--- a/PGSdisplay.cpp	Mon Feb 24 17:14:44 2020 +0000
+++ b/PGSdisplay.cpp	Thu Jun 18 15:23:39 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);
+}