Jelajahi Sumber

增加 : 完善led驱动;

lch 8 bulan lalu
induk
melakukan
9a9ae381a4

+ 1 - 1
README.md

@@ -57,4 +57,4 @@
 02. 增加 : ch423s驱动;
 03. 修改 : 按照南网文件修改自动化参数;
 04. 增加 : 遥信点表点号;
-05. 增加 : led函数;
+5.  增加 : led函数;

+ 12 - 2
app_public/fuxi_public/fuxi_bsp/include/ch423s.h

@@ -24,6 +24,16 @@
 
 /*****  枚举  *****/
 
+enum e_mode_ch423
+{
+    e_io_mode_off = 0, /**< 灭 */
+    e_io_mode_on,      /**< 亮 */
+    e_io_mode_shine,   /**< 闪烁 */
+    e_io_mode_max
+};
+
+/***** 结构体 *****/
+
 /***** 结构体 *****/
 
 /***** 变量对外声明 *****/
@@ -31,10 +41,10 @@
 /***** 函数对外声明 *****/
 
 extern int ch423sio_updata_status_ontime(void);
-extern int ch423sio_set_io(uint8_t _uc_idx, uint8_t _uc_state);
 extern int ch423sio_init_dev(void);
 extern int ch423sio_exit_dev(void);
-
+extern void ch423sio_handle_mode(void);
+extern int ch423sio_control_state(uint8_t _uc_idx, enum e_mode_ch423 _e_mode, uint32_t _ul_time);
 
 #endif /* DEF_CH423S_H */
 #endif /* IO_CHIP_CH423S */

+ 1 - 0
app_public/fuxi_public/fuxi_bsp/include/equ.h

@@ -216,6 +216,7 @@ struct sn
 {
 	s8 sw; // 类型 0公共 1开关1
 	s8 no;
+	u16 time; // 翻转时间
 };
 
 //LED配置结构体

+ 0 - 2
app_public/fuxi_public/fuxi_bsp/include/gpio.h

@@ -46,7 +46,6 @@ enum
 int gpio_init(void);
 int gpio_exit(void);
 
-unsigned int gpio_get_kin(unsigned int addr);
 unsigned int gpio_get_wirelessin(void);
 unsigned int gpio_get_version(void);
 unsigned int gpio_get_addr(void);
@@ -62,7 +61,6 @@ unsigned short gpio_di_fj(unsigned char index);
 unsigned short gpio_di_fj(void);
 #endif
 void gpio_kout_do(int on, unsigned int kout);
-void gpio_pwm_do(int on, unsigned int kout);
 					
 #endif
 /*------------------------------ Îļþ½áÊø -------------------------------------

+ 2 - 2
app_public/fuxi_public/fuxi_bsp/source/ad7616.c

@@ -614,7 +614,7 @@ static void updata_adc(struct t_shmdata_adc *sample_data0, uint16_t us_adc_dot_i
             // Í»±äÁ¿
             if (g_adc_sync == 1 && g_sw_init == 1)
             {
-                protect_tbl_qd();
+                // protect_tbl_qd();
             }
         }
     }
@@ -643,7 +643,7 @@ int adc_isr_new(int mod)
     // printf("ret0=%d, sample_idx=%d, read_index=%d, us_updata=%d, us_op=%d, us_op_bk=%d\n",
     // 	ret0, sample_data0.data.us_sample_idx, smus_sample_read_index0, sample_data0.us_updata, sample_data0.us_op, sample_data0.us_op_bk);
 
-    if (0 < ret0)
+    if (0 > ret0)
     {
         return -1;
     }

+ 249 - 49
app_public/fuxi_public/fuxi_bsp/source/ch423s.c

@@ -19,6 +19,7 @@
 #include <linux/i2c-dev.h>
 #include <errno.h>
 #include "head.h"
+#include "ch423s.h"
 
 #if defined IO_CHIP_CH423S
 
@@ -65,44 +66,51 @@
 #define BIT_IO6_DAT 0x40      // 写入双向输入输出引脚的输出寄存器,当IO_OE=1,IO6为0输出低电平,为1输出高电平
 #define BIT_IO7_DAT 0x80      // 写入双向输入输出引脚的输出寄存器,当IO_OE=1,IO7为0输出低电平,为1输出高电平
 
-struct t_dev_cfg
+
+/**< led配置结构体 */
+struct t_config_led
 {
     uint8_t uc_port;
     uint8_t uc_pin;
+    uint8_t uc_en;      /**< 使能标志 */
+    uint8_t uc_mode;    /**< 模式 0灭 1亮 2闪烁 */
+    uint8_t uc_state;   /**< 目前状态 */
+    uint32_t ul_time;   /**< 翻转时间 */
+    uint32_t ul_count;  /**< 翻转计时 */
 };
 
-struct t_dev_cfg t_ch423_gpio[] =
+static struct t_config_led mst_led_cfg[LED_MAX_NUM] =
     {
-        {CH423_OC_L_CMD, 0},
-        {CH423_OC_L_CMD, 1},
-        {CH423_OC_L_CMD, 2},
-        {CH423_OC_L_CMD, 3},
-        {CH423_OC_L_CMD, 4},
-        {CH423_OC_L_CMD, 5},
-        {CH423_OC_L_CMD, 6},
-        {CH423_OC_L_CMD, 7},
-        {CH423_OC_H_CMD, 8},
-        {CH423_OC_H_CMD, 9},
-        {CH423_OC_H_CMD, 10},
-        {CH423_OC_H_CMD, 11},
-        {CH423_OC_H_CMD, 12},
-        {CH423_OC_H_CMD, 13},
-        {CH423_OC_H_CMD, 14},
-        {CH423_OC_H_CMD, 15},
-        {CH423_SET_IO_CMD, 16},
-        {CH423_SET_IO_CMD, 17},
-        {CH423_SET_IO_CMD, 18},
-        {CH423_SET_IO_CMD, 19},
-        {CH423_SET_IO_CMD, 20},
-        {CH423_SET_IO_CMD, 21},
-        {CH423_SET_IO_CMD, 22},
-        {CH423_SET_IO_CMD, 23},
+        {CH423_OC_L_CMD, 0, 0, 0, 0, 0},
+        {CH423_OC_L_CMD, 1, 0, 0, 0, 0},
+        {CH423_OC_L_CMD, 2, 0, 0, 0, 0},
+        {CH423_OC_L_CMD, 3, 0, 0, 0, 0},
+        {CH423_OC_L_CMD, 4, 0, 0, 0, 0},
+        {CH423_OC_L_CMD, 5, 0, 0, 0, 0},
+        {CH423_OC_L_CMD, 6, 0, 0, 0, 0},
+        {CH423_OC_L_CMD, 7, 0, 0, 0, 0},
+        {CH423_OC_H_CMD, 8, 0, 0, 0, 0},
+        {CH423_OC_H_CMD, 9, 0, 0, 0, 0},
+        {CH423_OC_H_CMD, 10, 0, 0, 0, 0},
+        {CH423_OC_H_CMD, 11, 0, 0, 0, 0},
+        {CH423_OC_H_CMD, 12, 0, 0, 0, 0},
+        {CH423_OC_H_CMD, 13, 0, 0, 0, 0},
+        {CH423_OC_H_CMD, 14, 0, 0, 0, 0},
+        {CH423_OC_H_CMD, 15, 0, 0, 0, 0},
+        {CH423_SET_IO_CMD, 16, 0, 0, 0, 0},
+        {CH423_SET_IO_CMD, 17, 0, 0, 0, 0},
+        {CH423_SET_IO_CMD, 18, 0, 0, 0, 0},
+        {CH423_SET_IO_CMD, 19, 0, 0, 0, 0},
+        {CH423_SET_IO_CMD, 20, 0, 0, 0, 0},
+        {CH423_SET_IO_CMD, 21, 0, 0, 0, 0},
+        {CH423_SET_IO_CMD, 22, 0, 0, 0, 0},
+        {CH423_SET_IO_CMD, 23, 0, 0, 0, 0},
 };
 
 #define I2C_DEV "/dev/i2c-5"
 static int sl_ch423s_fd = -1, sl_ch423s_init = -1;
