Skip to content

Set and Get IBI event

User can get IBI event by a self-defined event function.

For instance,

import time
from aqpxlib import AqProtocolExerciser
from aqpxlib.i3c import (
    ACUTE_DEFAULT_PID,
    PxI3CBus,
    PxI3CBaseController,
    PxI3C32BitRegisterTarget,
)
from aqpxlib.exceptions import PxAPIError


with AqProtocolExerciser.connect(host="localhost", port=60600) as exerciser_session:
    exerciser_session.set_handles([]) # reset all handles
    i3c_bus = PxI3CBus(exerciser_session, scl=0, sda=1)

    i3c_controller = PxI3CBaseController(exerciser_session)
    i3c_controller.attach_to_bus(i3c_bus)

    i3c_target = PxI3C32BitRegisterTarget(exerciser_session, static_addr=0x12, bcr=0x06)
    i3c_target.attach_to_bus(i3c_bus)

    i3c_controller.init_bus()

    def event_handler(event):
        print(event)

    i3c_controller.add_event_handler("i3_c_controller_recv_ibi_data", event_handler)

    # target send IBI
    i3c_target.ibi_request(
        mdb_value=b"\xAA",
        additional_data=b"\x10\x30\x50"
    )
    time.sleep(1) # Wait for the IBI request to be received and printed