IO spi

Revision:
6:12b2660d7dff
Parent:
4:fce988d27938
Child:
8:5a96bfb6b6f9
diff -r 6972df0a916d -r 12b2660d7dff main.cpp
--- a/main.cpp	Thu Sep 10 22:22:54 2020 +0200
+++ b/main.cpp	Sun Jan 17 20:03:16 2021 +0100
@@ -5,61 +5,182 @@
 
 #include "mbed.h"
 #include "platform/mbed_thread.h"
+#include <vector>
 
-#include "IOspiLed.h"
-#include "IOgpiospi.h"
-#include "IOprotokol.h"
+#include "Pinovi.h"
+// #include "IOspiLed.h"
+#include "ledControl.h"
+
+
+// #include "IOgpiospi.h"
+// #include "IOspitelegram.h"
+#include "IOspiprotokol.h"
+
+#include "ZeroCrossing.h"
+#include "IOzcControl.h"
+
+
+extern vector< S_logTelegram> s_log;
 
 // Blinking rate in milliseconds
 #define BLINKING_RATE_MS                                                    200
 
+DigitalOut ioTest(IO_TEST,0);
 
+DigitalOut testPin(PTE24, 0 );
+
+
+char verzija = 5;
 
 
 DigitalIn b2(SW2);
 