-static uint32_t sul_io_status = 0;
-static unsigned long mtll_updata_ch423s_timer = 0;
+static uint32_t sul_io_status = 0xffffff;
+static uint8_t msuc_test_flag = 0;
 
 /**
  * @brief
@@ -115,20 +123,24 @@ static unsigned long mtll_updata_ch423s_timer = 0;
  * @retval         none
  *
  * @warning        none
- * @note           none
+ * @note           注意这个原件没有固定的iic地址 抓数据发现 命令 + 数据 就可以操作
  */
 static int ch423_write_data(uint8_t _uc_cmd, uint8_t _uc_state)
 {
-    uint8_t uca_data[2] = {0};
-
-    uca_data[0] = _uc_cmd;
-    uca_data[1] = _uc_state;
-    if (write(sl_ch423s_fd, &uca_data[0], 2) != 2)
+    /* 使用寄存器地址来寻址 */
+    if (ioctl(sl_ch423s_fd, I2C_SLAVE, _uc_cmd >> 1) < 0)
     {
-        dp_err_n_c_rt("Failed to send init command: %s", strerror(errno));
+        dp_err_n_c("Failed to set I2C slave address: %s\n", strerror(errno));
 
         return -1;
     }
+    
+    if (write(sl_ch423s_fd, &_uc_state, 1) != 1)
+    {
+        dp_err_n_c("Failed to write data: %s", strerror(errno));
+
+        return -2;
+    }
     return 0;
 }
 
@@ -147,14 +159,17 @@ static int ch423_write_data(uint8_t _uc_cmd, uint8_t _uc_state)
  */
 static void ch423s_updata_port_status(uint8_t _uc_idx, uint8_t _uc_state)
 {
-    /* 清除原始状态 */
+    uint32_t ul_data_1 = 0, ul_data_2 = 0;
+    ul_data_1 = sul_io_status;
     if ((sul_io_status >> _uc_idx) & 0x01)
     {
         sul_io_status ^= (1 << _uc_idx);
     }
+    ul_data_2 = sul_io_status;
 
     /* 重新设置 */
     sul_io_status |= _uc_state ? (0 << _uc_idx) : (1 << _uc_idx);
+    // dp_err_n_c_rt("ul_data_1 = 0x%06x, ul_data_2 = 0x%06x, sul_io_status = 0x%06x\r\n", ul_data_1, ul_data_1, sul_io_status);
 }
 
 /**
@@ -173,13 +188,6 @@ int ch423sio_updata_status_ontime(void)
     uint8_t uca_state[3] = {0};
     int l_ret = 0;
 
-    // if (bsp_ustimer_get_duration(mtll_updata_ch423s_timer) < (USTIMER_MS * 50) || sl_ch423s_fd < 0)
-    // {
-    //     return -1;
-    // }
-
-    mtll_updata_ch423s_timer = bsp_ustimer_get_origin();
-
     uca_state[0] = (uint8_t)(sul_io_status & 0xff);
     (0 == ch423_write_data(CH423_OC_L_CMD, uca_state[0])) ? l_ret : l_ret--;
 
@@ -207,31 +215,124 @@ int ch423sio_updata_status_ontime(void)
  */
 int ch423sio_set_io(uint8_t _uc_idx, uint8_t _uc_state)
 {
-    uint8_t uc_num = sizeof(t_ch423_gpio) / sizeof(struct t_dev_cfg);
+    if (_uc_idx >= LED_MAX_NUM || sl_ch423s_init < 0 || _uc_state > 1)
+    {
+        return -1;
+    }
+
+    switch (mst_led_cfg[_uc_idx].uc_port)
+    {
+    case CH423_OC_L_CMD:
+        ch423s_updata_port_status(mst_led_cfg[_uc_idx].uc_pin, _uc_state);
+        break;
+
+    case CH423_OC_H_CMD:
+        ch423s_updata_port_status(mst_led_cfg[_uc_idx].uc_pin, _uc_state);
+        break;
+
+    case CH423_SET_IO_CMD:
+        ch423s_updata_port_status(mst_led_cfg[_uc_idx].uc_pin, _uc_state);
+        break;
+
+    default:
+        return -2;
+        break;
+    }
+    return 0;
+}
+
+/**
+ * @brief          设置io状态
+ * @author         lch (lch_work@foxmail.com)
+ * @version        1.0
+ * @date           20251224
+ * @param[in/out]  {uint8_t} _uc_idx 下标
+ * @param[in/out]  {uint8_t} _uc_state 电平状态
+ * @return         * int
+ * @retval         none
+ *
+ * @warning        none
+ * @note           none
+ */
+int ch423sio_set_ioupdata(uint8_t _uc_idx, uint8_t _uc_state)
+{
+    int ret = -1;
+    uint8_t io_val[3] = {0};
 
-    if (_uc_idx >= uc_num || sl_ch423s_init < 0 || _uc_state > 1)
+    if (_uc_idx >= LED_MAX_NUM || sl_ch423s_init < 0 || _uc_state > 1)
     {
+        dp_err_n_c("_uc_idx = %d, sl_ch423s_init = %d, _uc_state = %d", _uc_idx, sl_ch423s_init, _uc_state);
         return -1;
     }
 
-    switch (t_ch423_gpio[_uc_idx].uc_port)
+    switch (mst_led_cfg[_uc_idx].uc_port)
     {
     case CH423_OC_L_CMD:
-        ch423s_updata_port_status(t_ch423_gpio[_uc_idx].uc_pin, _uc_state);
+        ch423s_updata_port_status(mst_led_cfg[_uc_idx].uc_pin, _uc_state);
+        io_val[0] = (uint8_t)(sul_io_status & 0xff);
+        ret = ch423_write_data(CH423_OC_L_CMD, io_val[0]);
         break;
 
     case CH423_OC_H_CMD:
-        ch423s_updata_port_status(t_ch423_gpio[_uc_idx].uc_pin, _uc_state);
+        ch423s_updata_port_status(mst_led_cfg[_uc_idx].uc_pin, _uc_state);
+        io_val[1] = (uint8_t)((sul_io_status & 0xff00) >> 8);
+        ret = ch423_write_data(CH423_OC_H_CMD, io_val[1]);
         break;
 
     case CH423_SET_IO_CMD:
-        ch423s_updata_port_status(t_ch423_gpio[_uc_idx].uc_pin, _uc_state);
+        ch423s_updata_port_status(mst_led_cfg[_uc_idx].uc_pin, _uc_state);
+        io_val[2] = (uint8_t)((sul_io_status & 0xff0000) >> 16);
+        ret = ch423_write_data(CH423_SET_IO_CMD, io_val[2]);
         break;
 
     default:
         return -2;
         break;
     }
+    return ret;
+}
+
+/**
+ * @brief          io测试
+ * @author         lch (lch_work@foxmail.com)
+ * @version        1.0
+ * @date           20251230
+ * @return         * int
+ * @retval         none
+ * 
+ * @warning        none
+ * @note           none
+ */
+static int ch423sio_run_test(void)
+{
+    int i = 0;
+
+    for (i = 0; i < LED_MAX_NUM; i++)
+    {
+        ch423sio_set_ioupdata(i, 1);
+        usleep(1000 * 100);
+    }
+    usleep(1000 * 500);
+
+    for (i = (LED_MAX_NUM - 1); i >= 0; i--)
+    {
+        ch423sio_set_ioupdata(i, 0);
+        usleep(1000 * 100);
+    }
+    usleep(1000 * 500);
+
+    for (i = 0; i < LED_MAX_NUM; i++)
+    {
+        ch423sio_set_ioupdata(i, 1);
+    }
+    usleep(1000 * 500);
+
+    for (i = 0; i < LED_MAX_NUM; i++)
+    {
+        ch423sio_set_ioupdata(i, 0);
+    }
+    usleep(1000 * 100);
+
     return 0;
 }
 
