|
|
@@ -30,23 +30,17 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
string errormsg = string.Empty;
|
|
|
|
|
|
//Todo:Dll 에서 상태 가져오기
|
|
|
- //bool IsConnected = false;
|
|
|
+ bool isConnected = false;
|
|
|
public bool IsConnected
|
|
|
{
|
|
|
- get
|
|
|
+ get => this.isConnected;
|
|
|
+ set
|
|
|
{
|
|
|
- var state = new AdvCan.CanStatusPar_t();
|
|
|
- var ret = this.device.acGetStatus( ref state );
|
|
|
- if ( ret == AdvCANIO.SUCCESS )
|
|
|
- {
|
|
|
- //정상 연결일때 값이 12 들어옴.
|
|
|
- if ( state.status == 12/*AdvCan.STATUS_OK*/ )
|
|
|
- return true;
|
|
|
- else
|
|
|
- return false;
|
|
|
- }
|
|
|
+ if ( this.isConnected == value ) return;
|
|
|
+ if ( value )
|
|
|
+ this.manager._OnConnected();
|
|
|
else
|
|
|
- return false;
|
|
|
+ this.manager._OnDisconnected();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -107,6 +101,22 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
this.qqW.Enqueue( o );
|
|
|
}
|
|
|
|
|
|
+ bool GetConnectState()
|
|
|
+ {
|
|
|
+ var state = new AdvCan.CanStatusPar_t();
|
|
|
+ var ret = this.device.acGetStatus( ref state );
|
|
|
+ if ( ret == AdvCANIO.SUCCESS )
|
|
|
+ {
|
|
|
+ //정상 연결일때 값이 12 들어옴.
|
|
|
+ if ( state.status == 12/*AdvCan.STATUS_OK*/ )
|
|
|
+ return true;
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
void TryToConnect( )
|
|
|
{
|
|
|
//var a = AdvCANIO.OPERATION_ERROR; == -1
|
|
|
@@ -120,14 +130,12 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
if(ret < 0)
|
|
|
{
|
|
|
throw new Exception( "AdvCAN Open Error" );
|
|
|
- return;
|
|
|
}
|
|
|
|
|
|
ret = this.device.acEnterResetMode();
|
|
|
if ( ret < 0 )
|
|
|
{
|
|
|
throw new Exception( "AdvCAN Reset Error" );
|
|
|
- return;
|
|
|
}
|
|
|
|
|
|
//ret = this.device.acSetAcceptanceFilterMode( AdvCan.PELICAN_SINGLE_FILTER );
|
|
|
@@ -141,52 +149,45 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
if ( ret < 0 )
|
|
|
{
|
|
|
throw new Exception( "AdvCAN BaudRate Set Error" );
|
|
|
- return;
|
|
|
}
|
|
|
|
|
|
ret = this.device.acSetAcceptanceFilterMask( Convert.ToUInt32( "FFFFFFFF" , 16 ));
|
|
|
if ( ret < AdvCANIO.SUCCESS )
|
|
|
{
|
|
|
throw new Exception( "AdvCAN AcceptFilterMask Set Error " );
|
|
|
- return;
|
|
|
}
|
|
|
|
|
|
ret = this.device.acSetAcceptanceFilterCode( Convert.ToUInt32( "FFFFFFFF" , 16 ) );
|
|
|
if ( ret < AdvCANIO.SUCCESS )
|
|
|
{
|
|
|
throw new Exception( "AdvCAN AcceptFilterCode Set Error " );
|
|
|
- return;
|
|
|
}
|
|
|
|
|
|
ret = this.device.acSetTimeOut( 2000 , 2000 );
|
|
|
if(ret < AdvCANIO.SUCCESS)
|
|
|
{
|
|
|
throw new Exception( "AdvCAN TimeOut Set Error " );
|
|
|
- return;
|
|
|
}
|
|
|
|
|
|
ret = this.device.acSetSelfReception(false);
|
|
|
if(ret < AdvCANIO.SUCCESS)
|
|
|
{
|
|
|
throw new Exception( "AdvCAN SelfReception Set Error" );
|
|
|
- return;
|
|
|
}
|
|
|
|
|
|
ret = this.device.acEnterWorkMode();
|
|
|
if(ret < AdvCANIO.SUCCESS)
|
|
|
{
|
|
|
throw new Exception( "AdvCAN EnterWorkMode Error" );
|
|
|
- return;
|
|
|
}
|
|
|
|
|
|
//this.IsConnected = true;
|
|
|
if ( this.Write( eSendMode.MANUAL ) <= 0 )
|
|
|
{
|
|
|
throw new Exception( "AdvCan Write Error" );
|
|
|
- return;
|
|
|
}
|
|
|
else
|
|
|
- manager._OnConnected();
|
|
|
+ this.IsConnected = this.GetConnectState();
|
|
|
}
|
|
|
|
|
|
public void _ThreadPoolingReceiveData( )
|
|
|
@@ -437,8 +438,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
|
|
|
var ret = this.device.acCanClose();
|
|
|
|
|
|
//logger.E( $"[Battery Advantech] - {e.Message} -" );
|
|
|
-
|
|
|
- this.manager._OnDisconnected();
|
|
|
+ this.IsConnected = false;
|
|
|
}
|
|
|
|
|
|
bool GetStatus( )
|