Index: /trunk/libfreebob/src/configrom.cpp =================================================================== --- /trunk/libfreebob/src/configrom.cpp (revision 365) +++ /trunk/libfreebob/src/configrom.cpp (revision 368) @@ -505,27 +505,27 @@ { bool result; - result = ser.write( path + "/m_nodeId", m_nodeId ); - result &= ser.write( path + "/m_avcDevice", m_avcDevice ); - result &= ser.write( path + "/m_guid", m_guid ); - result &= ser.write( path + "/m_vendorName", Glib::ustring( m_vendorName ) ); - result &= ser.write( path + "/m_modelName", Glib::ustring( m_modelName ) ); - result &= ser.write( path + "/m_vendorId", m_vendorId ); - result &= ser.write( path + "/m_modelId", m_modelId ); - result &= ser.write( path + "/m_unit_specifier_id", m_unit_specifier_id ); - result &= ser.write( path + "/m_unit_version", m_unit_version ); - result &= ser.write( path + "/m_isIsoResourceManager", m_isIsoResourceManager ); - result &= ser.write( path + "/m_isCycleMasterCapable", m_isCycleMasterCapable ); - result &= ser.write( path + "/m_isSupportIsoOperations", m_isSupportIsoOperations ); - result &= ser.write( path + "/m_isBusManagerCapable", m_isBusManagerCapable ); - result &= ser.write( path + "/m_cycleClkAcc", m_cycleClkAcc ); - result &= ser.write( path + "/m_maxRec", m_maxRec ); - result &= ser.write( path + "/m_nodeVendorId", m_nodeVendorId ); - result &= ser.write( path + "/m_chipIdHi", m_chipIdHi ); - result &= ser.write( path + "/m_chipIdLow", m_chipIdLow ); + result = ser.write( path + "m_nodeId", m_nodeId ); + result &= ser.write( path + "m_avcDevice", m_avcDevice ); + result &= ser.write( path + "m_guid", m_guid ); + result &= ser.write( path + "m_vendorName", Glib::ustring( m_vendorName ) ); + result &= ser.write( path + "m_modelName", Glib::ustring( m_modelName ) ); + result &= ser.write( path + "m_vendorId", m_vendorId ); + result &= ser.write( path + "m_modelId", m_modelId ); + result &= ser.write( path + "m_unit_specifier_id", m_unit_specifier_id ); + result &= ser.write( path + "m_unit_version", m_unit_version ); + result &= ser.write( path + "m_isIsoResourceManager", m_isIsoResourceManager ); + result &= ser.write( path + "m_isCycleMasterCapable", m_isCycleMasterCapable ); + result &= ser.write( path + "m_isSupportIsoOperations", m_isSupportIsoOperations ); + result &= ser.write( path + "m_isBusManagerCapable", m_isBusManagerCapable ); + result &= ser.write( path + "m_cycleClkAcc", m_cycleClkAcc ); + result &= ser.write( path + "m_maxRec", m_maxRec ); + result &= ser.write( path + "m_nodeVendorId", m_nodeVendorId ); + result &= ser.write( path + "m_chipIdHi", m_chipIdHi ); + result &= ser.write( path + "m_chipIdLow", m_chipIdLow ); return result; } ConfigRom* -ConfigRom::deserialize( Glib::ustring path, Util::IODeserialize& deser ) +ConfigRom::deserialize( Glib::ustring path, Util::IODeserialize& deser, Ieee1394Service& ieee1394Service ) { ConfigRom* pConfigRom = new ConfigRom; @@ -534,23 +534,30 @@ } + pConfigRom->m_1394Service = &ieee1394Service; + bool result; - result = deser.read( path + "/m_nodeId", pConfigRom->m_nodeId ); - result &= deser.read( path + "/m_avcDevice", pConfigRom->m_avcDevice ); - result &= deser.read( path + "/m_guid", pConfigRom->m_guid ); - result &= deser.read( path + "/m_vendorName", pConfigRom->m_vendorName ); - result &= deser.read( path + "/m_modelName", pConfigRom->m_modelName ); - result &= deser.read( path + "/m_vendorId", pConfigRom->m_vendorId ); - result &= deser.read( path + "/m_modelId", pConfigRom->m_modelId ); - result &= deser.read( path + "/m_unit_specifier_id", pConfigRom->m_unit_specifier_id ); - result &= deser.read( path + "/m_unit_version", pConfigRom->m_unit_version ); - result &= deser.read( path + "/m_isIsoResourceManager", pConfigRom->m_isIsoResourceManager ); - result &= deser.read( path + "/m_isCycleMasterCapable", pConfigRom->m_isCycleMasterCapable ); - result &= deser.read( path + "/m_isSupportIsoOperations", pConfigRom->m_isSupportIsoOperations ); - result &= deser.read( path + "/m_isBusManagerCapable", pConfigRom->m_isBusManagerCapable ); - result &= deser.read( path + "/m_cycleClkAcc", pConfigRom->m_cycleClkAcc ); - result &= deser.read( path + "/m_maxRec", pConfigRom->m_maxRec ); - result &= deser.read( path + "/m_nodeVendorId", pConfigRom->m_nodeVendorId ); - result &= deser.read( path + "/m_chipIdHi", pConfigRom->m_chipIdHi ); - result &= deser.read( path + "/m_chipIdLow", pConfigRom->m_chipIdLow ); + result = deser.read( path + "m_nodeId", pConfigRom->m_nodeId ); + result &= deser.read( path + "m_avcDevice", pConfigRom->m_avcDevice ); + result &= deser.read( path + "m_guid", pConfigRom->m_guid ); + result &= deser.read( path + "m_vendorName", pConfigRom->m_vendorName ); + result &= deser.read( path + "m_modelName", pConfigRom->m_modelName ); + result &= deser.read( path + "m_vendorId", pConfigRom->m_vendorId ); + result &= deser.read( path + "m_modelId", pConfigRom->m_modelId ); + result &= deser.read( path + "m_unit_specifier_id", pConfigRom->m_unit_specifier_id ); + result &= deser.read( path + "m_unit_version", pConfigRom->m_unit_version ); + result &= deser.read( path + "m_isIsoResourceManager", pConfigRom->m_isIsoResourceManager ); + result &= deser.read( path + "m_isCycleMasterCapable", pConfigRom->m_isCycleMasterCapable ); + result &= deser.read( path + "m_isSupportIsoOperations", pConfigRom->m_isSupportIsoOperations ); + result &= deser.read( path + "m_isBusManagerCapable", pConfigRom->m_isBusManagerCapable ); + result &= deser.read( path + "m_cycleClkAcc", pConfigRom->m_cycleClkAcc ); + result &= deser.read( path + "m_maxRec", pConfigRom->m_maxRec ); + result &= deser.read( path + "m_nodeVendorId", pConfigRom->m_nodeVendorId ); + result &= deser.read( path + "m_chipIdHi", pConfigRom->m_chipIdHi ); + result &= deser.read( path + "m_chipIdLow", pConfigRom->m_chipIdLow ); + + if ( !result ) { + delete pConfigRom; + return 0; + } return pConfigRom; Index: /trunk/libfreebob/src/configrom.h =================================================================== --- /trunk/libfreebob/src/configrom.h (revision 365) +++ /trunk/libfreebob/src/configrom.h (revision 368) @@ -74,5 +74,7 @@ bool serialize( Glib::ustring path, Util::IOSerialize& ser ); - static ConfigRom* deserialize( Glib::ustring path, Util::IODeserialize& deser ); + static ConfigRom* deserialize( Glib::ustring path, + Util::IODeserialize& deser, + Ieee1394Service& ieee1394Service ); protected: Index: /trunk/libfreebob/src/bebob/bebob_avdevice.cpp =================================================================== --- /trunk/libfreebob/src/bebob/bebob_avdevice.cpp (revision 365) +++ /trunk/libfreebob/src/bebob/bebob_avdevice.cpp (revision 368) @@ -50,5 +50,5 @@ , m_plugManager( verboseLevel ) , m_activeSyncInfo( 0 ) - , m_id(0) + , m_id( 0 ) , m_receiveProcessor ( 0 ) , m_receiveProcessorBandwidth ( -1 ) @@ -61,4 +61,19 @@ } +AvDevice::AvDevice() + : m_pConfigRom( 0 ) + , m_1394Service( 0 ) + , m_nodeId( -1 ) + , m_verboseLevel( 0 ) + , m_plugManager( 0 ) + , m_activeSyncInfo( 0 ) + , m_id( 0 ) + , m_receiveProcessor ( 0 ) + , m_receiveProcessorBandwidth ( -1 ) + , m_transmitProcessor ( 0 ) + , m_transmitProcessorBandwidth ( -1 ) +{ +} + AvDevice::~AvDevice() { @@ -110,5 +125,5 @@ {0x000a92, 0x00010066}, // Presonous FirePOD - {0x000aac, 0x00000003}, // TerraTec Electronic GmbH, Phase 88 FW + {0x000aac, 0x00000003}, // TerraTec Electronic GmbH, Phase 88 FW {0x000aac, 0x00000004}, // TerraTec Electronic GmbH, Phase X24 FW (model version 4) {0x000aac, 0x00000007}, // TerraTec Electronic GmbH, Phase X24 FW (model version 7) @@ -1219,17 +1234,4 @@ AvDevice::serialize( Glib::ustring basePath, Util::IOSerialize& ser ) { - // create base path string - /* - char* buf; - asprintf( &buf, "%08x%08x", - ( unsigned int ) ( m_pConfigRom->getGuid() >> 32 ), - ( unsigned int ) ( m_pConfigRom->getGuid() & 0xffffffff ) ); - std::string avDevicePath = basePath - + m_pConfigRom->getVendorName() + "/" - + m_pConfigRom->getModelName() + "/" - + buf; - free( buf ); - */ - bool result; result = m_pConfigRom->serialize( basePath + "m_pConfigRom/", ser ); @@ -1240,9 +1242,23 @@ AvDevice* AvDevice::deserialize( Glib::ustring basePath, - Ieee1394Service& ieee1394Service, - Util::IODeserialize& deser ) -{ - - return 0; + Util::IODeserialize& deser, + Ieee1394Service& ieee1394Service ) +{ + AvDevice* pDev = new AvDevice; + + if ( pDev ) { + pDev->m_pConfigRom = std::auto_ptr ( + ConfigRom::deserialize( basePath + "m_pConfigRom/", deser, ieee1394Service ) + ); + if ( !pDev->m_pConfigRom.get() ) { + delete pDev; + return 0; + } + + pDev->m_1394Service = &ieee1394Service; + + } + + return pDev; } Index: /trunk/libfreebob/src/bebob/bebob_avdevice.h =================================================================== --- /trunk/libfreebob/src/bebob/bebob_avdevice.h (revision 365) +++ /trunk/libfreebob/src/bebob/bebob_avdevice.h (revision 368) @@ -101,8 +101,10 @@ bool serialize( Glib::ustring basePath, Util::IOSerialize& ser ); static AvDevice* deserialize( Glib::ustring basePath, - Ieee1394Service& ieee1394Service, - Util::IODeserialize& deser ); + Util::IODeserialize& deser, + Ieee1394Service& ieee1394Service ); protected: + AvDevice(); + bool enumerateSubUnits(); Index: /trunk/libfreebob/src/devicemanager.cpp =================================================================== --- /trunk/libfreebob/src/devicemanager.cpp (revision 367) +++ /trunk/libfreebob/src/devicemanager.cpp (revision 368) @@ -427,6 +427,7 @@ pBeBoBDevice = BeBoB::AvDevice::deserialize( "BeBoB/" + strstrm.str() + "/", - *m_1394Service, - deser ); + deser, + *m_1394Service ); + ++i; if ( pBeBoBDevice ) { @@ -440,4 +441,5 @@ pBeBoBDevice->getConfigRom().setNodeId( pConfigRom->getNodeId() ); // m_avDevices.push_back( pBeBoBDevice ); + } }