void isotp_receive_can_frame(const uint16_t arbitration_id, const uint8_t* data,
        const uint8_t length) {
    //match with any request we made
    //handle flow control if necessary
    //call callback if message completed
}

bool isotp_send(const uint8_t* payload, uint16_t payload_size) {
     // we determine if it's single/multi frame and start the send
}

void isotp_set_timeout(uint16_t timeout) {
}