Kaynağa Gözat

UPS 的声光报警bug,以及radius 部分代码

liyi 9 ay önce
ebeveyn
işleme
8a0f4bd151
6 değiştirilmiş dosya ile 184 ekleme ve 3 silme
  1. 1 0
      pro/CMakeLists.txt
  2. 1 0
      pro/src/common.h
  3. 26 0
      pro/src/paras.c
  4. 127 0
      pro/src/radius.c
  5. 26 0
      pro/src/radius.h
  6. 3 3
      pro/ui/beep.c

+ 1 - 0
pro/CMakeLists.txt

@@ -124,6 +124,7 @@ set(PDU_SRC_LIST
 	${PROJECT_SOURCE_DIR}/src/breaker_detection.c
 	${PROJECT_SOURCE_DIR}/src/cascade_slave_tcp.c
 	${PROJECT_SOURCE_DIR}/src/broadcast.c
+	${PROJECT_SOURCE_DIR}/src/radius.c
 	)
 
 set(NO_WARNNING_FLAGS "-Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable")

+ 1 - 0
pro/src/common.h

@@ -410,6 +410,7 @@ typedef struct {
     uint32_t    interval;                   //led beep 时间间隔
     uint32_t    duption;                    //led beep 持续时间
     int         rotate;
+    int         radius;
 }MiscInfo_t;
 
 // 4G网络及GPS信息

+ 26 - 0
pro/src/paras.c

@@ -875,6 +875,11 @@ static int proc_misc(dictionary *dic, int op, MiscInfo_t *misc)
             LOGE("___ check misc, rotate is invalid, correct value is 0/90/180/270\n");
             r = -1; 
         }
+        if(misc->radius < 0 || misc->radius >= 2)
+        {
+            LOGE("___ check misc, radis is invalid, correct value is 0/90/180/270\n");
+            r = -1;             
+        }
     }
     else if (op==PARAS_CREATE) {
 
@@ -1020,6 +1025,26 @@ static int proc_misc(dictionary *dic, int op, MiscInfo_t *misc)
         }
     }
 
