hardbyte / python-can

The can package provides controller area network support for Python developers
https://python-can.readthedocs.io
GNU Lesser General Public License v3.0
1.31k stars 604 forks source link

Tx messages can not be received with AsyncBufferedReader() #1769

Open EllaJia opened 7 months ago

EllaJia commented 7 months ago

Python 3.11.3 python-can 4.3.1

The program is to talk to an amplifier and log both the Tx and Rx messages asynchronously. In a word to explain how things work on the hardware side, the Amplifier sends Rx messages periodically, and receives Tx messages I send.

The documentation said can.AsyncBufferedReader() is able to catch both Tx and Rx messages, so I adapted the example as the following.

async def main() -> None:
    logger = can.Logger("logfile.asc")

    with can.Bus(auto_reset=True) as bus:
        reader = can.AsyncBufferedReader()

        listeners: List[MessageRecipient] = [
            print_and_log_message, 
            reader,
            logger
        ]

        loop = asyncio.get_running_loop()
        notifier = can.Notifier(bus, listeners, loop=loop)

        msg = can.Message(arbitration_id=0x106, data=[0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], dlc=8, is_extended_id=False, is_rx=False, is_error_frame=False)

        send_task = bus.send_periodic(msg, 0.1, 5)

        await asyncio.sleep(5)

        if isinstance(send_task, can.CyclicSendTaskABC):
            send_task.stop()

        notifier.stop()
        bus.shutdown()

With this code snippet, the log file gets Rx messages only, even the Tx messages I sent out actually works (based on the Rx messages I see, some parameters are updated as what I want). Is it something with my code or the function? Any thoughts and advice will be deeply appreciated!