Эх сурвалжийг харах

#IQRV #comment [DevAdapter] grg/2021.0325.01

gifur 4 жил өмнө
parent
commit
13aac57a21

+ 1 - 1
DevAdapter/CMakeLists.txt

@@ -141,7 +141,7 @@ message(STATUS "vendor log library: ${VENDOR_LOG_LIB_NAME}")
 if(DEVADAPTER_USING_CONAN)
     set(KEBA_CONAN_LIB_NAME keba/2021.0312.01@LR04.02_VendorLib/testing)
 	set(NANTIAN_CONAN_LIB_NAME nantian/2021.0310.01@LR04.02_VendorLib/testing)
-	set(GRG_CONAN_LIB_NAME grg/2021.0317.01@LR04.02_VendorLib/testing)
+	set(GRG_CONAN_LIB_NAME grg/2021.0325.01@LR04.02_VendorLib/testing)
 	set(CW_CONAN_LIB_NAME cw/2021.0317.01@LR04.02_VendorLib/testing)
     set(GWI_CONAN_LIB_NAME gwi/2021.0312.01@LR04.02_VendorLib/testing)
 endif(DEVADAPTER_USING_CONAN)

+ 74 - 4
DevAdapter/grg/watchdog.1.1/watchdog_impl.cpp

@@ -26,7 +26,7 @@ int dummy;
 int devnum = 0;
 int wfd;
 int config_testcycle;
-int flag;
+bool flag = false;
 char stopmagic = 'V';
 
 
@@ -88,13 +88,22 @@ ErrorCodeEnum WatchDogClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
 
 ErrorCodeEnum WatchDogClassImpl::DevOpen()
 {
-
+	
 	wfd = open(WATCHDOG0, O_RDWR);
 	if (wfd == -1) 
 	{
 		printf("Unable to open %s \n", WATCHDOG0);
 		return Error_DevConnFailed;
-	}  
+	}
+	LOG4VTM(INFO,"Close");
+	if (write(wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic)) 
+	{
+		printf("Watchdog magic stop write error \n");
+		return Error_DevConnFailed;
+	}
+
+	
+	close(wfd);
 	return Error_Succeed;
 
 }
@@ -102,6 +111,21 @@ ErrorCodeEnum WatchDogClassImpl::DevOpen()
 ErrorCodeEnum WatchDogClassImpl::StartWatch(DWORD dwDelay, DWORD dwTimeout)
 {
 	LOG4VTM(INFO,"enter : StartWatch");
+	//判断此时是否已经打开了看门狗
+	if (!flag)
+	{
+		wfd = open(WATCHDOG0, O_RDWR);
+		if (wfd == -1) 
+		{
+			printf("Unable to open %s \n", WATCHDOG0);
+			return Error_DevConnFailed;
+		}else
+		{
+			flag = true;
+		}
+	}
+	
+
 	config_timeout = dwTimeout;
 	if (ioctl(wfd, WDIOC_SETTIMEOUT, &config_timeout) == -1)
 	{
@@ -111,6 +135,7 @@ ErrorCodeEnum WatchDogClassImpl::StartWatch(DWORD dwDelay, DWORD dwTimeout)
 			printf("Watchdog magic stop write error \n");
 		}
 		close(wfd);
+		flag = false;
 		return Error_DevConnFailed;
 	}
 	LOG4VTM(INFO,"leave : StartWatch");
@@ -121,6 +146,20 @@ ErrorCodeEnum WatchDogClassImpl::StartWatch(DWORD dwDelay, DWORD dwTimeout)
 
 ErrorCodeEnum WatchDogClassImpl::StopWatch()
 {
+	LOG4VTM(INFO,"Open");
+	if (!flag)
+	{
+		wfd = open(WATCHDOG0, O_RDWR);
+		if (wfd == -1) 
+		{
+			printf("Unable to open %s \n", WATCHDOG0);
+			return Error_DevConnFailed;
+		}else
+		{
+			flag = true;
+		}
+	}
+	
 	LOG4VTM(INFO,"enter : StopWatch");
 	if (write(wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic)) 
 	{
@@ -128,6 +167,7 @@ ErrorCodeEnum WatchDogClassImpl::StopWatch()
 		return Error_DevConnFailed;
 	}
 	close(wfd);
+	flag = false;
 	LOG4VTM(INFO,"leave : StopWatch");
 	return Error_Succeed;
 
@@ -137,6 +177,21 @@ ErrorCodeEnum WatchDogClassImpl::StopWatch()
 ErrorCodeEnum WatchDogClassImpl::RefreshDog()
 {
 	LOG4VTM(INFO,"enter : RefreshDog");
+
+	if (!flag)
+	{
+		wfd = open(WATCHDOG0, O_RDWR);
+		if (wfd == -1) 
+		{
+			printf("Unable to open %s \n", WATCHDOG0);
+			return Error_DevConnFailed;
+		}else
+		{
+			flag = true;
+		}
+	}
+	
+
 	if (ioctl(wfd, WDIOC_KEEPALIVE, &dummy) == -1) 
 	{
 		printf("Watchdog keeplive ioctl error %s\n", strerror(errno));
@@ -145,6 +200,7 @@ ErrorCodeEnum WatchDogClassImpl::RefreshDog()
 			printf("Watchdog magic stop write error \n");
 		}
 		close(wfd);
+		flag = false;
 		return Error_DevConnFailed;
 	}
 	LOG4VTM(INFO,"leave : RefreshDog");
@@ -156,14 +212,28 @@ ErrorCodeEnum WatchDogClassImpl::RefreshDog()
 
 ErrorCodeEnum WatchDogClassImpl::Reset()
 {
-	
 	LOG4VTM(INFO,"enter : Reset");
+	if (!flag)
+	{
+		wfd = open(WATCHDOG0, O_RDWR);
+		if (wfd == -1) 
+		{
+			printf("Unable to open %s \n", WATCHDOG0);
+			return Error_DevConnFailed;
+		}else
+		{
+			flag = true;
+		}
+	}
+
+
 	if (write(wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic)) 
 	{
 		printf("Watchdog magic stop write error \n");
 		return Error_DevConnFailed;
 	}
 	close(wfd);
+	flag = false;
 	LOG4VTM(INFO,"leave : Reset");
 	
 	ErrorCodeEnum err = Error_Succeed;