@@ -256,6 +357,7 @@ int ch423sio_init_dev(void)
 
         return -1;
     }
+    dp_err_n_c_rt("sl_ch423s_fd %d", sl_ch423s_fd);
 
     ch423_write_data(CH423_SYS_CMD, BIT_IO_OE); /* 将IO7~IO0设置为输出 其它参数使用默认值 */
     ch423_write_data(CH423_OC_L_CMD, 0xff);
@@ -263,6 +365,9 @@ int ch423sio_init_dev(void)
     ch423_write_data(CH423_SET_IO_CMD, 0xff);
 
     sl_ch423s_init = 0;
+
+    ch423sio_run_test();
+
     return 0;
 }
 
@@ -288,4 +393,99 @@ int ch423sio_exit_dev(void)
     return 0;
 }
 
+/**
+ * @brief       控制led驱动
+ *
+ * @param[in]   {uint8_t} _uc_idx 硬件地址
+ * @param[in]   {uint8_t} _uc_set 模式 0灭 1亮
+ */
+static void ch423_control_drive(uint8_t _uc_idx, uint8_t _uc_set)
+{
+    if (_uc_idx >= LED_MAX_NUM || _uc_set >= e_io_mode_max)
+        return;
+
+    switch (_uc_set)
+    {
+    case e_io_mode_off:
+        ch423sio_set_io(_uc_idx, e_io_mode_off);
+        mst_led_cfg[_uc_idx].uc_state = e_io_mode_off;
+        break;
+
+    case e_io_mode_on:
+        ch423sio_set_io(_uc_idx, e_io_mode_on);
+        mst_led_cfg[_uc_idx].uc_state = e_io_mode_on;
+        break;
+
+    default:
+        return;
+        break;
+    }
+}
+
+/**
+ * @brief       切换led模式
+ *
+ * @details     闪烁模式一直在计时,uc_en使能标志不会清零
+ */
+void ch423sio_handle_mode(void)
+{
+    uint8_t uc_updata = 0;
+
+    for (uint8_t i = 0; i < LED_MAX_NUM; i++)
+    {
+        if (mst_led_cfg[i].uc_en == 0)
+            continue;
+
+        mst_led_cfg[i].ul_count += 100;
+        if (mst_led_cfg[i].ul_count > mst_led_cfg[i].ul_time)
+        {
+            mst_led_cfg[i].ul_count = 0;
+            uc_updata = 1;
+            if (mst_led_cfg[i].uc_mode != e_io_mode_shine)
+            {
+                mst_led_cfg[i].uc_en = 0;
+                ch423_control_drive(i, mst_led_cfg[i].uc_mode);
+            }
+            else
+            {
+                if (e_io_mode_on == mst_led_cfg[i].uc_state)
+                {
+                    ch423_control_drive(i, e_io_mode_off);
+                }
+                else
+                {
+                    ch423_control_drive(i, e_io_mode_on);
+                }
+            }
+        }
+    }
+    if (1 == uc_updata)
+    {
+        ch423sio_updata_status_ontime();
+    }
+}
+
+/**
+ * @brief
+ *
+ * @param[in]   {uint8_t} _uc_idx led映射
+ * @param[in]   {enum e_mode_ch423} _e_mode 模式 0灭 1亮 2闪烁
+ * @param[in]   {uint32_t} _ul_time 闪烁时间
+ * @return      int
+ * @retval      0设置模式成功
+ * @details     none
+ */
+int ch423sio_control_state(uint8_t _uc_idx, enum e_mode_ch423 _e_mode, uint32_t _ul_time)
+{
+    if (_uc_idx >= LED_MAX_NUM || _e_mode >= e_io_mode_max)
+        return -1;
+
+    mst_led_cfg[_uc_idx].uc_en = 1;
+    mst_led_cfg[_uc_idx].uc_mode = _e_mode;
+    if (_e_mode == e_io_mode_shine)
+        mst_led_cfg[_uc_idx].ul_time = _ul_time;
+
+    return 0;
+}
+
 #endif /* TMP_CHIP_AHT20 */

