Просмотр исходного кода

feat: add rescan request

Signed-off-by: sakumisu <1203593632@qq.com>
sakumisu 1 месяц назад
Родитель
Сommit
12305d0dee
4 измененных файлов с 10 добавлено и 4 удалено
  1. 3 2
      include/ec_master.h
  2. 1 1
      include/ec_netdev.h
  3. 4 0
      src/ec_cmd.c
  4. 2 1
      src/ec_slave.c

+ 3 - 2
include/ec_master.h

@@ -87,8 +87,9 @@ typedef struct ec_master {
     ec_netdev_stats_t netdev_stats;
     ec_stats_t stats;
     ec_master_phase_t phase;
-    bool active;    /**< Master is started. */
-    bool scan_done; /**< Slave scan is done. */
+    bool active;         /**< Master is started. */
+    bool scan_done;      /**< Slave scan is done. */
+    bool rescan_request; /**< Rescan requested. */
 
     ec_datagram_t main_datagram; /**< Main datagram for slave scan & state change & config & sii */
 

+ 1 - 1
include/ec_netdev.h

@@ -14,7 +14,7 @@ typedef struct ec_netdev {
     ec_master_t *master;
     struct chry_phy_device phydev;
     ec_netdev_index_t index;
-    char name[20];
+    char name[24];
     uint8_t mac_addr[6];
     bool link_state;
     uint8_t tx_frame_index;

+ 4 - 0
src/ec_cmd.c

@@ -107,6 +107,7 @@ static void ec_master_cmd_show_help(void)
     EC_LOG_RAW("Usage: ethercat <command> [options]\n");
     EC_LOG_RAW("Commands:\n");
     EC_LOG_RAW("  master                                         Show master information\n");
+    EC_LOG_RAW("  rescan                                         Request a slaves rescan\n");
     EC_LOG_RAW("  slaves                                         Show slaves overview\n");
     EC_LOG_RAW("  slaves -v                                      Show detailed information for all slaves\n");
     EC_LOG_RAW("  slaves -p <idx>                                Show information for slave <idx>\n");
@@ -700,6 +701,9 @@ int ethercat(int argc, const char **argv)
     } else if (strcmp(argv[1], "master") == 0) {
         ec_master_cmd_master(global_cmd_master);
         return 0;
+    } else if (strcmp(argv[1], "rescan") == 0) {
+        global_cmd_master->rescan_request = true;
+        return 0;
     } else if (strcmp(argv[1], "slaves") == 0) {
         // ethercat slaves
         if (argc == 2) {

+ 2 - 1
src/ec_slave.c

@@ -1048,10 +1048,11 @@ void ec_slaves_scanning(ec_master_t *master)
         }
     }
 
-    if (rescan_required) {
+    if (rescan_required || master->rescan_request) {
         uint32_t count = 0, slave_index, autoinc_address;
         uint8_t step = 0;
 
+        master->rescan_request = false;
         rescan_required = 0;
 
         ec_master_stop(master);