|
@@ -26,7 +26,7 @@ int dummy;
|
|
|
int devnum = 0;
|
|
int devnum = 0;
|
|
|
int wfd;
|
|
int wfd;
|
|
|
int config_testcycle;
|
|
int config_testcycle;
|
|
|
-int flag;
|
|
|
|
|
|
|
+bool flag = false;
|
|
|
char stopmagic = 'V';
|
|
char stopmagic = 'V';
|
|
|
|
|
|
|
|
|
|
|
|
@@ -88,13 +88,22 @@ ErrorCodeEnum WatchDogClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
|
|
|
|
|
|
|
|
ErrorCodeEnum WatchDogClassImpl::DevOpen()
|
|
ErrorCodeEnum WatchDogClassImpl::DevOpen()
|
|
|
{
|
|
{
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
wfd = open(WATCHDOG0, O_RDWR);
|
|
wfd = open(WATCHDOG0, O_RDWR);
|
|
|
if (wfd == -1)
|
|
if (wfd == -1)
|
|
|
{
|
|
{
|
|
|
printf("Unable to open %s \n", WATCHDOG0);
|
|
printf("Unable to open %s \n", WATCHDOG0);
|
|
|
return Error_DevConnFailed;
|
|
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;
|
|
return Error_Succeed;
|
|
|
|
|
|
|
|
}
|
|
}
|
|
@@ -102,6 +111,21 @@ ErrorCodeEnum WatchDogClassImpl::DevOpen()
|
|
|
ErrorCodeEnum WatchDogClassImpl::StartWatch(DWORD dwDelay, DWORD dwTimeout)
|
|
ErrorCodeEnum WatchDogClassImpl::StartWatch(DWORD dwDelay, DWORD dwTimeout)
|
|
|
{
|
|
{
|
|
|
LOG4VTM(INFO,"enter : StartWatch");
|
|
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;
|
|
config_timeout = dwTimeout;
|
|
|
if (ioctl(wfd, WDIOC_SETTIMEOUT, &config_timeout) == -1)
|
|
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");
|
|
printf("Watchdog magic stop write error \n");
|
|
|
}
|
|
}
|
|
|
close(wfd);
|
|
close(wfd);
|
|
|
|
|
+ flag = false;
|
|
|
return Error_DevConnFailed;
|
|
return Error_DevConnFailed;
|
|
|
}
|
|
}
|
|
|
LOG4VTM(INFO,"leave : StartWatch");
|
|
LOG4VTM(INFO,"leave : StartWatch");
|
|
@@ -121,6 +146,20 @@ ErrorCodeEnum WatchDogClassImpl::StartWatch(DWORD dwDelay, DWORD dwTimeout)
|
|
|
|
|
|
|
|
ErrorCodeEnum WatchDogClassImpl::StopWatch()
|
|
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");
|
|
LOG4VTM(INFO,"enter : StopWatch");
|
|
|
if (write(wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic))
|
|
if (write(wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic))
|
|
|
{
|
|
{
|
|
@@ -128,6 +167,7 @@ ErrorCodeEnum WatchDogClassImpl::StopWatch()
|
|
|
return Error_DevConnFailed;
|
|
return Error_DevConnFailed;
|
|
|
}
|
|
}
|
|
|
close(wfd);
|
|
close(wfd);
|
|
|
|
|
+ flag = false;
|
|
|
LOG4VTM(INFO,"leave : StopWatch");
|
|
LOG4VTM(INFO,"leave : StopWatch");
|
|
|
return Error_Succeed;
|
|
return Error_Succeed;
|
|
|
|
|
|
|
@@ -137,6 +177,21 @@ ErrorCodeEnum WatchDogClassImpl::StopWatch()
|
|
|
ErrorCodeEnum WatchDogClassImpl::RefreshDog()
|
|
ErrorCodeEnum WatchDogClassImpl::RefreshDog()
|
|
|
{
|
|
{
|
|
|
LOG4VTM(INFO,"enter : 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)
|
|
if (ioctl(wfd, WDIOC_KEEPALIVE, &dummy) == -1)
|
|
|
{
|
|
{
|
|
|
printf("Watchdog keeplive ioctl error %s\n", strerror(errno));
|
|
printf("Watchdog keeplive ioctl error %s\n", strerror(errno));
|
|
@@ -145,6 +200,7 @@ ErrorCodeEnum WatchDogClassImpl::RefreshDog()
|
|
|
printf("Watchdog magic stop write error \n");
|
|
printf("Watchdog magic stop write error \n");
|
|
|
}
|
|
}
|
|
|
close(wfd);
|
|
close(wfd);
|
|
|
|
|
+ flag = false;
|
|
|
return Error_DevConnFailed;
|
|
return Error_DevConnFailed;
|
|
|
}
|
|
}
|
|
|
LOG4VTM(INFO,"leave : RefreshDog");
|
|
LOG4VTM(INFO,"leave : RefreshDog");
|
|
@@ -156,14 +212,28 @@ ErrorCodeEnum WatchDogClassImpl::RefreshDog()
|
|
|
|
|
|
|
|
ErrorCodeEnum WatchDogClassImpl::Reset()
|
|
ErrorCodeEnum WatchDogClassImpl::Reset()
|
|
|
{
|
|
{
|
|
|
-
|
|
|
|
|
LOG4VTM(INFO,"enter : 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))
|
|
if (write(wfd, &stopmagic, sizeof(stopmagic)) != sizeof(stopmagic))
|
|
|
{
|
|
{
|
|
|
printf("Watchdog magic stop write error \n");
|
|
printf("Watchdog magic stop write error \n");
|
|
|
return Error_DevConnFailed;
|
|
return Error_DevConnFailed;
|
|
|
}
|
|
}
|
|
|
close(wfd);
|
|
close(wfd);
|
|
|
|
|
+ flag = false;
|
|
|
LOG4VTM(INFO,"leave : Reset");
|
|
LOG4VTM(INFO,"leave : Reset");
|
|
|
|
|
|
|
|
ErrorCodeEnum err = Error_Succeed;
|
|
ErrorCodeEnum err = Error_Succeed;
|