+ 13 - 11
app_public/fuxi_public/fuxi_bsp/source/dido.c

@@ -760,17 +760,19 @@ int get_shm_didata(void)
 
         for (uint8_t i = 0; i < DI_MAX; i++)
         {
-            if (smt_di_bk[i].uc_state != smt_di[i].uc_state)
+            pt_di = &g_di_st[g_di_slot][i];
+            b_on = smt_di[i].uc_state;
+            if (g_di[g_di_slot].inv[0] & (1 << i))
             {
-                pt_di = &g_di_st[g_di_slot][i];
-                b_on = smt_di[i].uc_state;
-                if (g_di[g_di_slot].inv[0] & (1 << i))
-                {
-                    b_on = !b_on;
-                }
-                pt_di->b_on = b_on;
-                ul_di_state |= b_on << i;
+                b_on = !b_on;
+                // dp_err_n_c_rt("b_on = %d", b_on);
+            }
+            pt_di->b_on = b_on;
+            ul_di_state |= b_on << i;
+            // dp_err_n_c_rt("ul_di_state = 0x%04x", ul_di_state);
 
+            if (smt_di_bk[i].uc_state != smt_di[i].uc_state)
+            {
                 transform_msts_to_tts(smt_di[i].ull_timestamp, &ts);
                 soe_record_yx(i + (g_di_slot << 8), b_on, &ts);
 
@@ -789,9 +791,9 @@ int get_shm_didata(void)
                 // dp_err_n_c_rt("change smt_di[%02d].uc_state = %d", i, b_on);
             }
         }
+        // dp_err_n_c_rt("inv[0] = %d, value[0] = 0x%04x, ul_di_state = 0x%04x", g_di[g_di_slot].inv[0], g_di[g_di_slot].value[0], ul_di_state);
         g_di[g_di_slot].value[0] = ul_di_state ^ g_di[g_di_slot].inv[0];
-        // dp_err_n_c_rt("g_di[g_di_slot].inv[0] = %d, g_di[%02d].value[0] = 0x%04x", g_di[g_di_slot].inv[0], g_di_slot, g_di[g_di_slot].value[0]);
-        // rt_printf("\r\n");
+        // dp_err_n_c_rt("inv[0] = %d, value[0] = 0x%04x, ul_di_state = 0x%04x", g_di[g_di_slot].inv[0], g_di[g_di_slot].value[0], ul_di_state);
     }
 
     return l_read_ret;

+ 26 - 133
app_public/fuxi_public/fuxi_bsp/source/gpio.c

@@ -51,12 +51,7 @@ typedef enum
     RTDM_GPIO = 1,
 } GPIO_TYPE;
 
-unsigned short kc_pwm0_stu;
-unsigned short kc_pwm1_stu;
-
 unsigned short kc_kout0_stu;
-unsigned short kc_kout1_stu;
-
 extern uint32_t g_yx_buf[2]; // 预留64个遥信
 
 /*------------------------------ 函数声明 -------------------------------------
@@ -278,7 +273,7 @@ int rtdm_gpio_init(int gpio, int direction)
         return -1;
     }
 
-    if (113 == gpio) /* 预置继电器是开入 */
+    if (113 == gpio) /* 预置返校是开入 */
     {
         ret = ioctl(fd, GPIO_RTIOC_DIR_IN, &value);
     }
@@ -324,10 +319,7 @@ int gpio_init(void)
 
     msleep(10); // 延时10ms
 
-    kc_pwm0_stu = 0;
-    kc_pwm1_stu = 0;
     kc_kout0_stu = 0;
-    kc_kout1_stu = 0;
 
     for (i = DO_OUT1; i < DO_NUM; i++)
     {
@@ -354,30 +346,6 @@ int gpio_exit(void)
     return 0;
 }
 
-/******************************************************************************
-函数名称:	gpio_get_kin
-函数版本:	01.01
-创建作者:	   sunxi
-创建日期:	2008-09-16
-函数说明:	得到开入的状态。
-参数说明:	无
-返回值:  	返回开入的状态,每个bit代表一个开入量。
-修改记录:
-*/
-unsigned int gpio_get_kin(unsigned int addr)
-{
-    register unsigned int dw;
-    unsigned int value[3];
-
-    value[0] = *(volatile unsigned int *)addr;
-    value[1] = *(volatile unsigned int *)addr;
-    value[2] = *(volatile unsigned int *)addr;
-
-    dw = (value[0] & value[1]) | (value[0] & value[2]) | (value[1] & value[2]);
-
-    return dw;
-}
-
 /******************************************************************************
 函数名称:	gpio_get_di
 函数版本:	01.01
@@ -429,19 +397,35 @@ unsigned short gpio_di_fj(void)
     return ret;
 }
 
-static void gpio_kouten_do(int on, unsigned int kouten)
+/**
+ * @brief          读取预置返校的状态
+ * @author         lch (lch_work@foxmail.com)
+ * @version        1.0
+ * @date           20251229
+ * @return         * int
+ * @retval         none
+ * 
+ * @warning        none
+ * @note           none
+ */
+int gpioio_get_perset_status(void)
 {
-#if !defined CPU_FUXI
-    if (kouten > KOUT_EN1)
-        return;
+    char buf[2] = {0};
+    int ret = 0;
 
-    if(on)
+    if (gpio_val_fd[DO_IN_PRESET] < 0)
     {
+        dp_err_n_c("gpio_val_fd[DO_IN_PRESET] = %d, not initialized", gpio_val_fd[DO_IN_PRESET]);
+        return -1;
     }
-    else
+
+    ret = read(gpio_val_fd[DO_IN_PRESET], buf, sizeof(buf));
+    if (ret > 0)
     {
+        return buf[0] - '0'; // 字符转换为数字
     }
-#endif
+
+    return -1;
 }
 
 /******************************************************************************
@@ -458,103 +442,16 @@ static void gpio_kouten_do(int on, unsigned int kouten)
 */
 void gpio_kout_do(int on, unsigned int kout)
 {
-    // if (kout > (DO_NUM-DO_OUT0))
-    //     return;
+    if (kout > (DO_NUM - DO_OUT_PRESET))
+        return;
 
     if (on)
     {
-        if ((kout == 6) || (kout == 7))
-        {
-            // gpio_kouten_do(1,KOUT_EN1);
-            kc_kout1_stu |= (1 << kout);
-        }
-        else
-        {
-            // gpio_kouten_do(1,KOUT_EN0);
-            kc_kout0_stu |= (1 << kout);
-        }
-
         write(gpio_val_fd[kout + DO_OUT0], "0", 2);
     }
     else
     {
         write(gpio_val_fd[kout + DO_OUT0], "1", 2);
-
-        if ((kout == 6) || (kout == 7))
-        {
-            kc_kout1_stu &= ~(1 << kout);
-        }
-        else
-        {
-            kc_kout0_stu &= ~(1 << kout);
-        }
-
-        if ((kc_pwm1_stu == 0) && (kc_kout1_stu == 0))
-        {
-            // gpio_kouten_do(0,KOUT_EN1);
-        }
-
-        if ((kc_kout0_stu == 0) && (kc_pwm0_stu == 0))
-        {
-            // gpio_kouten_do(0,KOUT_EN0);
-        }
-    }
-}
-
-/******************************************************************************
-函数名称:	gpio_pwm_do
-函数版本:	01.01
-创建作者:
-创建日期:	2014-11-28
-函数说明:	pwm开出,由于存在kc_pwm_stu,只允许在同一控制路径中开出(例如同一中断或同一线程).
-
-参数说明:		on: 1开出, 0回收
-返回值:  无
-修改记录:
-*/
-void gpio_pwm_do(int on, unsigned int kout)
-{
-    // if (kout >= DO_NUM)
-    //     return;
-
-    if (on)
-    {
-
-        if ((kout == 0) || (kout == 1))
-        {
-            // gpio_kouten_do(1,KOUT_EN1);
-            kc_pwm1_stu |= (1 << kout);
-        }
-        else
-        {
-            // gpio_kouten_do(1,KOUT_EN0);
-            kc_pwm0_stu |= (1 << kout);
-        }
-
-        write(gpio_val_fd[kout], "0", 2);
-    }
-    else
-    {
-        write(gpio_val_fd[kout], "1", 2);
-
-        if ((kout == 0) || (kout == 1))
-        {
-            kc_pwm1_stu &= ~(1 << kout);
-        }
-        else
-        {
-            kc_pwm0_stu &= ~(1 << kout);
-        }
-
-        if ((kc_pwm1_stu == 0) && (kc_kout1_stu == 0))
-        {
-            // gpio_kouten_do(0,KOUT_EN1);
-        }
-
-        if ((kc_kout0_stu == 0) && (kc_pwm0_stu == 0))
-        {
-            // gpio_kouten_do(0,KOUT_EN0);
-        }
     }
 }
 
