########################################################################### # # Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. # # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM IN PART OR IN # WHOLE WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. # # @file override_templates.py # # @author (last) Zoltan Miskolci # @date (last) 08-Jan-2026 # @author (original) Zoltan Miskolci # @date (original) 04-Dec-2025 # ############################################################################ # Module imports from logging import Logger # Project imports from .constants import RESET, NO_RESET from .msg_defs import MsgIds from ..protocols.CAN import DenaliMessage, DenaliChannels from ..utils.checks import check_broadcast_interval_override_ms from ..utils.conversions import integer_to_bytearray def cmd_generic_broadcast_interval_override(*, ms: int, reset: int, msg_id: MsgIds, channel_id: DenaliChannels, module_name: str, logger: Logger, can_interface) -> int: """ Constructs and sends broadcast interval override command Constraints: Must be logged into the corresponding Module. Given interval must be non-zero and a multiple of the general task interval (50 ms). @param ms: integer - interval (in ms) to override with @param reset: integer - 1 to reset a previous override, 0 to override @param msg_id: MsgIds - The override's msg id @param channel_id: DenaliChannels - The override's channel id @param module_name: str - The module's name to put into the debug prints @param logger: str - The logger for printing debug and error messages @param can_interface: The can_interface @return: 1 if successful, zero otherwise """ if not check_broadcast_interval_override_ms(ms): return False reset_byte_array = integer_to_bytearray(reset) ms_byte_array = integer_to_bytearray(ms) payload = reset_byte_array + ms_byte_array return cmd_generic_override( payload = payload, reset = reset, channel_id = channel_id, msg_id = msg_id, entity_name = f'{module_name} broadcast interval', override_text = str(ms) + " ms: ", logger = logger, can_interface = can_interface ) def cmd_generic_override(*, payload: bytearray, reset: int, msg_id: MsgIds, channel_id: DenaliChannels, entity_name: str, override_text: str, logger: Logger, can_interface) -> int: """ Constructs and sends an override command Constraints: Must be logged into the corresponding Module. @param payload: bytearray - the actual payload @param reset: integer - 1 to reset a previous override, 0 to override @param msg_id: MsgIds - The override's msg id @param channel_id: DenaliChannels - The override's channel id @param entity_name: str - The entity's name that will be overriden to put into the debug prints @param override_text: str - The value to be overriden with to put into the debug prints @param logger: str - The logger for printing debug and error messages @param can_interface: The can_interface @return: 1 if successful, zero otherwise """ message = DenaliMessage.build_message(channel_id=channel_id, message_id=msg_id.value, payload=payload) if payload is None: logger.debug(f'Call command: {entity_name}') else: logger.debug(f'Override {entity_name} value') # Send message received_message = can_interface.send(message) # If there is content... if received_message is not None: if payload is None: str_res = f'not called' if reset == RESET else 'Called' logger.debug(f'{entity_name} is {str_res} {str(received_message["message"][DenaliMessage.PAYLOAD_START_INDEX])}') else: str_res = f'its default value' if reset == RESET else override_text logger.debug(f'{entity_name} is overridden to {str_res} {str(received_message["message"][DenaliMessage.PAYLOAD_START_INDEX])}') # response payload is OK or not OK return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: logger.error("Timeout!!!!") return False