a.binder vor 5 Jahren
Ursprung
Commit
40ecb639db

+ 1 - 0
SE/stuff/P5_Automation_can-dev-res/P5_Automation_can-dev-res.ino

@@ -288,6 +288,7 @@
 #include "_Slave_Ports_ttl_decrement_func.h"
 #include "_Slave_Ports_broadcast_func.h"
 #include "_Slave_Ports_I2C_func.h"
+#include "_Slave_Ports_action_func.h"
 
 #include "_DISPLAY_queue_pop_func.h"
 #include "_Slave_Ports_Status_QUEUE_func.h"

+ 34 - 27
SE/stuff/P5_Automation_can-dev-res/_CAN/_CAN_func.h

@@ -57,33 +57,40 @@ void CAN_READ(
                                       Serial.print(" ");
                          }
                    
-                    if(CAN_MSG8_BIT_8_A == TASK_TYPE_T_Slave_Ports_broadcast____) {
-                        Serial.println("[CAN_MSG8_BIT_8_A]==[T_BCAST]->[ADD][PORTS]")   ;      
-                                Slave_Ports_Status_add_port(
-                                                               Slave_Ports_Status_A ,
-                                                               Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A,
-                                                                   Slave_Ports_Status_T_ARDUINO_ARRAY_INDEX_TABLE_A,
-                                                                   Slave_Ports_Status_T_ARDUINO_ARRAY_INDEX_T_TO_DELETE_A,
-                                                                   Slave_Ports_Status_T_ARDUINO_ARRAY_ASSOC_TABLE_S_Port_ID_A,
-                                                               CAN_MSG8_BIT_3_A,  // int  Port_ID,
-                                                               CANrxId ,  //int  _Slave_ID,
-                                                               CAN_MSG8_BIT_4_A , //int  PortTypes,
-                                                               0 ,  //int  Address,
-                                                               0 , //int  LocalPort,
-                                                               CAN_MSG8_BIT_5_A , //Exp_state_BLINK, //int  Exp_state,
-                                                               CAN_MSG8_BIT_6_A, //Exp_state_ttl_TO_REFRESH, //int  Exp_state_ttl,
-                                                               CAN_MSG8_BIT_7_A, //Broadcast_state_TO_REFRESH, //int  Broadcast_state,
-                                                               0 , //int I2C_port,
-                                                               0 ,//int I2C_driver
-                                                               IS_Local_FALSE 
-                                                               );
-                        } else {
-                        
-                            Serial.println("81[CAN][RECV][UNKNOWN][CAN_MSG8_BIT_8_A][")   ;
-                            Serial.print(CAN_MSG8_BIT_8_A, HEX) ;
-                            Serial.print("] ");   
-                        }
-                               
+                    
+                    if(CAN_MSG8_BIT_2_A == _CAN_REMOTE_ID ) {
+                    
+                            if(CAN_MSG8_BIT_8_A == TASK_TYPE_T_Slave_Ports_broadcast____) {
+                                Serial.println("[CAN_MSG8_BIT_8_A]==[T_BCAST]->[ADD][PORTS]")   ;      
+                                        Slave_Ports_Status_add_port(
+                                                                       Slave_Ports_Status_A ,
+                                                                       Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A,
+                                                                           Slave_Ports_Status_T_ARDUINO_ARRAY_INDEX_TABLE_A,
+                                                                           Slave_Ports_Status_T_ARDUINO_ARRAY_INDEX_T_TO_DELETE_A,
+                                                                           Slave_Ports_Status_T_ARDUINO_ARRAY_ASSOC_TABLE_S_Port_ID_A,
+                                                                       CAN_MSG8_BIT_3_A,  // int  Port_ID,
+                                                                       CANrxId ,  //int  _Slave_ID,
+                                                                       CAN_MSG8_BIT_4_A , //int  PortTypes,
+                                                                       0 ,  //int  Address,
+                                                                       0 , //int  LocalPort,
+                                                                       CAN_MSG8_BIT_5_A , //Exp_state_BLINK, //int  Exp_state,
+                                                                       CAN_MSG8_BIT_6_A, //Exp_state_ttl_TO_REFRESH, //int  Exp_state_ttl,
+                                                                       CAN_MSG8_BIT_7_A, //Broadcast_state_TO_REFRESH, //int  Broadcast_state,
+                                                                       0 , //int I2C_port,
+                                                                       0 ,//int I2C_driver
+                                                                       IS_Local_FALSE 
+                                                                       );
+                                } else { // if(CAN_MSG8_BIT_8_A == TASK_TYPE_T_Slave_Ports_broadcast____)
+                                
+                                    Serial.println("81[CAN][RECV][UNKNOWN][CAN_MSG8_BIT_8_A][")   ;
+                                    Serial.print(CAN_MSG8_BIT_8_A, HEX) ;
+                                    Serial.print("] ");   
+                                }
+                      } else { //if(CAN_MSG8_BIT_2_A == _CAN_REMOTE_ID ) {
+                                    Serial.println("81[CAN][RECV][ERROR][_CAN_REMOTE_ID<>CAN_MSG8_BIT_2_A][")   ;
+                                    Serial.print(CAN_MSG8_BIT_2_A, HEX) ; Serial.print("]["); Serial.print(_CAN_REMOTE_ID, HEX) ;
+                                    Serial.print("] ");
+                      }      
                 
               } else { //if(CANlen == CAN_MSG_DATA8_LEN) 
               

+ 1 - 1
SE/stuff/P5_Automation_can-dev-res/_Slave_Ports_Status_func.h

@@ -198,7 +198,7 @@
            DISPLAY_array16_T  DISPLAY_array16_AA="" ;
            DISPLAY_array16_T  DISPLAY_array16_AB="" ;
         
-            if(Slave_Ports_Status_A[i].Port_ID > 0) {
+            if(Slave_Ports_Status_A[i].Port_ID > 0 and not(Slave_Ports_Status_A[i].IS_gone_A == IS_gone_TRUE)) {
             
                     #if  defined(DEBUG)
                         if(DEBUG > 2) {

+ 4 - 0
SE/stuff/P5_Automation_can-dev-res/_Slave_Ports_Status_struct.h

@@ -9,6 +9,9 @@ typedef boolean IS_Local_T ;
 const IS_Local_T IS_Local_FALSE = false ;
 const IS_Local_T IS_Local_TRUE = true ;
 
+typedef boolean IS_gone_T ;
+const IS_gone_T IS_gone_TRUE = true ; 
+const IS_gone_T IS_gone_FALSE = false ; 
 
 #define I2C_port_DEFAULT 0x01
 
@@ -52,6 +55,7 @@ const IS_Local_T IS_Local_TRUE = true ;
   int I2C_port ; //0x01 - default port, 0x00 - not I2C connected
   I2C_driver_T I2C_driver; //0x00 - not driver, 0x01 Adafruit_PWMServoDriver.h
   IS_Local_T IS_Local_A; // Define if port is local or remote added
+  IS_gone_T IS_gone_A; // Define port is gone timoiuted
   
 } ;
 

+ 59 - 0
SE/stuff/P5_Automation_can-dev-res/_Slave_Ports_action_func.h

@@ -0,0 +1,59 @@
+
+
+
+void Slave_Ports_action_func(
+Slave_Ports_Status_QUEUE_T* Slave_Ports_Status_QUEUE_A, 
+     Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_T &Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A,
+    Slave_Ports_Status_T* Slave_Ports_Status_A ,
+    Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_T &Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A ,
+    TASK_TYPE_T TASK_TYPE_A,
+    //ARDUINO_ARRAY_ATTR_T Slave_Ports_Status_T_INDEX , //index of port we want to manipulate
+    TASK_PORT_ASSOC_T &TASK_PORT_ASSOC_A, //
+    long time_seq_id, 
+    long time_min_run , //, 
+    ARDUINO_ARRAY_INDEX_T DISPLAY_ARDUINO_ARRAY_INDEX_A , 
+    Exp_state_T Exp_state_A 
+    
+    )  {
+    int i;
+    
+    if(TASK_PORT_ASSOC_A.Slave_Ports_Status_T_INDEX > 0 ) {
+        if(Slave_Ports_Status_A[TASK_PORT_ASSOC_A.Slave_Ports_Status_T_INDEX].Port_ID > 0 ) {
+                Slave_Ports_Status_A[TASK_PORT_ASSOC_A.Slave_Ports_Status_T_INDEX].Exp_state = Exp_state_A ; 
+                Slave_Ports_Status_A[TASK_PORT_ASSOC_A.Slave_Ports_Status_T_INDEX].Exp_state_ttl = Exp_state_ttl_TO_REFRESH ;
+                _Slave_Ports_queue__add(  Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A ,
+                     TASK_TYPE_T_request_set_new_Exp_state  ,TASK_PORT_ASSOC_A ,time_seq_id, time_min_run  , ARDUINO_ARRAY_INDEX_NOT_SET ) ;    
+        }
+        
+    } else if((TASK_PORT_ASSOC_A.Port_ID > 0) and (TASK_PORT_ASSOC_A._Slave_ID >0)) {
+        for(i = ARDUINO_ARRAY_INDEX_FIRST ; i<= Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_CURRENT_A ; i++) {
+                if((Slave_Ports_Status_A[i].Port_ID == TASK_PORT_ASSOC_A.Port_ID) and (Slave_Ports_Status_A[i]._Slave_ID == TASK_PORT_ASSOC_A._Slave_ID)) {
+                      Slave_Ports_Status_A[i].Exp_state = Exp_state_A ; 
+                     Slave_Ports_Status_A[i].Exp_state_ttl = Exp_state_ttl_TO_REFRESH ;
+                     TASK_PORT_ASSOC_A.Slave_Ports_Status_T_INDEX = i ;
+                    _Slave_Ports_queue__add(  Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A ,
+                     TASK_TYPE_T_request_set_new_Exp_state  ,TASK_PORT_ASSOC_A ,time_seq_id, time_min_run  , ARDUINO_ARRAY_INDEX_NOT_SET ) ; 
+                }
+        }          
+    
+    } else {
+    
+      Serial.println("25[ACTION][ERR]");
+    }
+    
+    
+           
+   
+    }
+
+/*
+
+
+struct TASK_PORT_ASSOC_S {
+    Port_ID_T  Port_ID;
+} ; //To associate some port to TASK
+
+
+ ARDUINO_FUNCT_INIT_RESULT_Slave_Ports_queue__add = _Slave_Ports_queue__add(  Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A ,
+                     TASK_TYPE_T_Slave_Ports_set_I2C______  ,TASK_PORT_ASSOC_EMPTY ,time, time  , ARDUINO_ARRAY_INDEX_NOT_SET ) ;
+                     */

+ 13 - 5
SE/stuff/P5_Automation_can-dev-res/_Slave_Ports_broadcast_func.h

@@ -31,7 +31,7 @@
             Serial.print("#251 _Slave_Ports_broadcast_POP INDEX_CURRENT_A["); Serial.print(Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_CURRENT_A); Serial.println("] ");
         #endif 
           int i;
-          for(i=ARDUINO_ARRAY_INDEX_FIRST;i<= ARDUINO_ARRAY_INDEX_LIMIT_PORTS ;i++) { //Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_CURRENT_A
+          for(i=ARDUINO_ARRAY_INDEX_FIRST;i<= Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_CURRENT_A ;i++) { //Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_CURRENT_A // ARDUINO_ARRAY_INDEX_LIMIT_PORTS
             if(Slave_Ports_Status_A[i].IS_Local_A == IS_Local_TRUE) {  
             
             
@@ -323,12 +323,20 @@
                                  
                                 Serial.print("#238[BCAST]--"); 
                                 
-                                Slave_Ports_Status_A[i].Broadcast_state =  Slave_Ports_Status_A[i].Broadcast_state - 30 ;
+                                Slave_Ports_Status_A[i].Broadcast_state =  Slave_Ports_Status_A[i].Broadcast_state - (TASK_TYPE_T_Slave_Ports_broadcast____time_min_run_MIN_A_INCREMENT_A / 1000) ;
                         
                         }
-                        
-                               
-                } else {
+                } else if(Slave_Ports_Status_A[i].IS_Local_A == IS_Local_FALSE and Slave_Ports_Status_A[i]._Slave_ID > 0 and Slave_Ports_Status_A[i].Port_ID > 0 ) {
+                
+                    Serial.print("#331[BCAST][ELSE]"); Serial.print(i);  Serial.print("] IS_Local_A:");
+                    Serial.print(Slave_Ports_Status_A[i].IS_Local_A);
+                    Serial.print("] ");  Serial.print("[DELETE PORT?]");
+                    
+                    if(Slave_Ports_Status_A[i].Broadcast_state - ( TASK_TYPE_T_Slave_Ports_broadcast____time_min_run_MIN_A_INCREMENT_A / 1000 ) < 0 )
+                        Slave_Ports_Status_A[i].IS_gone_A = IS_gone_TRUE ;
+                    Slave_Ports_Status_A[i].Broadcast_state = Slave_Ports_Status_A[i].Broadcast_state - ( TASK_TYPE_T_Slave_Ports_broadcast____time_min_run_MIN_A_INCREMENT_A / 1000 ) ;
+                
+                } else { //if(Slave_Ports_Status_A[i].IS_Local_A == IS_Local_TRUE) {
                  #if defined(DEBUG) //|| defined(DEBUG_CAN) || defined(DEBUG_TASK_TYPE_T_Slave_Ports_broadcast____)
                 //if(DEBUG > 4) {
                     Serial.print("#147 BCAST NOT SENT  ind:"); Serial.print(i);  Serial.print("] IS_Local_A:");

+ 6 - 0
SE/stuff/P5_Automation_can-dev-res/_TASK_TYPES_struct.h

@@ -11,6 +11,10 @@ const TASK_TYPE_T TASK_TYPE_T_Slave_Ports_set_I2C______ = 0x05 ;
 const TASK_TYPE_T TASK_TYPE_T_DISPLAY_queue_pop________ = 0x06 ;
 const TASK_TYPE_T TASK_TYPE_T__EMPTY__JUST_PASSED_ARG__ = 0x07 ;
 const TASK_TYPE_T TASK_TYPE_T_Exp_state_BLINK_TOGGLE___ = 0x08 ;
+
+const TASK_TYPE_T TASK_TYPE_T_Exp_state_OFF____________ = 0x09 ;
+const TASK_TYPE_T TASK_TYPE_T_Exp_state_ON_____________ = 0x10 ;
+
 //const TASK_TYPE_T TASK_TYPE_T_Debug_Queue_Functions____ = 0x09 ;
 
 
@@ -18,6 +22,8 @@ const TASK_TYPE_T TASK_TYPE_T_Exp_state_BLINK_TOGGLE___ = 0x08 ;
 
 struct TASK_PORT_ASSOC_S {
     Port_ID_T  Port_ID;
+    int  _Slave_ID;
+    ARDUINO_ARRAY_ATTR_T Slave_Ports_Status_T_INDEX; //optional index
 } ; //To associate some port to TASK
 
 typedef struct TASK_PORT_ASSOC_S TASK_PORT_ASSOC_T ;