@@ -647,8 +544,6 @@ int gpio_test(void)
     int ret = 0;
     // unsigned int i;
 
-    // gpio_kouten_do(1,KOUT_EN1);
-
 #if 1
     while (1)
     {
@@ -657,13 +552,11 @@ int gpio_test(void)
 
         gpio_kout_do(1, DO_OUT2 - DO_OUT0);
         // gpio_kout_do(1,DO_OUT3-DO_OUT0);
-        //  gpio_pwm_do(1,DO_PWM1);
 
         sleep(5);
 
         gpio_kout_do(0, DO_OUT2 - DO_OUT0);
         // gpio_kout_do(0,DO_OUT3-DO_OUT0);
-        //  gpio_pwm_do(0,DO_PWM1);
 
         /*
 

+ 2 - 2
dtu/dtu_main_t536/app/FA.c

@@ -230,10 +230,10 @@ void   fa_RstUFDI(DWORD  dStep)
 
 	if(brst&&pRunSet->bTT_SY_Board)
 	{
-		gpio_pwm_do(1, 2); // PWM2 为复归瞬压信号的开出
+		// PWM2 为复归瞬压信号的开出
 		if(dTCounter-rstUFDICounter>=T_20ms) //开出20ms开出
 		{	
-			gpio_pwm_do(0, 2); // PWM2 为复归瞬压信号的开出
+			// PWM2 为复归瞬压信号的开出
 			brst=false;
 			rstUFDICounter=dTCounter;
 		}

+ 0 - 1
dtu/dtu_main_t536/app/LcdComm.c

@@ -1170,7 +1170,6 @@ static void _hmi_comm_send(void)
 					g_bCommLed=false;
 				}
 			
-				led_to_hmi();
 				if((g_dw_led[0]!=g_dw_ledsave[0])||(g_dw_led[1]!=g_dw_ledsave[1])||pt->bFreshLed)
 				{
 					led_st[0]=(BYTE)g_dw_led[0];          // ״̬µÆ

+ 1 - 1
dtu/dtu_main_t536/app/defineSys.h

@@ -12,7 +12,7 @@
 #ifndef _DEFINE_SYS_H
 #define _DEFINE_SYS_H
 
-#define DEVICE_VERSION_INFORMATION "NW24_20251226_001" // NW2022意思是按照22年南网标准文件(总调)来做的
+#define DEVICE_VERSION_INFORMATION "NW24_20251231_005" // NW2022意思是按照22年南网标准文件(总调)来做的
 
 #ifdef ___defineSys____//!!!此宏定义不开启,以下宏不直接开启,只用于注释显示
 

+ 76 - 142
dtu/dtu_main_t536/app/led.c

@@ -1,5 +1,5 @@
 /******************************************************************************
-版权所有:	
+版权所有:
 文件名称:	led.c
 文件版本:	01.01
 创建作者:	xxxxxx
@@ -9,21 +9,18 @@
 修改记录:
 */
 /*------------------------------- 头文件 --------------------------------------
-*/
+ */
 #include "head.h"
 #include "ch423s.h"
- 
 
 /*------------------------------- 宏定义 --------------------------------------
-*/
-
+ */
 
 /*------------------------------ 类型结构 -------------------------------------
-*/
-
+ */
 
 /*------------------------------ 全局变量 -------------------------------------
-*/
+ */
 
 // 辅助板LED测试状态
 u32 g_led_aux_test_st;
@@ -35,22 +32,28 @@ int led_save_flag = 0;
 // 数组第二维取公共、开关中灯个数的大值
 // noted by sunxi: 20220701 加入(u16),以去除335x的编译告警
 u8 g_led_stu[SWITCH_NUM_MAX + 1][(((u16)SW_LED_NUM > (u16)PUB_LED_NUM) ? SW_LED_NUM : PUB_LED_NUM)];
+u8 g_led_stu_bk[SWITCH_NUM_MAX + 1][(((u16)SW_LED_NUM > (u16)PUB_LED_NUM) ? SW_LED_NUM : PUB_LED_NUM)];
 u8 g_led_save[SWITCH_NUM_MAX + 1][(((u16)SW_LED_NUM > (u16)PUB_LED_NUM) ? SW_LED_NUM : PUB_LED_NUM)];
 // 当前面板的LED配置
 struct led_config *g_led_hmi;
 
-
 #define LED_FILE_VERSION 0X01010101 // 文件版本
 struct file *pf_ledsave = NULL;
 
 #ifdef CPU_FUXI
 /* 实际的led地址 */
-static uint8_t suca_led_hw_addr[LED_MAX_NUM] = {0, 1, 2, 3,
-                                                4, 5, 6, 7,
-                                                8, 9, 10, 11,
-                                                12, 13, 14, 15,
-                                                16, 17, 18, 19,
-                                                20, 21, 22, 23};
+/* 目前按照标准化的贴膜来配置地址
+面膜灯
+DB
+电源 远方 合位 过流 跳闸 充电   重合闸动作 开关传动 异常    分布式 备用 备用
+运行 通讯 分位 接地 告警 未储能 重合闸闭锁 合闸闭锁 常规保护 就地FA 集中FA 备用
+DA
+电源 通讯 告警     间隔1通讯 间隔3通讯 间隔5通讯 备用 网口1 串口1 串口3 备用 备用
+运行 异常 级联异常 间隔2通讯 间隔4通讯 间隔6通讯 备用 网口2 串口2 串口4 备用 备用
+
+*/
+static uint8_t suca_led_hw_addr[LED_MAX_NUM] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+                                                12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};
 #endif
 
 void _led_update_status(void);