+DigitalOut ledB(LED3,1);
 
 
 
 
-void consolafun( void );
-Thread th_consola;
+class C_data c_data;
+
+
+C_ledControl c_ledControl(&c_data);//( &c_ledLight);
+
+C_spiProtokol c_spiProtokol( &c_data, &c_ledControl );
+
+C_zeroCrossing c_zeroCrossing( &c_data);
+C_zeroCrossing& rc_zc = c_zeroCrossing;
+
+C_zcControl c_zcControl( &c_zeroCrossing, &c_spiProtokol);
+
+//DigitalOut pola( PTB20, 0);  //  test zero crossing ivica
+
+
+Ticker test_RasaLed;
+DigitalOut RasaLed(PTE0,1);
+
+long t; int tz;
+int v1, v2, v3, v4,v5,v6,f=0;
+int time_delay = 0, time_flag=0;
 
 int main()
 {
+
     // Initialise the digital pin LED1 as an output
+
 printf("\n\n\r ____________ POCETAK IOboard_______________\n\r");
 
-    inic_IOspiLed( );
-   // inicIOboard_spi( );
-    inicIO_gpiospi( );
-    inicIO_protokol( );
+s_log.resize(1000);
+s_log.clear();
+
+printf( " capacity %d max_size %d size %d\n\r", s_log.capacity(), s_log.max_size(), s_log.size());
+test_RasaLed.attach_us([=]{ RasaLed = !RasaLed;}, 500000   );
+
+/* postavljanje funkcija za komande i indikaciju sinhrono sa zero crossing-om */
+
+        
+        c_zeroCrossing.set_ontimeONfun( []()
+            {
+   //             testPin =! testPin;
+              rc_zc.set_portOut(  c_data.get_command() );//   
+              if( c_data.get_newcommand_flag() == true) {  time_delay = 1; t = (long)Kernel::get_ms_count(); }// vreme = time_delay * 20ms
+              else if(time_delay) { time_delay--;   if( time_delay == 0 ) time_flag = 1; }
+              else { c_data.set_messagge(); c_data.set_realIndication();}
+             } 
+        );
+        c_zeroCrossing.set_ontimeOFFfun(  [](){ } );
+        c_zeroCrossing.set_postponeONfun(  []()    // minimum mreze - rad sa indikacijama ispravnosti sijalica
+            { 
+                if(time_delay == 0 && (c_data.check_newcommand_flag()== false) )
+                {
+                    char p1 = rc_zc.get_portInMin();   // dva ocitavanja porta
+                    wait_us(10);
+                    char p2 = rc_zc.get_portInMin();
+                    p1 &= p2;
+                    c_data.set_pMin( p1 );  
+                    c_data.set_indication();
+                    c_data.set_corectness();
+                    c_data.set_realIndication();
 
-    DigitalOut ledB(LED3,1);
+                    // ledB =!ledB; 
+                    // static int i=0;
+                    // if(i++ > 100) { i = 0; f = 1; 
+                    //     v1 = c_data.pMin;
+                    //     v2 = c_data.get_command(); 
+                    //     v3 = c_data.get_indication();
+                    //     }
+                }
+                else c_data.clear_pMin();
+            } 
+        );
+        c_zeroCrossing.set_postponeOFFfun( []() // maximum mreze - rad sa neispravnim naponom - misem
+            { 
+                    static int i=0, j=0;
+                if(time_delay == 0 && (c_data.check_newcommand_flag()== false))
+                {    
+                    ledB =!ledB; 
+                    char p1 = rc_zc.get_portInMax(); // dva ocitavanja porta
+                    wait_us(10);
+                    char p2 = rc_zc.get_portInMax();
+                    p1 |= p2;
+                    v1 = c_data.set_pMax( v4 = p1 );      
+                   c_data.set_faultVoltage();
+                        v2 = c_data.get_command();
+                        v3 = c_data.get_faultVoltage();
+                    
+                    if(time_flag)
+                     {
+testPin =! testPin;  
+                         f = 1; time_flag--;
+                        v1 = c_data.pMax;  
+                         v6 = (long)Kernel::get_ms_count()-t;     
+                     }
+                }
+                else c_data.clear_pMax();
+                
+            } );
+
 
 int b = b2;
  
-   th_consola.start( consolafun);
+    /* konzolu napraciti kao klasu koja nasledjuje C_thread klasu */
+    extern void consolafun( void );
+    Thread th_consola;
+    th_consola.start( consolafun);
+
+    /* cekanje da se procita prva ispravna adresa  sa dip switch-a  */
+    do       { ThisThread::sleep_for(10ms);;c_spiProtokol.inic_address( ); }
+    while   ( c_data.get_address() == 0 );
+                    printf(" adresa je = %d\n\r", c_data.get_address());
+
+    //   postavljanje sopstvene adrese i prikaz na ledovima
+    c_spiProtokol.set_myAddress(c_data.get_address());
+    c_ledControl.set_colorTemplate_Green(); 
+    c_ledControl.set_ledView(adresa);
+
 
     while (true) 
     {
 
-    {
-
-        spiLed_mainfun();
+/*        if(f==1)
+        {
+            f=0;
+            printf( "det =    %x    %x   %x        %x    %d  vreme =  %d   %d\n\r", v1, v2, v3, v4, v5, v6, t);
+        }
+  */   
 
         if( b!= b2)
         {
             b = b2;
-        if( b ) { /*ledB = 1;*/}
-        else    { /*ledB = 0;*/ static char c = 0; /*writeIOspiData( 0xa0, c++ );*/  
-                   // transIOspiData( 1, 0xa, c++ );  
-                   }
+        if( b ) { ledB = 1;}
+        else    { ledB = 0; //printf( " bitCount = %d, byteCount = %d\n\r", c_spiProtokol.get_bitCount(), c_spiProtokol.get_byteCount());  
+                
+                printf( " zerocrossing timer on = %d   off = %d \n\r", c_zeroCrossing.get_zcTimeON(), c_zeroCrossing.get_zcTimeOFF());
+               // printf(" port in %x\n\r", rc_zc.s_portinMin.get_port() );
+                printf(" adresa je = %d\n\r", c_data.get_address());
+                }
         }
-        ThisThread::yield();
-   
-    }
-
+    
+        c_spiProtokol.spi_monitor();
 
 
         thread_sleep_for(BLINKING_RATE_MS);
@@ -68,12 +189,11 @@
 
 
 
-
 void consolafun( void )
 {
     while( true )
     {
-     
+        
      char uc = getchar( );
      switch( (unsigned char) uc )
      {
@@ -99,9 +219,25 @@
         }
             break;
             case 's': case 'S':
-               set_shiftspi_signal(  );
+       //        set_shiftspi_signal(  );
             break;
             
+            case 'c':
+                    s_log.clear();
+            //break;
+            case 'l':
+                    printf( " capacity %d max_size %d size %d\n\r", s_log.capacity(), s_log.max_size(), s_log.size());
+            break;
+            case 'p':
+            int i=1;
+            if(s_log.size())
+            {
+                for( auto it = s_log.end()-1; it != s_log.begin(); it--)
+                        printf( "%3d %s\n\r", i++, (*it).poruka);
+                        auto it = s_log.begin();
+                        printf( "%3d %s\n\r", i++, (*it).poruka );
+            }
+            break;
      }
      ThisThread::yield();   
       thread_sleep_for(100);