Технические вопросы и ответы QA1356

Доступный FireWire изохронная пропускная способность

Q: Существует ли способ узнать сумму изохронной пропускной способности, в настоящее время доступной на FireWire?

A: Существует ли способ узнать сумму изохронной пропускной способности, в настоящее время доступной на FireWire?

Да, но эта информация имеет сомнительное значение (см. Протесты, ниже).

Можно найти текущий Isochronous Resource Manager (IRM) для шины FireWire устройство работает, и считайте IRM's BANDWIDTH_AVAILABLE регистр.

Например:

  Пропускная способность avaliable FireWire isoch Чтения перечисления 1

IOReturn
GetBandwidth( IOFireWireLibDeviceRef device, UInt32 * bandwidth )
{
    OSStatus        error ;
    UInt16      irmNodeID ;
    UInt32      generation ;

    // get current bus generation
    error = (**device).GetBusGeneration( device, & generation ) ;

    if ( !error )
    {
        // get ID of IRM
        error = (**device).GetIRMNodeID( device, generation, & irmNodeID ) ;
    }

    if ( !error )
    {
        // build the FireWire address of the BANDWIDTH_AVAILABLE register
        FWAddress address = { irmNodeID,
                              kCSRRegisterSpaceBaseAddressHi, 
                              kCSRBandwidthAvailable } ;

        UInt32 size = sizeof( *bandwidth ) ;

        // read the BANDWIDTH_AVAILABLE register
        error = (**device).Read( device,
                                 0,
                                 address,
                                 bandwidth,
                                 &size,
                                 true,
                                 generation ) ;
    }

    return( error );
}

Протесты

Для сброса шины возможно произойти в любое время. Если GetBandwidth возвраты kIOFireWireBusReset, попытайтесь вызвать его снова.

Если GetBandwidth возвраты kIOReturnSuccess и *bandwidth указывает достаточную пропускную способность в Вашей цели, для Вашего запроса все еще возможно выделить пропускную способность для сбоя. Это вызвано тем, что другое устройство на шине могло выделить некоторых (или все) доступной пропускной способности в любое время.

Другими словами, единственный способ быть уверенным существует достаточно пропускной способности, должен иметь Ваш запрос для выделения пропускной способности, успешно выполняются. Это означает, что Ваша изохронная подпрограмма установки канала должна быть подготовлена иметь дело корректно с ошибкой вследствие недостаточной пропускной способности, даже если вышеупомянутый метод указывает, что достаточно пропускной способности доступно.



История версии документа


ДатаПримечания
07.07.2004

Новый документ, обсуждающий попытку к «предварительному рейсу» изохронный запрос выделения пропускной способности путем чтения в настоящее время доступной пропускной способности.