@@ -295,6 +298,7 @@ int led_exit(void)
     {
         rt_file_close(pf_ledsave, 0);
     }
+    ch423sio_exit_dev();
     return 0;
 }
 
@@ -315,7 +319,7 @@ int led_init(void)
 #ifdef STORE_PILOTELAMP
     _led_readfile();
 #endif
-    return 0;
+    return ch423sio_init_dev();
 }
 
 /******************************************************************************
@@ -337,7 +341,6 @@ int led_init_hmi(void)
     // 检查状态板是否配置
     if (slot > 0)
     {
-        dp_info_h_c("slot = %d", slot);
         g_led_hmi = &g_led_slot[slot];
     }
     return 0;
@@ -593,10 +596,12 @@ void _led_update_status(void)
         {
             led_set_sw(i, SW_LED_JDDZ, LED_OFF);
         }
+
         if (prun->gj_led)
         {
             led_set_sw(i, SW_LED_FAULT_GJ, LED_ON);
         }
+
         // 重合闸灯
         if (prun->chzdz)
         {
@@ -683,6 +688,7 @@ void _led_update_status(void)
             led_set_sw(i, SW_LED_FD, LED_OFF);
             led_set_sw(i, SW_LED_LL, LED_OFF);
         }
+
         // 运行模式压板灯
         if (BH_GOOSE_EN(i))
         {
@@ -874,14 +880,16 @@ void _led_update_status(void)
  * @date           20251226
  * @return         * int
  * @retval         none
- * 
+ *
  * @warning        none
- * @note           现在是100ms运行一次
+ * @note           现在是1000ms运行一次
  */
 static int led_updata_led(void)
 {
     int i = 0;
-    u8 uc_stu = 0, uc_idx = 0, uc_op = 0;
+    u8 uc_stu = 0, uc_idx = 0;
+    u32 ul_time = 0;
+    enum e_mode_ch423 e_mode = e_io_mode_off;
 
     // 没有配置,不执行
     if (g_led_hmi == 0)
@@ -896,7 +904,8 @@ static int led_updata_led(void)
         {
             continue;
         }
-        /* 硬件地址 */
+
+        // 硬件地址
         uc_idx = suca_led_hw_addr[i];
         // 取出灯状态
         uc_stu = g_led_stu[g_led_hmi->sn[i].sw][g_led_hmi->sn[i].no];
@@ -905,22 +914,24 @@ static int led_updata_led(void)
         switch (uc_stu)
         {
         case LED_ON:
-            uc_op = 1;
+            e_mode = e_io_mode_on;
             break;
 
         case LED_SLOW:
-            break;
-
         case LED_QUICK:
+            e_mode = e_io_mode_shine;
             break;
 
         case LED_OFF:
-            uc_op = 0;
+            e_mode = e_io_mode_off;
             break;
         }
-        ch423sio_set_io(uc_idx, uc_op);
+        if (uc_stu != g_led_stu_bk[g_led_hmi->sn[i].sw][g_led_hmi->sn[i].no])
+        {
+            ch423sio_control_state(uc_idx, e_mode, g_led_hmi->sn[i].time);
+            g_led_stu_bk[g_led_hmi->sn[i].sw][g_led_hmi->sn[i].no] = uc_stu;
+        }
     }
-    ch423sio_updata_status_ontime();
 
     return 0;
 }
@@ -931,6 +942,8 @@ void led_polling_app(void)
     static uint32_t us0 = 0;
     uint32_t us;
 
+    ch423sio_handle_mode();
+
     // 平时1秒处理一次,AUX板测试时0.5S一次
     us = (g_led_aux_test_st || g_led_kz_test_st) ? (USTIMER_SEC / 4) : USTIMER_SEC;
     if (ustimer_delay_origin2(&us0, us) != 1)
@@ -969,84 +982,6 @@ void led_set_sw(u8 sw, u8 no, u8 st)
     g_led_stu[sw + 1][no] = st;
 }
 
-/******************************************************************************
-函数名称:	led_to_hmi
-函数版本:	01.01
-创建作者:	xxxxxx
-创建日期:	2014-12-16
-函数说明:	获取面板LED灯的状态
-参数说明:
-返回值:  	无
-修改记录:
-*/
-int led_to_hmi(void)
-{
-    int i;
-    u8 led_tmp = 0, stu = 0;
-    u32 dw[2];
-    int ret = 0;
-    u32 *pdw;
-
-    // 如果没有HMI配置,不执行
-    if (g_led_hmi == 0)
-    {
-        return ret;
-    }
-    dw[0] = 0;
-    dw[1] = 0;
-    pdw = &dw[0];
-    for (i = 0; i < g_led_hmi->num; i++)
-    {
-        // 未配置灯继续循环
-        if (g_led_hmi->sn[i].no == LED_NULL)
-        {
-            continue;
-        }
-
-        // 取出灯状态
-        stu = g_led_stu[g_led_hmi->sn[i].sw][g_led_hmi->sn[i].no];
-
-        // 取出灯对应位置
-        if (i < 16)
-        {
-            led_tmp = i;
-            pdw = &dw[0];
-        }
-        else
-        {
-            led_tmp = i - 16;
-            pdw = &dw[1];
-        }
-        led_tmp *= 2;
-
-        // 按位置将灯状态置入dwled
-        switch (stu)
-        {
-        case LED_ON:
-            *pdw |= (0x3 << led_tmp);
-            break;
-
-        case LED_SLOW:
-            *pdw |= (0x2 << led_tmp);
-            break;
-
-        case LED_QUICK:
-            *pdw |= (0x1 << led_tmp);
-            break;
-
-        case LED_OFF:
-            *pdw |= (0x0 << led_tmp);
-            break;
-        }
-    }
-
-    // 更新面板全局LED状态
-    g_dw_led[0] = dw[0];
-    g_dw_led[1] = dw[1];
-    return ret;
-}
-
-
 /*------------------------------ 内部函数 -------------------------------------
 内部函数以下划线‘_’开头,不需要检查参数的合法性.
 */
