a.binder 5 年之前
父節點
當前提交
9727d5cae3

+ 2 - 1
SE/stuff/P5_Automation_can-dev-res/_CAN/_CAN_func.h

@@ -81,7 +81,8 @@ void CAN_READ(
                                                                        CAN_MSG8_BIT_7_A, //Broadcast_state_TO_REFRESH, //int  Broadcast_state,
                                                                        0 , //int I2C_port,
                                                                        0 ,//int I2C_driver
-                                                                       IS_Local_FALSE 
+                                                                       IS_Local_FALSE ,
+                                                                       time, 0
                                                                        );
                                 } else if(CAN_MSG8_BIT_8_A == TASK_TYPE_T_request_set_new_Exp_state) { // if(CAN_MSG8_BIT_8_A == TASK_TYPE_T_Slave_Ports_broadcast____)
                                    /*CAN_MSG8_A_Slave_Ports_Protocol_CAN_request_set_new_Exp_state_T

+ 38 - 0
SE/stuff/P5_Automation_can-dev-res/_DISPLAY_func.h

@@ -458,6 +458,44 @@ void DISPLAY__print_menu(DISPLAY_T* DISPLAY_A ,
    #if defined(HAS_TFT_ILI9163C) 
 
 
+DISPLAY_MENU_ITEM_INDEX_T DISPLAY_MENU_ITEM_A__INDEX_NEXT(  //context shift, //slowly decrement when empty drop -looking next
+        DISPLAY_PHYSICAL_CHAR_T &DISPLAY_PHYSICAL_CHAR_A, 
+        ARDUINO_ARRAY_INDEX_T ARDUINO_ARRAY_INDEX_A, //index portu do powiazan pwm
+        DISPLAY_MENU_ITEM_INDEX_T DISPLAY_MENU_ITEM_INDEX_A, //ktore menu
+        DISPLAY_MENU_ITEM_INDEX_T PROCESS_INDEX_COUNTER_A //current i z petli dodawania
+    ) {
+        
+        //DISPLAY_MENU_ITEM_INDEX_T DISPLAY_MENU_ITEM_INDEX_CONTEXT_COUNTER_A ; //przy dodawaniu latwiej isc w gore 
+        //find next
+        
+        
+        
+         
+                           if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[PROCESS_INDEX_COUNTER_A].ARDUINO_ARRAY_INDEX_A ==  ARDUINO_ARRAY_INDEX_A ) {                  
+                                //current i
+                                return PROCESS_INDEX_COUNTER_A ;
+                                
+                           } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[PROCESS_INDEX_COUNTER_A+1].ARDUINO_ARRAY_INDEX_A ==  ARDUINO_ARRAY_INDEX_A ) {
+                               //next i same
+                                Serial.print(" [DSPL][DROPPED] ");
+                                return PROCESS_INDEX_COUNTER_A+1 ;
+                                
+                           } else if(DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[DISPLAY_MENU_ITEM_INDEX_A].DISPLAY_MENU_ITEM_A[PROCESS_INDEX_COUNTER_A-1].ARDUINO_ARRAY_INDEX_A ==  ARDUINO_ARRAY_INDEX_A ) {
+                                     //next i same
+                                     Serial.print(" [DSPL][INSERTED] ");
+                                      return PROCESS_INDEX_COUNTER_A-1 ;
+                           } else if(PROCESS_INDEX_COUNTER_A < ARDUINO_ARRAY_INDEX_LIMIT_DISPLAY_MENU_ITEM_A) {
+                            
+                                return PROCESS_INDEX_COUNTER_A;
+                           
+                           }
+       
+    
+    }
+
+
+
+
 void DISPLAY_MENU_SELECTOR(DISPLAY_T* DISPLAY_A ,
         DISPLAY_T_ARDUINO_ATTR_ARRAY_T &DISPLAY_T_ARDUINO_ATTR_ARRAY_A , 
         DISPLAY_PHYSICAL_CHAR_T &DISPLAY_PHYSICAL_CHAR_A, 

+ 20 - 13
SE/stuff/P5_Automation_can-dev-res/_DISPLAY_struct.h

@@ -8,15 +8,20 @@ static String DISPLAY_array16_FILL_A = "                        ";
 
 typedef ARDUINO_SIZE_T DISPLAY_string_len_T ;
 
- typedef int DISPLAY_PHYSICAL_X_PX_T ;
- typedef int DISPLAY_PHYSICAL_Y_PX_T ;
+ typedef int DISPLAY_PHYSICAL_X_PX_T ; //fixyczna rozczielczosc
+ typedef int DISPLAY_PHYSICAL_Y_PX_T ;//fixyczna rozczielczosc
 
+typedef int DISPLAY_CURSOR_T ; //dotyczy kursora
 
- typedef int DISPLAY_PHYSICAL_X_CHARS_T ;
- typedef int DISPLAY_PHYSICAL_Y_CHARS_T ;
 
- typedef int DISPLAY_CURSOR_X_CHARS_T ;
- typedef int DISPLAY_CURSOR_Y_CHARS_T ;
+typedef DISPLAY_CURSOR_T DISPLAY_CURSOR_SHIFT_Y_T; //dotyczy kursora - jak jest za duzo rekordow, to przegladamy zgodnie z tym indeksem
+
+
+ typedef DISPLAY_CURSOR_T DISPLAY_PHYSICAL_X_CHARS_T ; //fixyczna rozczielczosc w znakach w domyslnej czcionce
+ typedef DISPLAY_CURSOR_T DISPLAY_PHYSICAL_Y_CHARS_T ;//fixyczna rozczielczosc w znakach w domyslnej czcionce
+
+ typedef DISPLAY_CURSOR_T DISPLAY_CURSOR_X_CHARS_T ; //aktualna pozycja kursora X w domyslnej czcionce
+ typedef DISPLAY_CURSOR_T DISPLAY_CURSOR_Y_CHARS_T ; //aktualna pozycja kursora Y w domyslnej czcionce
  
  
   typedef int DISPLAY_textsize_T ;
@@ -63,8 +68,9 @@ typedef byte DISPLAY_TARGET_T ; //TODO BIN
 typedef struct DISPLAY_S DISPLAY_T ;
 
 typedef byte DISPLAY_MENU_ITEM_FLAG_T ;
-const DISPLAY_MENU_ITEM_FLAG_T DISPLAY_MENU_ITEM_FLAG_EMPTY = B00000000;
-const DISPLAY_MENU_ITEM_FLAG_T DISPLAY_MENU_ITEM_FLAG_INITIALIZED  = B10100101;
+const DISPLAY_MENU_ITEM_FLAG_T DISPLAY_MENU_ITEM_FLAG_EMPTY        = B00000000;
+const DISPLAY_MENU_ITEM_FLAG_T DISPLAY_MENU_ITEM_FLAG_DELETED      = B00000010;
+const DISPLAY_MENU_ITEM_FLAG_T DISPLAY_MENU_ITEM_FLAG_INITIALIZED  = B10000001;
 
 
 
@@ -112,7 +118,7 @@ typedef byte DISPLAY_MENU_ITEM_Exp_state_level_T ;
 
 
 struct DISPLAY_MENU_ITEM_S { //elementy menu
-     DISPLAY_MENU_ITEM_FLAG_T DISPLAY_MENU_ITEM_FLAG_A = DISPLAY_MENU_ITEM_FLAG_EMPTY ;
+     DISPLAY_MENU_ITEM_FLAG_T DISPLAY_MENU_ITEM_FLAG_A = DISPLAY_MENU_ITEM_FLAG_EMPTY ; //czy nie jest do usuniecia itp ...
      DISPLAY_CURSOR_X_CHARS_T DISPLAY_CURSOR_X_CHARS_A; //gdzie sie wyswietla
      DISPLAY_CURSOR_Y_CHARS_T DISPLAY_CURSOR_Y_CHARS_A ;//gdzie sie wyswietla
      DISPLAY_string_T DISPLAY_string_A;
@@ -135,10 +141,10 @@ typedef struct DISPLAY_MENU_ITEM_S DISPLAY_MENU_ITEM_T ;
 
 //ARDUINO_ARRAY_INDEX_LIMIT_DISPLAY_MENU
   struct DISPLAY_MENU_S {
-           DISPLAY_CURSOR_X_CHARS_T DISPLAY_MENU_SIZE_X_CHARS_MIN_A; //SIZE
-           DISPLAY_CURSOR_Y_CHARS_T DISPLAY_MENU_SIZE_Y_CHARS_MIN_A; //SIZE
-           DISPLAY_CURSOR_X_CHARS_T DISPLAY_MENU_SIZE_X_CHARS_MAX_A; //SIZE
-           DISPLAY_CURSOR_Y_CHARS_T DISPLAY_MENU_SIZE_Y_CHARS_MAX_A; //SIZE
+           DISPLAY_CURSOR_X_CHARS_T DISPLAY_MENU_SIZE_X_CHARS_MIN_A; //SIZE LEFT UPPER CORNER X
+           DISPLAY_CURSOR_Y_CHARS_T DISPLAY_MENU_SIZE_Y_CHARS_MIN_A; //SIZE LEFT UPPER CORNER Y
+           DISPLAY_CURSOR_X_CHARS_T DISPLAY_MENU_SIZE_X_CHARS_MAX_A; //SIZE RIGHT LOWER CORNER X
+           DISPLAY_CURSOR_Y_CHARS_T DISPLAY_MENU_SIZE_Y_CHARS_MAX_A; //SIZE RIGHT LOWER CORNER Y
            DISPLAY_COLOR_T DISPLAY_COLOR_A = BLACK ;
            time_seq_id_T time_seq_id_A ;  //to controll latency
            time_min_run_T time_min_run_A ;  //to controll latency
@@ -151,6 +157,7 @@ typedef struct DISPLAY_MENU_ITEM_S DISPLAY_MENU_ITEM_T ;
            DISPLAY_MENU_ITEM_T DISPLAY_MENU_ITEM_A[ARDUINO_ARRAY_INDEX_LIMIT_DISPLAY_MENU_ITEM_A] ; //elementy menu
            ARDUINO_ARRAY_INDEX_CURRENT_T ARDUINO_ARRAY_INDEX_CURRENT_A ; //ktory jest aktywny element
            DISPLAY_MENU_SELECTOR_STATUS_T DISPLAY_MENU_SELECTOR_STATUS_A ; //opcja kontekstu selektora
+           DISPLAY_CURSOR_SHIFT_Y_T DISPLAY_CURSOR_SHIFT_Y_A  = 0; //
   }
 ;
  

+ 1 - 0
SE/stuff/P5_Automation_can-dev-res/_Port_Broadcast_state_struct.h

@@ -6,6 +6,7 @@ const Broadcast_state_T  Broadcast_state_TO_REFRESH = 1; //0x01 ;
 
 const Broadcast_state_T  Broadcast_state_FRESH = 30 ;// 0x30 ;
 
+const Broadcast_state_T  Broadcast_state_LOW = 5 ;// 0x30 ;
 
 const Broadcast_state_T  Broadcast_state_FULL_FRESH = 150; //0xFF ;
 

+ 16 - 2
SE/stuff/P5_Automation_can-dev-res/_Slave_Ports_Status_QUEUE_add_func.h

@@ -1,10 +1,15 @@
 
+
+//TODO HOW TO USE
+//time_seq_id   - to detect event of duplicated or flood kind of sth... to eventually not add next 
+//time_min_run  - to protect - that no more of this kind of task should be before time_min_run 
+
 ARDUINO_FUNCT_INIT_RESULT_T _Slave_Ports_queue__add( 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,
     TASK_TYPE_T TASK_TYPE_A,
     TASK_PORT_ASSOC_T TASK_PORT_ASSOC_A, //
-    long time_seq_id, 
-    long time_min_run , //, 
+    time_seq_id_T time_seq_id, 
+    time_min_run_T time_min_run , //, 
     ARDUINO_ARRAY_INDEX_T DISPLAY_ARDUINO_ARRAY_INDEX_A //optionally
     //int _Slave_Ports_queue_peek , int _Slave_Ports_queue_push , int _Slave_Ports_queue_peek_new
     ) {
@@ -52,6 +57,15 @@ ARDUINO_FUNCT_INIT_RESULT_T _Slave_Ports_queue__add( Slave_Ports_Status_QUEUE_T*
         Serial.println(""); ARDUINO_ATTR_ARRAY_S__display(Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A);
        #endif
        
+       
+       //DETECT_LATENCY
+       //time_seq_id   - to detect event of duplicated or flood kind of sth... to eventually not add next 
+       //time_min_run  - to protect - that no more of this kind of task should be before time_min_run 
+            //test if previous time_min_run of same task type isnt > time_seq_id
+       
+       
+       
+       
        ARDUINO_ARRAY_INDEX_NEXT_T Slave_Ports_Status_QUEUE_T_INDEX_NEXT_A = ARDUINO_ARRAY_INDEX_NEXT_LOCK(Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A);
       // ARDUINO_ARRAY_ATTR_QUEUE_T Slave_Ports_ATTR_QUEUE_A = ARDUINO_ARRAY_ATTR_QUEUE(Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A);
       

+ 8 - 0
SE/stuff/P5_Automation_can-dev-res/_Slave_Ports_Status_QUEUE_func.h

@@ -355,6 +355,14 @@ void _Slave_Ports_queue__list( Slave_Ports_Status_QUEUE_T* Slave_Ports_Status_QU
                                                 Adafruit_PWMServoDriver_A
                                         ) ;  
                                          Slave_Ports_Status_QUEUE_A[ARDUINO_ARRAY_INDEX_POP_LOCK_A]={} ;   //todo storage
+                                         
+                        
+                     } else if(Slave_Ports_Status_QUEUE_A[ARDUINO_ARRAY_INDEX_POP_LOCK_A].TASK_TYPE_A == TASK_TYPE_T_Broadcast_state_LOW______ ) {      
+                        #if defined(DEBUG_QUEUE)
+                            Serial.print(" [Q]BCAST>LOW ");
+                        #endif
+                        TASK_TYPE_T_Broadcast_state_LOW(Slave_Ports_Status_A, Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A);
+                                  
                      } else {
                         
                              Serial.print("$177 Error unsupported type TASK_TYPE_A[");     Serial.print( Slave_Ports_Status_QUEUE_A[ARDUINO_ARRAY_INDEX_POP_LOCK_A].TASK_TYPE_A);

+ 41 - 26
SE/stuff/P5_Automation_can-dev-res/_Slave_Ports_Status_func.h

@@ -16,7 +16,9 @@
                 int I2C_port,
                 //int I2C_driver
                 I2C_driver_T I2C_driver, 
-                IS_Local_T IS_Local_A
+                IS_Local_T IS_Local_A,
+                time_seq_id_T time_seq_id, 
+                time_min_run_T time_min_run 
                 )
 {
 
@@ -62,6 +64,8 @@
             found = false ; 
             int found_id ; 
             for(i = ARDUINO_ARRAY_INDEX_FIRST; i<= Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_NEXT_A  ; i++ ) {
+                    //when add context  - we should TTL_broadcast ourselves
+                   
                 if((Slave_Ports_Status_A[i].Port_ID == Port_ID) and (Slave_Ports_Status_A[i]._Slave_ID == _Slave_ID ))  {
                     found = true ;
                         Serial.print("+D");Serial.print(i);
@@ -89,7 +93,12 @@
                             ARDUINO_ATTR_ARRAY_S__commit_added_element(
                                           Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A , 
                                           i);//Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_NEXT_A
-                   
+                  
+                  
+                   _Slave_Ports_queue__add(  Slave_Ports_Status_QUEUE_A, Slave_Ports_Status_QUEUE_T_ARDUINO_ATTR_ARRAY_A ,
+                     TASK_TYPE_T_Broadcast_state_LOW______  ,TASK_PORT_ASSOC_EMPTY ,time_seq_id, time_seq_id + 50000  , ARDUINO_ARRAY_INDEX_NOT_SET ) ;
+                     
+                     
                } else {
                     //duplicated
                     //update
@@ -131,26 +140,30 @@
    
                 String title = "Ports of 0x" ; title.concat(String(Active_ControllerID_HEX , HEX));                 title.concat(" ");
                      
-                  
-                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[1].DISPLAY_CURSOR_X_CHARS_A =  0 ;
-                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[1].DISPLAY_CURSOR_Y_CHARS_A = 0 ;
-                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[1].DISPLAY_string_A = title ;// "Ports"; //DISPLAY_string_A ;
-                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[1].DISPLAY_COLOR_A =  0x0004 ;
-                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[1].DISPLAY_MENU_ITEM_FLAG_A = DISPLAY_MENU_ITEM_FLAG_INITIALIZED  ;
-                             
-
                    
+
+        int i_pos = 1;    
         int i;
-        
-          DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].ARDUINO_ARRAY_INDEX_CURRENT_A = 1 ;
-          DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_SIZE_X_CHARS_MIN_A = 0 ;
-          DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_SIZE_Y_CHARS_MIN_A = 0 ;
-          DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_SIZE_X_CHARS_MAX_A = 0  ;
-          DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_SIZE_Y_CHARS_MAX_A = 8 ;// DISPLAY_PHYSICAL_CHAR_A.DISPLAY_PHYSICAL_Y_CHARS_A  ;
-            
+                      
+                       DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].ARDUINO_ARRAY_INDEX_CURRENT_A = 1 ;
+                       DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_SIZE_X_CHARS_MIN_A = 0 ;
+                       DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_SIZE_Y_CHARS_MIN_A = 0 ;
+                       DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_SIZE_X_CHARS_MAX_A = 0  ;
+                       DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_SIZE_Y_CHARS_MAX_A = 8 ;// DISPLAY_PHYSICAL_CHAR_A.DISPLAY_PHYSICAL_Y_CHARS_A  ;
+                     
+                    
+                    
+                     
+                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i_pos].DISPLAY_CURSOR_X_CHARS_A =  0 ;
+                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i_pos].DISPLAY_CURSOR_Y_CHARS_A = 0 ;
+                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i_pos].DISPLAY_string_A = title ;// "Ports"; //DISPLAY_string_A ;
+                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i_pos].DISPLAY_COLOR_A =  0x0004 ;
+                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i_pos].DISPLAY_MENU_ITEM_FLAG_A = DISPLAY_MENU_ITEM_FLAG_INITIALIZED  ;
+                           
+       
        
         
-        for(i=ARDUINO_ARRAY_INDEX_FIRST ; i<=5 ; i++) {//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++) {//i <= Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A.ARDUINO_ARRAY_INDEX_CURRENT_A
            DISPLAY_array16_T  DISPLAY_array16_AA="" ;
            DISPLAY_array16_T  DISPLAY_array16_AB="" ;
         
@@ -159,7 +172,7 @@
             
              if(Slave_Ports_Status_A[i].Port_ID > 0 ) {
             
-                   
+                   i_pos ++ ;
                    
                       String message = "";
                        String message2 ;
@@ -227,14 +240,16 @@
                  
                         
              // String message = "P ";  message.concat(Slave_Ports_Status_A[i].Port_ID)  ;  message.concat(" ");
+                
+                if(i_pos < ARDUINO_ARRAY_INDEX_LIMIT_DISPLAY_MENU_ITEM_A) { 
              
-                DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i+1].DISPLAY_CURSOR_X_CHARS_A =  0 ;
-                DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i+1].DISPLAY_CURSOR_Y_CHARS_A = i ;
-                DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i+1].DISPLAY_string_A = message2 ;
-                DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i+1].DISPLAY_COLOR_A = BLACK  ;
-                DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i+1].DISPLAY_MENU_ITEM_FLAG_A = DISPLAY_MENU_ITEM_FLAG_INITIALIZED  ;
-                DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i+1].ARDUINO_ARRAY_INDEX_A = i  ;
-             
+                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i_pos].DISPLAY_CURSOR_X_CHARS_A =  0 ;
+                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i_pos].DISPLAY_CURSOR_Y_CHARS_A = i ;
+                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i_pos].DISPLAY_string_A = message2 ;
+                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i_pos].DISPLAY_COLOR_A = BLACK  ;
+                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i_pos].DISPLAY_MENU_ITEM_FLAG_A = DISPLAY_MENU_ITEM_FLAG_INITIALIZED  ;
+                     DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i_pos].ARDUINO_ARRAY_INDEX_A = i  ;
+                }
              
                 //DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i+1].DISPLAY_CURSOR_X_CHARS_A =  0 ;
                 //DISPLAY_PHYSICAL_CHAR_A.DISPLAY_MENU_A[1].DISPLAY_MENU_ITEM_A[i+1].DISPLAY_CURSOR_Y_CHARS_A = i ;

+ 21 - 0
SE/stuff/P5_Automation_can-dev-res/_Slave_Ports_broadcast_func.h

@@ -1,3 +1,24 @@
+void TASK_TYPE_T_Broadcast_state_LOW(Slave_Ports_Status_T* Slave_Ports_Status_A, 
+        Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_T &Slave_Ports_Status_T_ARDUINO_ATTR_ARRAY_A
+        ) {
+           int i;
+                     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) {
+                                      if(Slave_Ports_Status_A[i].IS_gone_A == IS_gone_TRUE) {
+                                       } else {
+                                            if(Slave_Ports_Status_A[i].Broadcast_state > Broadcast_state_LOW ) {
+                                                        Slave_Ports_Status_A[i].Broadcast_state = Broadcast_state_LOW ;
+                                                        Serial.print(" #11[BCAST][SET][LOW][");Serial.print(i);Serial.print("] "); 
+                                            }
+                                                        
+                                           
+                                        }
+                              }
+                              
+                       }
+           
+        }
+
 
 
  void _Slave_Ports_broadcast_POP(

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

@@ -14,6 +14,7 @@ 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_Broadcast_state_LOW______ = 0x11 ;
 
 //const TASK_TYPE_T TASK_TYPE_T_Debug_Queue_Functions____ = 0x09 ;
 

+ 8 - 4
SE/stuff/P5_Automation_can-dev-res/___CONFIG/0x11/config_Slave_Ports_LOCAL_0x11_init.h

@@ -6,7 +6,8 @@ ARDUINO_FUNCT_INIT_RESULT_T _Slave_Ports_LOCAL_init(
                  Slave_Ports_Status_T_ARDUINO_ARRAY_INDEX_T_TO_DELETE_T*      Slave_Ports_Status_T_ARDUINO_ARRAY_INDEX_T_TO_DELETE_A,
                  Slave_Ports_Status_T_ARDUINO_ARRAY_ASSOC_TABLE_S_Port_ID_T*  Slave_Ports_Status_T_ARDUINO_ARRAY_ASSOC_TABLE_S_Port_ID_A,
                 
-                DISPLAY_T*  DISPLAY_A ,  DISPLAY_T_ARDUINO_ATTR_ARRAY_T &DISPLAY_T_ARDUINO_ATTR_ARRAY_A
+                DISPLAY_T*  DISPLAY_A ,  DISPLAY_T_ARDUINO_ATTR_ARRAY_T &DISPLAY_T_ARDUINO_ATTR_ARRAY_A,
+                time_seq_id_T time_seq_id,  time_min_run_T time_min_run 
                 //,*DISPLAY_PHYSICAL_CHAR_A //DISPLAY_PHYSICAL_CHAR_T 
                 ) {
 
@@ -33,7 +34,8 @@ ARDUINO_FUNCT_INIT_RESULT_T _Slave_Ports_LOCAL_init(
                                 Broadcast_state_TO_REFRESH, //int  Broadcast_state,
                                 I2C_port_DEFAULT, //int I2C_port,
                                 I2C_driver_Adafruit_PWMServoDriver ,//int I2C_driver
-                                IS_Local_TRUE 
+                                IS_Local_TRUE, 
+                                time_seq_id, time_min_run 
                                 );
                                 
                                 
@@ -53,7 +55,8 @@ ARDUINO_FUNCT_INIT_RESULT_T _Slave_Ports_LOCAL_init(
                                 Broadcast_state_FULL_FRESH, //Broadcast_state_TO_REFRESH, //int  Broadcast_state,
                                 I2C_port_DEFAULT, //int I2C_port,
                                 I2C_driver_Adafruit_PWMServoDriver ,//int I2C_driver
-                                IS_Local_TRUE 
+                                IS_Local_TRUE ,
+                                time_seq_id, time_min_run
                                 );
                                 
                  Slave_Ports_Status_add_port(
@@ -72,7 +75,8 @@ ARDUINO_FUNCT_INIT_RESULT_T _Slave_Ports_LOCAL_init(
                                 Broadcast_state_TO_REFRESH, //int  Broadcast_state,
                                 I2C_port_DEFAULT, //int I2C_port,
                                 I2C_driver_Adafruit_PWMServoDriver ,//int I2C_driver
-                                IS_Local_TRUE 
+                                IS_Local_TRUE ,
+                                time_seq_id, time_min_run
                                 );
                                 
                                 

+ 2 - 1
SE/stuff/P5_Automation_can-dev-res/___loop/__main_loop_top.h

@@ -33,7 +33,8 @@ if(ARDUINO_LOOP_LATENCY_COUNTER__MAIN(ARDUINO_LOOP_LATENCY__MAIN_A) <= ARDUINO_L
                                               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,
-                                             DISPLAY_A , DISPLAY_T_ARDUINO_ATTR_ARRAY_A
+                                             DISPLAY_A , DISPLAY_T_ARDUINO_ATTR_ARRAY_A ,
+                                             time, 0
                                              //, DISPLAY_PHYSICAL_CHAR_A
                                         );