import cocotb
from cocotb.triggers import Timer, RisingEdge, FallingEdge, ClockCycles, Join, First
from cocotb.clock import Clock

# from cocotbext.i2c import I2cMaster, I2cMemory

# i2c_addr = 0x3C

@cocotb.test()
async def test_i2c_write(dut):
    #initial values
    dut.ovw_send.value = 0
    dut.ovw_reg_addr.value = 0
    dut.ovw_reg_value.value = 0

    # start a clock
    cocotb.start_soon(Clock(dut.clk, 41.66, units="ns").start()) # 24MHz clock input
    # assert a reset for a bit
    dut.rstn.value = 0
    await ClockCycles(dut.clk, 20)
    dut.rstn.value = 1


    await RisingEdge(dut.config_finished)

    # now wait for the I2C stop 
    await FallingEdge(dut.I2C.busy)

    await ClockCycles(dut.clk, 20)


    # try to send something else

    
    dut.ovw_send.value = 1
    dut.ovw_reg_addr.value = 0x0103
    dut.ovw_reg_value.value = 0x01
    await RisingEdge(dut.I2C.busy)
    dut.ovw_send.value = 0
    
    await FallingEdge(dut.I2C.busy)

    await ClockCycles(dut.clk, 20)