@@ -1058,43 +993,42 @@ int led_to_hmi(void)
 
 int led_info_printf(void)
 {
-	int slot,i;
-	const char *name;
-	struct equ_config_do 	*cdo;
-
-	cdo = g_equ_config_do;
-	rt_printf("\r\nslot\tindex\towner\tno\tvalue\tname\r\n");
-	for(slot=0; slot<EQU_SLOT_NUM_MAX; slot++)
-	{
-		rt_printf("slot%02d:num=%d.\r\n",slot,g_led_slot[slot].num);
-		for(i=0; i<g_led_slot[slot].num; i++)
-		{
-			if(g_led_slot[slot].sn[i].no == LED_NULL)
-			{
-				continue;
-			}
-
-			if(g_led_slot[slot].sn[i].sw == 0)
-			{
-				name = g_pub_led_name[g_led_slot[slot].sn[i].no];
-			}
-			else
-			{
-				name = g_sw_led_name[g_led_slot[slot].sn[i].no];
-			}
-			rt_printf("%02d\t%02d\t%02d\t%d\t%d\t%s\r\n",
-			slot,\
-			i,\
-			g_led_slot[slot].sn[i].sw,
-			g_led_slot[slot].sn[i].no,
-			g_led_stu[g_led_slot[slot].sn[i].sw][g_led_slot[slot].sn[i].no],
-			name);
-		}
-	}	
-	return 0;
-}
+    int slot, i;
+    const char *name;
+    struct equ_config_do *cdo;
 
-/*------------------------------ 文件结束 -------------------------------------
-*/
+    cdo = g_equ_config_do;
+    rt_printf("\r\nslot\tindex\towner\tno\ttime\tvalue\tname\r\n");
+    for (slot = 0; slot < EQU_SLOT_NUM_MAX; slot++)
+    {
+        rt_printf("slot%02d:num=%d.\r\n", slot, g_led_slot[slot].num);
+        for (i = 0; i < g_led_slot[slot].num; i++)
+        {
+            if (g_led_slot[slot].sn[i].no == LED_NULL)
+            {
+                continue;
+            }
 
+            if (g_led_slot[slot].sn[i].sw == 0)
+            {
+                name = g_pub_led_name[g_led_slot[slot].sn[i].no];
+            }
+            else
+            {
+                name = g_sw_led_name[g_led_slot[slot].sn[i].no];
+            }
+            rt_printf("%02d\t%02d\t%02d\t%d\t%d\t%d\t%s\r\n",
+                      slot,
+                      i,
+                      g_led_slot[slot].sn[i].sw,
+                      g_led_slot[slot].sn[i].no,
+                      g_led_slot[slot].sn[i].time,
+                      g_led_stu[g_led_slot[slot].sn[i].sw][g_led_slot[slot].sn[i].no],
+                      name);
+        }
+    }
+    return 0;
+}
 
+/*------------------------------ 文件结束 -------------------------------------
+ */

+ 0 - 1
dtu/dtu_main_t536/app/led.h

@@ -56,7 +56,6 @@ void led_set_sw(u8 sw,u8 no, u8 st);
 
 void led_polling_app(void);
 int led_polling_5ms(void);
-int led_to_hmi(void);
 
 u8 * led_aux_test(u32 st);
 

+ 21 - 13
dtu/dtu_main_t536/app/main.c

@@ -174,11 +174,11 @@ int app_main (void *unused)
     equ_info_printf_ac();
     msleep(100);
     factor_printf();
-    msleep(100);
+    msleep(500);
     led_info_printf();