+    token = "misc:radius";
+    if(op==PARAS_READ) {
+        r = iniparser_getint(dic, token, -1);
+        if(r==-1) {
+            LOGE("___ iniparser_getint %s failed\n", token);
+            return -1;
+        } else {
+            misc->radius = r;
+        }
+    }
+    else {
+        sprintf(temp, "%d", misc->radius);
+        r = iniparser_set(dic, token, temp);
+        if(r) {
+            LOGE("___ iniparser_set %s failed\n", token);
+            return -1;
+        }
+    }
+
+
     r = 0;
     if(op==PARAS_READ) {
         r = proc_misc(dic, PARAS_CHECK, misc);
@@ -3915,6 +3940,7 @@ static int ini_reset(paras_handle_t *h)
     fprintf(fp, "interval      = \"%d\"\n", info->misc.interval);
     fprintf(fp, "duption     = \"%d\"\n", info->misc.duption);
     fprintf(fp, "rotate      = \"%d\"\n", info->misc.rotate);
+    fprintf(fp, "radius      = \"%d\"\n", info->misc.radius);
     fprintf(fp, "\n");
 
     fprintf(fp, "[cellular]\n");

+ 127 - 0
pro/src/radius.c

@@ -0,0 +1,127 @@
+#include "radius.h"
+#include "paras.h"
+#include "common.h"
+#include "file.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include "elog.h"
+
+
+
+enum{
+    FILE_OK = 0,                //文件存在并且有内容
+    FILE_NO_CONTENT,            //文件存在没有内容
+    FILE_NO_EXSIT               //文件不存在
+};
+
+#if 1
+    #define LOGE  log_e
+    #define LOGW  log_w
+    #define LOGD  log_d
+#else
+    #define LOGD  printf
+    #define LOGW  printf
+    #define LOGE  printf
+#endif
+
+
+#define RADIUS_CONF      "/etc/eth0_radius.conf"
+
+
+static inline MiscInfo_t* get_misc(void)
+{
+    return &__globalDeviceManage._globalDevInfo.misc;
+}
+
+
+
+static  radius_config_t  radius={
+    .ap_scan=0,
+    .key_mgmt="IEEE8021X",
+    .eap="PEAP",
+    .user="admin",
+    .password="XXXXXXXXX",
+    .peaplable=0,
+    .auth="MSCHAPV2",
+};
+
+static int check_file(const char * path)
+{
+    struct stat sta;
+    int fd = stat(path,&sta);
+    if(fd < 0)
+    {
+        return FILE_NO_EXSIT;
+    }
+    if(sta.st_size == 0)
+    {
+        return FILE_NO_CONTENT;
+    }
+    return FILE_OK;
+}
+
+
+
+static void radius_get_config(char *buff,radius_config_t *radius)
+{
+    
+    
+    
+
+
+
+}
+
+#define CONFIG_FILE  "ctrl_interface=/var/run/wpa_supplicant\n"\
+                     "ap_scan=%d\n"\
+                     "update_config=1\n"\
+                     "eapol_version=1\n"\
+                     "network={\n"\
+                     "        ssid=\"T113-i\"\n"\
+                     "        key_mgmt=%s\n"\
+                     "        eap=%s\n"\
+                     "        identity=\"%s\"\n"\
+                     "        password=\"%s\"\n"\
+                     "        phase1=\"peaplabel=%d\"\n"\
+                     "        phase2=\"auth=%s\"\n"\
+                     "}\n"
+
+
+int radius_init()
+{
+    MiscInfo_t *misc=get_misc();
+
+    //检查文件
+    int fd = 0;
+    char temp[1024] = {0};
+    int ret = check_file(RADIUS_CONF);
+    if(FILE_OK != ret)
+    {
+        sprintf(temp,CONFIG_FILE,radius.ap_scan,
+                radius.key_mgmt,radius.eap,radius.user,radius.password,radius.peaplable,radius.auth);
+        fd = open(RADIUS_CONF,O_CREAT|O_TRUNC|O_RDWR,0777);
+        if(fd < 0)
+        {
+            LOGE("radius create conf failed!!\n");
+            goto failed;
+        }
+        int size = write(fd,temp,strlen(temp));
+        close (fd);
+        sync();
+
+    }
+    if(misc->radius == 0)
+    {
+        LOGD("radius status is close!!\n");
+        goto failed;
+    }
+    fd = open(RADIUS_CONF,O_RDONLY,0777);
+
+
+
+    return 0;
+
+failed:
+    return -1;
+}

+ 26 - 0
pro/src/radius.h

@@ -0,0 +1,26 @@
+#ifndef _RADIUS_H
+#define _RADIUS_H
+
+#include "stdint.h"
+
+
+
+
+typedef struct
+{
+    int  ap_scan;
+    char key_mgmt[64];
+    char eap[64];
+    char user[64];
+    char password[64];
+    int  peaplable;
+    char auth[64];
+}radius_config_t;
+
+
+int radius_init();
+int radius_deinit();
+
+int radus_config(radius_config_t* cfg);
+
+#endif // !_RADIUS_H

+ 3 - 3
pro/ui/beep.c

@@ -97,9 +97,9 @@ int beep_init(void)
     beep_para[BEEP_MODE_WARN1].on_ms =   misc->interval;
     beep_para[BEEP_MODE_WARN1].times = misc->interval > 0 ? (misc->duption * 1000) / (misc->interval * 2) : 0;
 
-    beep_para[BEEP_MODE_WARN1].off_ms =  misc->interval;
-    beep_para[BEEP_MODE_WARN1].on_ms =  misc->interval;
-    beep_para[BEEP_MODE_WARN1].times = misc->interval > 0 ? (misc->duption * 1000) / (misc->interval * 2) : 0;
+    beep_para[BEEP_MODE_WARN2].off_ms =  misc->interval;
+    beep_para[BEEP_MODE_WARN2].on_ms =  misc->interval;
+    beep_para[BEEP_MODE_WARN2].times = misc->interval > 0 ? (misc->duption * 1000) / (misc->interval * 2) : 0;
     return 0;
 }