Skip to content

Commit 7e18a24

Browse files
committed
- added the "CANdoRequestDateStatus" and "CANdoRequestBusLoadStatus" functions
1 parent 72bd3e1 commit 7e18a24

2 files changed

Lines changed: 48 additions & 8 deletions

File tree

src/can_cando/CANdo.py

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212

1313
from can_cando.CANdoImport import (
1414
CAN_MSG_TIMESTAMP_RESOLUTION,
15+
CANDO_BUS_LOAD_STATUS,
1516
CANDO_CAN_BUFFER_LENGTH,
17+
CANDO_DATE_STATUS,
1618
CANDO_DEVICE_STATUS,
1719
CANDO_ID_11_BIT,
1820
CANDO_ID_29_BIT,
@@ -38,12 +40,12 @@
3840
CANdoInitializationError,
3941
CANdoMode,
4042
CANdoOpenDevice,
41-
# CANdoRequestBusLoadStatus,
42-
# CANdoRequestDateStatus,
4343
CANdoOperationError,
4444
CANdoPIDType,
4545
CANdoReceive,
4646
CANdoRepeatTime,
47+
CANdoRequestBusLoadStatus,
48+
CANdoRequestDateStatus,
4749
CANdoRequestStatus,
4850
CANdoSetBaudRate,
4951
CANdoSetFilters,
@@ -175,7 +177,7 @@ def __init__(
175177
f"Driver = v{DriverVersion.value / 10}\n"
176178
)
177179

178-
self.devices_PIDs: list[bytes] = []
180+
self.devices_PIDs: List[bytes] = []
179181
self._detect_cando_iso()
180182

181183
if channel is None:
@@ -496,18 +498,36 @@ def cando_request_status(self) -> None:
496498
detected on the CAN bus, or if there is an internal system error within the
497499
CANdo device.)
498500
"""
501+
# TODO: Use "CANdoRequestStatus" function
499502

500-
def cando_get_date_status(self) -> None:
503+
def cando_get_date_status(self) -> Optional[Tuple[int, int, int]]:
501504
"""Request the date of manufacture of the CANdo device.
502505
503506
After sending this command to CANdo, the date status is transmitted back to
504507
the PC in <1ms. To read the status, call the CANdoReceive(...) function &
505508
interrogate the NewFlag & status information within the TCANdoStatus
506509
parameter.
510+
511+
:return: Tuple containing the manufacturing date as (day, month, year).
507512
"""
508-
# TODO: Use "CANdoRequestDateStatus" function
513+
ret = None
514+
with self._recv_lock: # Ensure that the receiving thread does not interfere
515+
if CANdoRequestDateStatus(self.CANdoUSBPtr) == CANdoFuncRetCode.CANDO_SUCCESS:
516+
sleep(0.001)
517+
self.CANdoStatus.NewFlag = CANDO_NO_STATUS # Clear status flag
518+
if (
519+
CANdoReceive(
520+
self.CANdoUSBPtr,
521+
self.CANdoCANBufferPtr,
522+
self.CANdoStatusPtr,
523+
)
524+
== CANdoFuncRetCode.CANDO_SUCCESS
525+
) and self.CANdoStatus.NewFlag == CANDO_DATE_STATUS: # type: ignore
526+
ret = (self.CANdoStatus.SoftwareVersion, self.CANdoStatus.Status, self.CANdoStatus.BusState)
527+
528+
return ret
509529

510-
def cando_request_bus_load_status(self) -> None:
530+
def cando_request_bus_load_status(self) -> Optional[Tuple[float, int, int]]:
511531
"""Request the CAN bus loading as calculated by connected device.
512532
513533
The bus load is calculated every second, while the device is running.
@@ -516,8 +536,28 @@ def cando_request_bus_load_status(self) -> None:
516536
back to the PC in <1ms. To read the status, call the CANdoReceive(...)
517537
function & interrogate the NewFlag & status information within the
518538
TCANdoStatus parameter.
539+
540+
:return: Tuple containing bus load percentage, CAN RX error count, CAN TX error count.
519541
"""
520-
# TODO: Use the "CANdoRequestBusLoadStatus" function
542+
ret = None
543+
with self._recv_lock: # Ensure that the receiving thread does not interfere
544+
if CANdoRequestBusLoadStatus(self.CANdoUSBPtr) == CANdoFuncRetCode.CANDO_SUCCESS:
545+
sleep(0.001)
546+
self.CANdoStatus.NewFlag = CANDO_NO_STATUS # Clear status flag
547+
if (
548+
CANdoReceive(
549+
self.CANdoUSBPtr,
550+
self.CANdoCANBufferPtr,
551+
self.CANdoStatusPtr,
552+
)
553+
== CANdoFuncRetCode.CANDO_SUCCESS
554+
) and self.CANdoStatus.NewFlag == CANDO_BUS_LOAD_STATUS: # type: ignore
555+
ret = (
556+
self.CANdoStatus.HardwareVersion + self.CANdoStatus.SoftwareVersion / 10,
557+
self.CANdoStatus.Status,
558+
self.CANdoStatus.BusState,
559+
)
560+
return ret
521561

522562
def get_status_description(self) -> str:
523563
"""Request the CAN bus & internal CANdo status.

src/can_cando/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Module provides the "python-can" plugin interface implementation "CANdoBus" class for interfacing with CANdo(ISO) physical devices."""
22

3-
__version__ = "1.0.6"
3+
__version__ = "1.0.7"
44

55
__all__ = ["__version__", "CANdoBus"]
66

0 commit comments

Comments
 (0)