-    msleep(100);
-    extern int test_kc_function(void);
-    test_kc_function();
+    msleep(500);
+    // extern int test_kc_function(void);
+    // test_kc_function();
 #endif
 
 	{
@@ -215,17 +215,16 @@ int app_main (void *unused)
 	while(1)
 	{
 		us0 = bsp_ustimer_get_origin();
-//		test_round();
-//		uart_test();
-//		flash_test();
-//		adc_test();
-//		gps_test();
+		// test_round();
+		// uart_test();
+		// flash_test();
+		// adc_test();
+		// gps_test();
 				
-//		dido_test();
-//		rtc_test();
+		// dido_test();
+		// rtc_test();
 #ifdef CPU_FUXI
-		msleep(100);
-		// shm_comm_test();
+		msleep(10);
 #endif
 		// ϵͳµÄtickÃë
 		if(us0 - us0_sec > USTIMER_SEC)
@@ -292,6 +291,15 @@ int app_main (void *unused)
 #endif		
 		//us0 = ustimer_get_origin();
 		rt_stat_other_in(7,bsp_ustimer_get_duration(us0)/USTIMER_US);
+#if (0)
+        static uint64_t ull_test_timer_ml = 0;
+        ull_test_timer_ml++;
+        if (ull_test_timer_ml >= (25 * 100))
+        {
+            ull_test_timer_ml = 0;
+            dp_err_n_c("app_main dTCounter = %d", dTCounter);
+        }
+#endif
 	}
 #ifdef CPU_FUXI
 	watchdog_remove_item(wdt_id_mainloop);

+ 3 - 1
dtu/dtu_main_t536/app/protect.h

@@ -15,8 +15,10 @@
 
 /*------------------------------- 宏定义 --------------------------------------
 */
-// 控制出口总压板
+// 集中式
 #define JZS_ALL_EN(sw)      (g_tRelay[sw].run_stu.jzs_tt && pRunSet->tSwSet[sw].btt_gnyb_jzs)
+
+// 控制出口总压板
 #define KZ_OUT_ALL_EN(sw)   (pRunSet->tSwSet[sw].btt_yxyb_gnzck && !JZS_ALL_EN(sw))
 
 // 保护总投退

+ 0 - 4
dtu/dtu_main_t536/app/run_status.c

@@ -729,10 +729,6 @@ int  run_status_check(u32 dStep)
 		{
 			ecd = &g_equ_config_di[g_sw[sw].di_cfg_index[SW_DI_BHZTT]];
 			prun->bhztt = dido_di_is_on(ecd->slot,ecd->index);
-			//#ifdef GD_AREA_ECZD_2020//2020指导意见使用停用FA及保护
-			#if defined GD_AREA_ECZD_2020
-				prun->bhztt= !prun->bhztt;
-			#endif	
 		}
 
 		if ((short)g_sw[sw].di_cfg_index[SW_DI_BHTT] != INDEX_INVALLID)

+ 3 - 0
dtu/dtu_main_t536/app/samint.c

@@ -117,8 +117,11 @@ int  pit_5ms_main(int dummy)
 	// 可编程逻辑
 	plc_scan(1);
 
+#if !defined CPU_FUXI
 	// 主板直接控制的灯输出
 	led_polling_5ms();
+#endif
+
 	// RTC时钟芯片时间更新,放在5ms中断的最后
 	rtc_time_write_5ms();
 

+ 19 - 3
dtu/dtu_main_t536/app/set.c

@@ -827,9 +827,9 @@ const TSETTABLE tSwSetTable[] = // min 	 max 		     default
     {SETTYPE_LIST,  SET_NULL,   0,      TTListNum - 1,      0,      TTList,     TTListNum,      GROUP_SET_YB_GN,      0x5015, BOOL_R, "不停电传动投入"},
 
     {SETTYPE_LABEL, SET_NULL,   0,      0,                  0,      0,          0,              GROUP_SET_YB_YX,      0x0000, NULL_R, "运行软压板"},
-    {SETTYPE_LIST,  SET_NULL,   0,      TTListNum - 1,      0,      TTList,     TTListNum,      GROUP_SET_YB_YX,      0x5016, BOOL_R, "自动化功能总投退软压板"},
-    {SETTYPE_LIST,  SET_NULL,   0,      TTListNum - 1,      0,      TTList,     TTListNum,      GROUP_SET_YB_YX,      0x5017, BOOL_R, "自动化功能总出口软压板"},
-    {SETTYPE_LIST,  SET_NULL,   0,      TTListNum - 1,      0,      TTList,     TTListNum,      GROUP_SET_YB_YX,      0x5018, BOOL_R, "重合闸软压板"},
+    {SETTYPE_LIST,  SET_NULL,   0,      TTListNum - 1,      1,      TTList,     TTListNum,      GROUP_SET_YB_YX,      0x5016, BOOL_R, "自动化功能总投退软压板"},
+    {SETTYPE_LIST,  SET_NULL,   0,      TTListNum - 1,      1,      TTList,     TTListNum,      GROUP_SET_YB_YX,      0x5017, BOOL_R, "自动化功能总出口软压板"},
+    {SETTYPE_LIST,  SET_NULL,   0,      TTListNum - 1,      1,      TTList,     TTListNum,      GROUP_SET_YB_YX,      0x5018, BOOL_R, "重合闸软压板"},
 #ifdef YK_SOFT_YB
     {SETTYPE_LIST,  SET_NULL,   0,      TTListNum - 1,      0,      TTList,     TTListNum,      GROUP_SET_YB_YX,      0,      BOOL_R, "遥控软压板"},
 #endif
@@ -2355,6 +2355,7 @@ bool MakeRunSet(bool bFirst)
         fIn = (float)(g_ui[ui_begin + SW_AC_IA].m2_factor_k) / 256.0;
         fKI0 = (float)(g_ui[ui_begin + SW_AC_I0].m2_factor_k) / 256.0;
         ptSet->dTBLValue[sw] = GetSetNormal(psetbuf[CSTSET_TBLQD].ff, fIn); // 突变量
+        dp_err_n_c_rt("ptSet->dTBLValue[%d] = %d, %f", i, ptSet->dTBLValue[sw], psetbuf[CSTSET_TBLQD].ff);
         ptSet->dIWL_SQR[sw] = GetSetSQR(psetbuf[CSTSET_IWL].ff, fIn);
 
 #ifndef DISP_CHZOKCHR_2_SW
@@ -3535,6 +3536,21 @@ bool MakeRunSet(bool bFirst)
 
     m_runsection = pRunSet->section;
 
+#if (1)
+    dp_err_n_c_rt("JZS_ALL_EN(0) = %d", JZS_ALL_EN(0));
+    dp_err_n_c_rt("KZ_OUT_ALL_EN(0) = %d", KZ_OUT_ALL_EN(0));
+    dp_err_n_c_rt("FUN_ALL_EN(0) = %d(%d, %d, %d)", FUN_ALL_EN(0), g_run_stu.bhall, pRunSet->tSwSet[0].btt_yxyb_gnztt, g_tRelay[0].run_stu.bhztt);
+    dp_err_n_c_rt("BH_GOOSE_EN_YB(0) = %d", BH_GOOSE_EN_YB(0));
+    dp_err_n_c_rt("BH_GOOSE_EN(0) = %d", BH_GOOSE_EN(0));
+    dp_err_n_c_rt("BH_GOOSE_COMMERR(0) = %d", BH_GOOSE_COMMERR(0));
+    dp_err_n_c_rt("BH_ALL_2(0) = %d", BH_ALL_2(0));
+    dp_err_n_c_rt("BH_ALL_EN(0) = %d", BH_ALL_EN(0));
+    dp_err_n_c_rt("FA_ALL_EN(0) = %d", FA_ALL_EN(0));
+    dp_err_n_c_rt("CHZ_ALL_EN(0) = %d", CHZ_ALL_EN(0));
+    dp_err_n_c_rt("TYTQ_ALL_EN(0) = %d", TYTQ_ALL_EN(0));
+    dp_err_n_c_rt("JL_ALL_EN(0) = %d", JL_ALL_EN(0));
+#endif
+
 #if !defined CPU_FUXI
     create_set_data_txt();
 #endif

+ 2 - 0
dtu/dtu_main_t536/app/switch.c

@@ -785,6 +785,7 @@ int sw_init(void)
 
                 g_led_slot[slot].sn[index].sw = 0;
                 g_led_slot[slot].sn[index].no = type - PUB_DO_NUM;
+                g_led_slot[slot].sn[index].time = g_equ_config_do[i].time_pulse;
 
                 index++;
                 if (index > g_led_slot[slot].num)
@@ -815,6 +816,7 @@ int sw_init(void)
 
                 g_led_slot[slot].sn[index].sw = sw + 1;
                 g_led_slot[slot].sn[index].no = type - SW_DO_NUM;
+                g_led_slot[slot].sn[index].time = g_equ_config_do[i].time_pulse;
 
                 index++;
                 if (index > g_led_slot[slot].num)