SerialIO::SerialIO( SerialPort::Port port_id,
                    uint8_t update_rate_hz,
                    bool processed_data,
                    IIOCompleteNotification *notify_sink,
                    IBoardCapabilities *board_capabilities ) {
    this->serial_port_id = port_id;
    is_usb = ((port_id != SerialPort::Port::kMXP) &&
    		  (port_id != SerialPort::Port::kOnboard));
    ypr_update_data = {0};
    gyro_update_data = {0};
    ahrs_update_data = {};
    ahrspos_update_data = {};
    ahrspos_ts_update_data = {};
    board_id = {0};
    board_state = {0};
    this->notify_sink = notify_sink;
    this->board_capabilities = board_capabilities;
    serial_port = 0;
    serial_port = GetMaybeCreateSerialPort();
    this->update_rate_hz = update_rate_hz;
    if ( processed_data ) {
        update_type = MSGID_AHRSPOS_TS_UPDATE;
    } else {
        update_type = MSGID_GYRO_UPDATE;
    }
    signal_transmit_integration_control = false;
    signal_retransmit_stream_config = false;
    stop = true;
    byte_count = 0;
    update_count = 0;
    last_valid_packet_time = 0;
}
SerialPort *SerialIO::ResetSerialPort()
{
    if (serial_port != 0) {
        try {
            delete serial_port;
        } catch (std::exception  ex) {
            // This has been seen to happen before....
        }
        serial_port = 0;
    }
    serial_port = GetMaybeCreateSerialPort();
    return serial_port;
}
SerialIO::SerialIO( SerialPort::Port port_id,
                    uint8_t update_rate_hz,
                    bool processed_data,
                    IIOCompleteNotification *notify_sink,
                    IBoardCapabilities *board_capabilities ) {
    this->serial_port_id = port_id;
    ypr_update_data = {0};
    gyro_update_data = {0};
    ahrs_update_data = {0};;
    ahrspos_update_data = {0};
    board_id = {0};
    board_state = {0};
    this->notify_sink = notify_sink;
    this->board_capabilities = board_capabilities;
    serial_port = GetMaybeCreateSerialPort();
    this->update_rate_hz = update_rate_hz;
    if ( processed_data ) {
        update_type = MSGID_AHRSPOS_UPDATE;
    } else {
        update_type = MSGID_GYRO_UPDATE;
    }
}