Changeset 183
- Timestamp:
- 03/29/06 14:57:53 (17 years ago)
- Files:
-
- trunk/libfreebob/ChangeLog (modified) (1 diff)
- trunk/libfreebob/configure.ac (modified) (1 diff)
- trunk/libfreebob/libfreebob/freebob.h (modified) (2 diffs)
- trunk/libfreebob/src/avdevice.cpp (modified) (9 diffs)
- trunk/libfreebob/src/avdevice.h (modified) (2 diffs)
- trunk/libfreebob/src/avdevicesubunit.cpp (modified) (11 diffs)
- trunk/libfreebob/src/avdevicesubunit.h (modified) (4 diffs)
- trunk/libfreebob/src/avplug.cpp (modified) (16 diffs)
- trunk/libfreebob/src/avplug.h (modified) (4 diffs)
- trunk/libfreebob/src/devicemanager.cpp (modified) (3 diffs)
- trunk/libfreebob/src/devicemanager.h (modified) (1 diff)
- trunk/libfreebob/src/freebob.cpp (modified) (2 diffs)
- trunk/libfreebob/src/libfreebobavc/avc_connect.cpp (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/avc_connect.h (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/avc_definitions.h (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/avc_extended_plug_info.cpp (modified) (5 diffs)
- trunk/libfreebob/src/libfreebobavc/avc_extended_plug_info.h (modified) (4 diffs)
- trunk/libfreebob/src/libfreebobavc/avc_extended_stream_format.cpp (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/avc_extended_stream_format.h (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/avc_extended_subunit_info.cpp (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/avc_extended_subunit_info.h (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/avc_generic.cpp (modified) (4 diffs)
- trunk/libfreebob/src/libfreebobavc/avc_generic.h (modified) (5 diffs)
- trunk/libfreebob/src/libfreebobavc/avc_plug_info.cpp (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/avc_plug_info.h (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/avc_signal_source.cpp (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/avc_signal_source.h (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/avc_subunit_info.cpp (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/avc_subunit_info.h (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/avc_unit_info.cpp (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/avc_unit_info.h (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/ieee1394service.cpp (modified) (2 diffs)
- trunk/libfreebob/src/libfreebobavc/ieee1394service.h (modified) (1 diff)
- trunk/libfreebob/src/libfreebobavc/serialize.cpp (modified) (3 diffs)
- trunk/libfreebob/src/libfreebobavc/serialize.h (modified) (6 diffs)
- trunk/libfreebob/tests/Makefile.am (modified) (1 diff)
- trunk/libfreebob/tests/streaming/Makefile.am (modified) (1 diff)
- trunk/libfreebob/tests/streaming/teststreaming2.c (modified) (1 diff)
- trunk/libfreebob/tests/test-freebob.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libfreebob/ChangeLog
r181 r183 1 2006-03-30 Daniel Wagner <wagi@monom.org> 2 3 * configure.ac: Version bump to 0.6.0 4 5 * src/*: Verbose bool turned int verbose level. 6 7 * src/libfreebobavc/*: Moved fire implementation to 8 base class (AVCCommand). 9 10 * libfreebob/freebob.h: freebob_sleep_after_avc_command 11 workaround added. 12 13 * tests/test-freebob.c: Verbose bool turned into verbose level. 14 Workaround: sleep after avc command added. 15 16 * tests/streaming/Makefile.am (*_SOURCES): Added libavc1394 to LDADD. 17 * tests/Makefile.am (*_SOURCES): Likewise. 18 19 * tests/streaming/teststreaming2.c (fid_in): compiler warning fixed. 20 1 21 2006-03-20 Daniel Wagner <wagi@monom.org> 2 22 trunk/libfreebob/configure.ac
r181 r183 22 22 23 23 m4_define(freebob_major_version, 0) 24 m4_define(freebob_minor_version, 5)25 m4_define(freebob_micro_version, 2)24 m4_define(freebob_minor_version, 6) 25 m4_define(freebob_micro_version, 0) 26 26 27 27 m4_define(freebob_version, freebob_major_version.freebob_minor_version.freebob_micro_version) trunk/libfreebob/libfreebob/freebob.h
r165 r183 113 113 114 114 int 115 freebob_discover_devices( freebob_handle_t freebob_handle, int verbose );115 freebob_discover_devices( freebob_handle_t freebob_handle, int verbose_level ); 116 116 117 117 … … 161 161 freebob_get_version(); 162 162 163 /* various function */ 164 165 /* workaround: wait usec after each AVC command. 166 will disapear as soon bug is fixed */ 167 void freebob_sleep_after_avc_command( int time ); 168 163 169 #ifdef __cplusplus 164 170 } trunk/libfreebob/src/avdevice.cpp
r173 r183 43 43 ConfigRom* configRom, 44 44 int nodeId, 45 bool verbose)45 int verboseLevel ) 46 46 : m_1394Service( ieee1394service ) 47 47 , m_configRom( configRom ) 48 48 , m_nodeId( nodeId ) 49 , m_verbose ( verbose)50 , m_plugManager( verbose )51 { 52 if ( m_verbose ) {49 , m_verboseLevel( verboseLevel ) 50 , m_plugManager( verboseLevel ) 51 { 52 if ( m_verboseLevel ) { 53 53 setDebugLevel( DEBUG_LEVEL_VERBOSE ); 54 54 } … … 127 127 plugInfoCmd.setNodeId( m_nodeId ); 128 128 plugInfoCmd.setCommandType( AVCCommand::eCT_Status ); 129 plugInfoCmd.setVerbose( m_verboseLevel ); 129 130 130 131 if ( !plugInfoCmd.fire() ) { … … 191 192 plugDirection, 192 193 plugId, 193 m_verbose );194 m_verboseLevel ); 194 195 if ( !plug || !plug->discover() ) { 195 196 debugError( "plug discovering failed\n" ); … … 224 225 plugDirection, 225 226 plugId, 226 m_verbose );227 m_verboseLevel ); 227 228 if ( !plug || !plug->discover() ) { 228 229 debugError( "plug discovering failed\n" ); … … 434 435 subUnitInfoCmd.m_page = 0; 435 436 subUnitInfoCmd.setNodeId( m_nodeId ); 437 subUnitInfoCmd.setVerbose( m_verboseLevel ); 436 438 if ( !subUnitInfoCmd.fire() ) { 437 439 debugError( "Subunit info command failed\n" ); … … 453 455 switch( subunit_type ) { 454 456 case AVCCommand::eST_Audio: 455 subunit = new AvDeviceSubunitAudio( *this, subunitId, m_verbose ); 457 subunit = new AvDeviceSubunitAudio( *this, subunitId, 458 m_verboseLevel ); 456 459 if ( !subunit ) { 457 460 debugFatal( "Could not allocate AvDeviceSubunitAudio\n" ); … … 460 463 break; 461 464 case AVCCommand::eST_Music: 462 subunit = new AvDeviceSubunitMusic( *this, subunitId, m_verbose ); 465 subunit = new AvDeviceSubunitMusic( *this, subunitId, 466 m_verboseLevel ); 463 467 if ( !subunit ) { 464 468 debugFatal( "Could not allocate AvDeviceSubunitMusic\n" ); … … 686 690 extStreamFormatCmd.setIndexInStreamFormat( i ); 687 691 extStreamFormatCmd.setCommandType( AVCCommand::eCT_Status ); 692 extStreamFormatCmd.setVerbose( m_verboseLevel ); 688 693 689 694 cmdSuccess = extStreamFormatCmd.fire(); … … 742 747 ExtendedStreamFormatCmd::eSF_ExtendedStreamFormatInformationCommand ); 743 748 extStreamFormatCmd.setCommandType( AVCCommand::eCT_Control ); 749 extStreamFormatCmd.setVerbose( m_verboseLevel ); 744 750 745 751 if ( !extStreamFormatCmd.fire() ) { trunk/libfreebob/src/avdevice.h
r171 r183 40 40 ConfigRom* configRom, 41 41 int nodeId, 42 bool verbose);42 int verboseLevel ); 43 43 virtual ~AvDevice(); 44 44 … … 102 102 ConfigRom* m_configRom; 103 103 int m_nodeId; 104 bool m_verbose;104 int m_verboseLevel; 105 105 106 106 AvPlugVector m_pcrPlugs; trunk/libfreebob/src/avdevicesubunit.cpp
r175 r183 35 35 AVCCommand::ESubunitType type, 36 36 subunit_t id, 37 bool verbose)37 int verboseLevel ) 38 38 : m_avDevice( &avDevice ) 39 39 , m_sbType( type ) 40 40 , m_sbId( id ) 41 , m_verbose ( verbose)42 { 43 if ( m_verbose ) {41 , m_verboseLevel( verboseLevel ) 42 { 43 if ( m_verboseLevel ) { 44 44 setDebugLevel( DEBUG_LEVEL_VERBOSE ); 45 45 } … … 76 76 plugInfoCmd.setSubunitType( m_sbType ); 77 77 plugInfoCmd.setSubunitId( m_sbId ); 78 plugInfoCmd.setVerbose( m_verboseLevel ); 78 79 79 80 if ( !plugInfoCmd.fire() ) { … … 142 143 plugDirection, 143 144 plugIdx, 144 m_verbose );145 m_verboseLevel ); 145 146 if ( !plug || !plug->discover() ) { 146 147 debugError( "plug discover failed\n" ); … … 184 185 AvDeviceSubunitAudio::AvDeviceSubunitAudio( AvDevice& avDevice, 185 186 subunit_t id, 186 bool verbose)187 : AvDeviceSubunit( avDevice, AVCCommand::eST_Audio, id, verbose )187 int verboseLevel ) 188 : AvDeviceSubunit( avDevice, AVCCommand::eST_Audio, id, verboseLevel ) 188 189 { 189 190 } … … 279 280 extSubunitInfoCmd.setSubunitId( getSubunitId() ); 280 281 extSubunitInfoCmd.setSubunitType( getSubunitType() ); 282 extSubunitInfoCmd.setVerbose( m_verboseLevel ); 281 283 282 284 extSubunitInfoCmd.m_fbType = fbType; … … 326 328 data.m_noOfInputPlugs, 327 329 data.m_noOfOutputPlugs, 328 m_verbose );330 m_verboseLevel ); 329 331 } 330 332 break; … … 336 338 data.m_noOfInputPlugs, 337 339 data.m_noOfOutputPlugs, 338 m_verbose );340 m_verboseLevel ); 339 341 } 340 342 break; … … 349 351 data.m_noOfInputPlugs, 350 352 data.m_noOfOutputPlugs, 351 m_verbose );353 m_verboseLevel ); 352 354 } 353 355 break; … … 366 368 data.m_noOfInputPlugs, 367 369 data.m_noOfOutputPlugs, 368 m_verbose );370 m_verboseLevel ); 369 371 debugWarning( "Dummy function block processing created. " 370 372 "Implementation is missing\n" ); … … 379 381 data.m_noOfInputPlugs, 380 382 data.m_noOfOutputPlugs, 381 m_verbose );383 m_verboseLevel ); 382 384 debugWarning( "Dummy function block codec created. " 383 385 "Implementation is missing\n" ); … … 427 429 AvDeviceSubunitMusic::AvDeviceSubunitMusic( AvDevice& avDevice, 428 430 subunit_t id, 429 bool verbose)430 : AvDeviceSubunit( avDevice, AVCCommand::eST_Music, id, verbose )431 int verboseLevel ) 432 : AvDeviceSubunit( avDevice, AVCCommand::eST_Music, id, verboseLevel ) 431 433 { 432 434 } trunk/libfreebob/src/avdevicesubunit.h
r173 r183 39 39 AVCCommand::ESubunitType type, 40 40 subunit_t id, 41 bool verbose);41 int verboseLevel ); 42 42 virtual ~AvDeviceSubunit(); 43 43 … … 70 70 AVCCommand::ESubunitType m_sbType; 71 71 subunit_t m_sbId; 72 bool m_verbose;72 int m_verboseLevel; 73 73 74 74 AvPlugVector m_plugs; … … 85 85 AvDeviceSubunitAudio( AvDevice& avDevice, 86 86 subunit_t id, 87 bool verbose);87 int verboseLevel ); 88 88 virtual ~AvDeviceSubunitAudio(); 89 89 … … 115 115 AvDeviceSubunitMusic( AvDevice& avDevice, 116 116 subunit_t id, 117 bool verbose);117 int verboseLevel ); 118 118 virtual ~AvDeviceSubunitMusic(); 119 119 trunk/libfreebob/src/avplug.cpp
r181 r183 40 40 EAvPlugDirection plugDirection, 41 41 plug_id_t plugId, 42 bool verbose)42 int verboseLevel ) 43 43 : m_1394Service( &ieee1394Service ) 44 44 , m_nodeId( nodeId ) … … 53 53 , m_nrOfChannels( 0 ) 54 54 , m_plugManager( &plugManager ) 55 , m_verbose ( verbose)55 , m_verboseLevel( verboseLevel ) 56 56 , m_globalId( m_globalIdCounter++ ) 57 57 { 58 if ( m_verbose ) {58 if ( m_verboseLevel ) { 59 59 setDebugLevel( DEBUG_LEVEL_VERBOSE ); 60 60 } … … 90 90 , m_formatInfos( rhs.m_formatInfos ) 91 91 , m_plugManager( rhs.m_plugManager ) 92 , m_verbose ( rhs.m_verbose)93 { 94 if ( m_verbose ) {92 , m_verboseLevel( rhs.m_verboseLevel ) 93 { 94 if ( m_verboseLevel ) { 95 95 setDebugLevel( DEBUG_LEVEL_VERBOSE ); 96 96 } … … 173 173 SignalSourceCmd signalSourceCmd = setSrcPlugAddrToSignalCmd(); 174 174 setDestPlugAddrToSignalCmd( signalSourceCmd, plug ); 175 signalSourceCmd.setVerbose( m_verboseLevel ); 175 176 176 177 if ( !signalSourceCmd.fire() ) { … … 226 227 extendedPlugInfoInfoType.initialize(); 227 228 extPlugInfoCmd.setInfoType( extendedPlugInfoInfoType ); 229 extPlugInfoCmd.setVerbose( m_verboseLevel ); 228 230 229 231 if ( !extPlugInfoCmd.fire() ) { … … 287 289 extendedPlugInfoInfoType.initialize(); 288 290 extPlugInfoCmd.setInfoType( extendedPlugInfoInfoType ); 291 extPlugInfoCmd.setVerbose( m_verboseLevel ); 289 292 290 293 if ( !extPlugInfoCmd.fire() ) { … … 319 322 extendedPlugInfoInfoType.initialize(); 320 323 extPlugInfoCmd.setInfoType( extendedPlugInfoInfoType ); 324 extPlugInfoCmd.setVerbose( m_verboseLevel ); 321 325 322 326 if ( !extPlugInfoCmd.fire() ) { … … 350 354 extendedPlugInfoInfoType.initialize(); 351 355 extPlugInfoCmd.setInfoType( extendedPlugInfoInfoType ); 356 extPlugInfoCmd.setVerbose( m_verboseLevel ); 352 357 353 358 if ( !extPlugInfoCmd.fire() ) { … … 397 402 extendedPlugInfoInfoType.initialize(); 398 403 extPlugInfoCmd.setInfoType( extendedPlugInfoInfoType ); 404 extPlugInfoCmd.setVerbose( m_verboseLevel ); 399 405 400 406 ExtendedPlugInfoInfoType* infoType = … … 456 462 extendedPlugInfoInfoType.initialize(); 457 463 extPlugInfoCmd.setInfoType( extendedPlugInfoInfoType ); 464 extPlugInfoCmd.setVerbose( m_verboseLevel ); 458 465 459 466 extPlugInfoCmd.getInfoType()->m_plugClusterInfo->m_clusterIndex = … … 492 499 ExtendedStreamFormatCmd extStreamFormatCmd = 493 500 setPlugAddrToStreamFormatCmd( ExtendedStreamFormatCmd::eSF_ExtendedStreamFormatInformationCommand ); 501 extStreamFormatCmd.setVerbose( m_verboseLevel ); 494 502 495 503 if ( !extStreamFormatCmd.fire() ) { … … 615 623 setPlugAddrToStreamFormatCmd( 616 624 ExtendedStreamFormatCmd::eSF_ExtendedStreamFormatInformationCommandList); 625 extStreamFormatCmd.setVerbose( m_verboseLevel ); 617 626 618 627 int i = 0; … … 712 721 extendedPlugInfoInfoType.initialize(); 713 722 extPlugInfoCmd.setInfoType( extendedPlugInfoInfoType ); 723 extPlugInfoCmd.setVerbose( m_verboseLevel ); 714 724 715 725 if ( !extPlugInfoCmd.fire() ) { … … 763 773 extendedPlugInfoInfoType.initialize(); 764 774 extPlugInfoCmd.setInfoType( extendedPlugInfoInfoType ); 775 extPlugInfoCmd.setVerbose( m_verboseLevel ); 765 776 766 777 if ( !extPlugInfoCmd.fire() ) { … … 1439 1450 1440 1451 1441 AvPlugManager::AvPlugManager( bool verbose)1442 : m_verbose ( verbose)1443 { 1444 if ( m_verbose ) {1452 AvPlugManager::AvPlugManager( int verboseLevel ) 1453 : m_verboseLevel( verboseLevel ) 1454 { 1455 if ( m_verboseLevel ) { 1445 1456 setDebugLevel( DEBUG_LEVEL_VERBOSE ); 1446 1457 } … … 1448 1459 1449 1460 AvPlugManager::AvPlugManager( const AvPlugManager& rhs ) 1450 : m_verbose ( rhs.m_verbose)1451 { 1452 if ( m_verbose ) {1461 : m_verboseLevel( rhs.m_verboseLevel ) 1462 { 1463 if ( m_verboseLevel ) { 1453 1464 setDebugLevel( DEBUG_LEVEL_VERBOSE ); 1454 1465 } trunk/libfreebob/src/avplug.h
r175 r183 78 78 EAvPlugDirection plugDirection, 79 79 plug_id_t plugId, 80 bool verbose);80 int verboseLevel ); 81 81 AvPlug( const AvPlug& rhs ); 82 82 virtual ~AvPlug(); … … 241 241 AvPlugManager* m_plugManager; 242 242 243 bool m_verbose;243 int m_verboseLevel; 244 244 245 245 int m_globalId; … … 257 257 { 258 258 public: 259 AvPlugManager( bool verbose);259 AvPlugManager( int verboseLevel ); 260 260 AvPlugManager( const AvPlugManager& rhs ); 261 261 ~AvPlugManager(); … … 282 282 283 283 private: 284 bool m_verbose;284 int m_verboseLevel; 285 285 AvPlugVector m_plugs; 286 286 trunk/libfreebob/src/devicemanager.cpp
r168 r183 71 71 72 72 bool 73 DeviceManager::discover( bool verbose)74 { 75 if ( verbose ) {73 DeviceManager::discover( int verboseLevel ) 74 { 75 if ( verboseLevel ) { 76 76 setDebugLevel( DEBUG_LEVEL_VERBOSE ); 77 77 } … … 108 108 } 109 109 110 AvDevice* avDevice = new AvDevice( m_1394Service, configRom, nodeId, verbose ); 110 AvDevice* avDevice = new AvDevice( m_1394Service, 111 configRom, 112 nodeId, 113 verboseLevel ); 111 114 if ( !avDevice ) { 112 115 debugError( "discover: Could not allocate AvDevice\n" ); … … 121 124 return false; 122 125 } 123 if ( verbose ) {126 if ( verboseLevel ) { 124 127 avDevice->showDevice(); 125 128 } trunk/libfreebob/src/devicemanager.h
r165 r183 42 42 bool deinitialize(); 43 43 44 bool discover( bool verbose);44 bool discover( int verboseLevel ); 45 45 46 46 bool isValidNode( int node ); trunk/libfreebob/src/freebob.cpp
r165 r183 30 30 #include "avdevice.h" 31 31 32 #include "libfreebobavc/avc_generic.h" 33 32 34 #include <stdio.h> 33 35 #include <stdlib.h> … … 333 335 return; 334 336 } 337 338 void freebob_sleep_after_avc_command( int time ) 339 { 340 AVCCommand::setSleepAfterAVCCommand( time ); 341 } trunk/libfreebob/src/libfreebobavc/avc_connect.cpp
r138 r183 50 50 return true; 51 51 } 52 53 bool54 ConnectCmd::fire( ECommandType commandType,55 raw1394handle_t handle,56 unsigned int node_id )57 {58 bool result = false;59 60 #define STREAM_FORMAT_REQUEST_SIZE 20 // XXX random length61 union UPacket {62 quadlet_t quadlet[STREAM_FORMAT_REQUEST_SIZE];63 unsigned char byte[STREAM_FORMAT_REQUEST_SIZE*4];64 };65 typedef union UPacket packet_t;66 67 packet_t req;68 packet_t* resp;69 70 setCommandType( commandType );71 // initialize complete packet72 memset( &req, 0xff, sizeof( req ) );73 74 BufferSerialize se( req.byte, sizeof( req ) );75 if ( !serialize( se ) ) {76 printf( "ConnectCmd::fire: Could not serialize\n" );77 return false;78 }79 80 // reorder the bytes to the correct layout81 for (int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i) {82 req.quadlet[i] = ntohl( req.quadlet[i] );83 }84 85 if ( isVerbose() ) {86 // debug output87 puts("request:");88 for (int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i) {89 printf(" %2d: 0x%08x\n", i, req.quadlet[i]);90 }91 }92 93 resp = reinterpret_cast<packet_t*>(94 m_1394Service->transactionBlock( m_nodeId,95 req.quadlet,96 STREAM_FORMAT_REQUEST_SIZE ) );97 if ( resp ) {98 if ( isVerbose() ) {99 // debug output100 puts("response:");101 for ( int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i ) {102 printf( " %2d: 0x%08x\n", i, resp->quadlet[i] );103 }104 }105 106 // reorder the bytes to the correct layout107 for ( int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i ) {108 resp->quadlet[i] = htonl( resp->quadlet[i] );109 }110 111 if ( isVerbose() ) {112 // a more detailed debug output113 printf( "\n" );114 printf( " idx type value\n" );115 printf( "-------------------------------------\n" );116 printf( " %02d ctype: 0x%02x\n", 0, resp->byte[0] );117 printf( " %02d subunit_type + subunit_id: 0x%02x\n", 1, resp->byte[1] );118 printf( " %02d opcode: 0x%02x\n", 2, resp->byte[2] );119 120 for ( int i = 3; i < STREAM_FORMAT_REQUEST_SIZE * 4; ++i ) {121 printf( " %02d operand %2d: 0x%02x\n", i, i-3, resp->byte[i] );122 }123 }124 125 // parse output126 parseResponse( resp->byte[0] );127 switch ( getResponse() )128 {129 case eR_Implemented:130 {131 BufferDeserialize de( resp->byte, sizeof( req ) );132 deserialize( de );133 result = true;134 }135 break;136 default:137 printf( "unexpected response received (0x%x)\n", getResponse() );138 }139 } else {140 printf( "no response\n" );141 }142 143 return result;144 }trunk/libfreebob/src/libfreebobavc/avc_connect.h
r125 r183 35 35 virtual bool deserialize( IISDeserialize& de ); 36 36 37 virtual bool fire( ECommandType commandType, 38 raw1394handle_t handle, 39 unsigned int node_id ); 37 virtual const char* getCmdName() const 38 { return "ConnectCmd"; } 40 39 }; 41 40 trunk/libfreebob/src/libfreebobavc/avc_definitions.h
r172 r183 64 64 typedef byte_t no_of_input_plugs_t; 65 65 typedef byte_t no_of_output_plugs_t; 66 typedef byte_t info_type_t; 66 67 67 68 typedef quadlet_t company_id_t; trunk/libfreebob/src/libfreebobavc/avc_extended_plug_info.cpp
r175 r183 113 113 de.read( &length ); 114 114 m_name.clear(); 115 for ( int i = 0; i < length; ++length ) { 116 byte_t c; 117 de.read( &c ); 118 // \todo do correct encoding 119 if ( c == '&' ) { 120 c = '+'; 121 } 122 m_name += c; 123 } 115 char* name; 116 de.read( &name, length ); 117 m_name = name; 118 124 119 return true; 125 120 } … … 500 495 const char* extendedPlugInfoClusterInfoPortTypeToString( port_type_t portType ) 501 496 { 502 if ( portType > sizeof( extendedPlugInfoPortTypeStrings ) ) { 497 if ( portType > ( ( sizeof( extendedPlugInfoPortTypeStrings ) ) 498 / ( sizeof( extendedPlugInfoPortTypeStrings[0] ) ) ) ) { 503 499 return "Unknown"; 504 500 } else { … … 624 620 ExtendedPlugInfoInfoType::serialize( IOSSerialize& se ) 625 621 { 626 se.write( m_infoType, "ExtendedPlugInfoInfoType infoType" ); 622 // XXX \todo improve IOSSerialize::write interface 623 char* buf; 624 asprintf( &buf, "ExtendedPlugInfoInfoType infoType (%s)", 625 extendedPlugInfoInfoTypeToString( m_infoType ) ); 626 se.write( m_infoType, buf ); 627 627 628 628 switch ( m_infoType ) { … … 748 748 return extPlugInfoInfoType; 749 749 } 750 751 const char* extendedPlugInfoInfoTypeStrings[] = 752 { 753 "PlugType", 754 "PlugName", 755 "NoOfChannels", 756 "ChannelPosition", 757 "ChannelName", 758 "PlugInput", 759 "PlugOutput", 760 "ClusterInfo", 761 }; 762 763 const char* extendedPlugInfoInfoTypeToString( info_type_t infoType ) 764 { 765 if ( infoType > ( ( sizeof( extendedPlugInfoInfoTypeStrings ) ) 766 / ( sizeof( extendedPlugInfoInfoTypeStrings[0] ) ) ) ) { 767 return "Unknown"; 768 } else { 769 return extendedPlugInfoInfoTypeStrings[infoType]; 770 } 771 } 772 750 773 751 774 ////////////////////////////////////////////// … … 806 829 807 830 bool 808 ExtendedPlugInfoCmd::fire()809 {810 bool result = false;811 812 #define STREAM_FORMAT_REQUEST_SIZE 20 // XXX random length813 union UPacket {814 quadlet_t quadlet[STREAM_FORMAT_REQUEST_SIZE];815 unsigned char byte[STREAM_FORMAT_REQUEST_SIZE*4];816 };817 typedef union UPacket packet_t;818 819 packet_t req;820 packet_t* resp;821 822 // initialize complete packet823 memset( &req, 0xff, sizeof( req ) );824 825 BufferSerialize se( req.byte, sizeof( req ) );826 if ( !serialize( se ) ) {827 printf( "ExtendedPlugInfoCmd::fire: Could not serialize\n" );828 return false;829 }830 831 if ( isVerbose() ) {832 printf( "\n" );833 printf( " idx type value\n" );834 printf( "-------------------------------------\n" );835 printf( " %02d ctype: 0x%02x\n", 0, req.byte[0] );836 printf( " %02d subunit_type + subunit_id: 0x%02x\n", 1, req.byte[1] );837 printf( " %02d opcode: 0x%02x\n", 2, req.byte[2] );838 839 for ( int i = 3; i < STREAM_FORMAT_REQUEST_SIZE * 4; ++i ) {840 printf( " %02d operand %2d: 0x%02x\n", i, i-3, req.byte[i] );841 }842 }843 844 // reorder the bytes to the correct layout845 for (int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i) {846 req.quadlet[i] = ntohl( req.quadlet[i] );847 }848 849 if ( isVerbose() ) {850 // debug output851 puts("request:");852 for (int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i) {853 printf(" %2d: 0x%08x\n", i, req.quadlet[i]);854 }855 }856 857 resp = reinterpret_cast<packet_t*>(858 m_1394Service->transactionBlock( m_nodeId,859 req.quadlet,860 STREAM_FORMAT_REQUEST_SIZE ) );861 if ( resp ) {862 if ( isVerbose() ) {863 // debug output864 puts("response:");865 for ( int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i ) {866 printf( " %2d: 0x%08x\n", i, resp->quadlet[i] );867 }868 }869 870 // reorder the bytes to the correct layout871 for ( int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i ) {872 resp->quadlet[i] = htonl( resp->quadlet[i] );873 }874 875 if ( isVerbose() ) {876 // a more detailed debug output877 printf( "\n" );878 printf( " idx type value\n" );879 printf( "-------------------------------------\n" );880 printf( " %02d ctype: 0x%02x\n", 0, resp->byte[0] );881 printf( " %02d subunit_type + subunit_id: 0x%02x\n", 1, resp->byte[1] );882 printf( " %02d opcode: 0x%02x\n", 2, resp->byte[2] );883 884 for ( int i = 3; i < STREAM_FORMAT_REQUEST_SIZE * 4; ++i ) {885 printf( " %02d operand %2d: 0x%02x\n", i, i-3, resp->byte[i] );886 }887 }888 889 // parse output890 parseResponse( resp->byte[0] );891 switch ( getResponse() )892 {893 case eR_Implemented:894 case eR_Rejected:895 case eR_NotImplemented:896 {897 BufferDeserialize de( resp->byte, sizeof( req ) );898 result = deserialize( de );899 }900 break;901 default:902 printf( "unexpected response received (0x%x)\n", getResponse() );903 }904 } else {905 printf( "no response\n" );906 }907 908 return result;909 }910 911 bool912 831 ExtendedPlugInfoCmd::setPlugAddress( const PlugAddress& plugAddress ) 913 832 { trunk/libfreebob/src/libfreebobavc/avc_extended_plug_info.h
r157 r183 261 261 virtual ExtendedPlugInfoInfoType* clone() const; 262 262 263 typedef byte_t info_type_t;264 263 info_type_t m_infoType; 265 264 … … 274 273 }; 275 274 275 const char* extendedPlugInfoInfoTypeToString( info_type_t infoType ); 276 276 277 ///////////////////////////////////////////////////////// 277 278 … … 295 296 virtual bool serialize( IOSSerialize& se ); 296 297 virtual bool deserialize( IISDeserialize& de ); 297 298 virtual bool fire();299 298 300 299 bool setPlugAddress( const PlugAddress& plugAddress ); … … 304 303 { return m_infoType; } 305 304 305 virtual const char* getCmdName() const 306 { return "ExtendedPlugInfoCmd"; } 307 306 308 protected: 307 309 subfunction_t m_subFunction; trunk/libfreebob/src/libfreebobavc/avc_extended_stream_format.cpp
r164 r183 360 360 } 361 361 362 bool363 ExtendedStreamFormatCmd::fire()364 {365 bool result = false;366 367 #define STREAM_FORMAT_REQUEST_SIZE 20 // XXX random length368 union UPacket {369 quadlet_t quadlet[STREAM_FORMAT_REQUEST_SIZE];370 unsigned char byte[STREAM_FORMAT_REQUEST_SIZE*4];371 };372 typedef union UPacket packet_t;373 374 packet_t req;375 packet_t* resp;376 377 // initialize complete packet378 memset( &req, 0xff, sizeof( req ) );379 380 BufferSerialize se( req.byte, sizeof( req ) );381 if ( !serialize( se ) ) {382 printf( "ExtendedStreamFormatCmd::fire: Could not serialize\n" );383 return false;384 }385 386 // reorder the bytes to the correct layout387 for (int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i) {388 req.quadlet[i] = ntohl( req.quadlet[i] );389 }390 391 if ( isVerbose() ) {392 // debug output393 puts("request:");394 for (int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i) {395 printf(" %2d: 0x%08x\n", i, req.quadlet[i]);396 }397 }398 resp = reinterpret_cast<packet_t*>(399 m_1394Service->transactionBlock( m_nodeId,400 req.quadlet,401 STREAM_FORMAT_REQUEST_SIZE ) );402 if ( resp ) {403 if ( isVerbose() ) {404 // debug output405 puts("response:");406 for ( int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i ) {407 printf( " %2d: 0x%08x\n", i, resp->quadlet[i] );408 }409 }410 411 // reorder the bytes to the correct layout412 for ( int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i ) {413 resp->quadlet[i] = htonl( resp->quadlet[i] );414 }415 416 if ( isVerbose() ) {417 // a more detailed debug output418 printf( "\n" );419 printf( " idx type value\n" );420 printf( "-------------------------------------\n" );421 printf( " %02d ctype: 0x%02x\n", 0, resp->byte[0] );422 printf( " %02d subunit_type + subunit_id: 0x%02x\n", 1, resp->byte[1] );423 printf( " %02d opcode: 0x%02x\n", 2, resp->byte[2] );424 425 for ( int i = 3; i < STREAM_FORMAT_REQUEST_SIZE * 4; ++i ) {426 printf( " %02d operand %2d: 0x%02x\n", i, i-3, resp->byte[i] );427 }428 }429 430 // parse output431 parseResponse( resp->byte[0] );432 switch ( getResponse() )433 {434 case eR_Implemented:435 {436 BufferDeserialize de( resp->byte, sizeof( req ) );437 result = deserialize( de );438 }439 break;440 case eR_Rejected:441 if ( m_subFunction == eSF_ExtendedStreamFormatInformationCommandList ) {442 if ( isVerbose() ) {443 printf( "no futher stream formats defined\n" );444 }445 result = true;446 } else {447 printf( "request rejected\n" );448 }449 break;450 default:451 printf( "unexpected response received (0x%x)\n", getResponse() );452 }453 } else {454 printf( "no response\n" );455 }456 457 return result;458 }459 460 362 ExtendedStreamFormatCmd::EStatus 461 363 ExtendedStreamFormatCmd::getStatus() trunk/libfreebob/src/libfreebobavc/avc_extended_stream_format.h
r164 r183 269 269 virtual bool deserialize( IISDeserialize& de ); 270 270 271 virtual bool fire();272 273 271 EStatus getStatus(); 274 272 FormatInformation* getFormatInformation(); 275 273 index_in_stream_format_t getIndex(); 274 275 virtual const char* getCmdName() const 276 { return "ExtendedStreamFormatCmd"; } 276 277 277 278 protected: trunk/libfreebob/src/libfreebobavc/avc_extended_subunit_info.cpp
r172 r183 153 153 return status; 154 154 } 155 156 bool157 ExtendedSubunitInfoCmd::fire()158 {159 bool result = false;160 161 #define STREAM_FORMAT_REQUEST_SIZE 20 // XXX random length162 union UPacket {163 quadlet_t quadlet[STREAM_FORMAT_REQUEST_SIZE];164 unsigned char byte[STREAM_FORMAT_REQUEST_SIZE*4];165 };166 typedef union UPacket packet_t;167 168 packet_t req;169 packet_t* resp;170 171 // initialize complete packet172 memset( &req, 0xff, sizeof( req ) );173 174 BufferSerialize se( req.byte, sizeof( req ) );175 if ( !serialize( se ) ) {176 printf( "ExtendedSubunitInfoCmd::fire: Could not serialize\n" );177 return false;178 }179 180 if ( isVerbose() ) {181 printf( "\n" );182 printf( " idx type value\n" );183 printf( "-------------------------------------\n" );184 printf( " %02d ctype: 0x%02x\n", 0, req.byte[0] );185 printf( " %02d subunit_type + subunit_id: 0x%02x\n", 1, req.byte[1] );186 printf( " %02d opcode: 0x%02x\n", 2, req.byte[2] );187 188 for ( int i = 3; i < STREAM_FORMAT_REQUEST_SIZE * 4; ++i ) {189 printf( " %02d operand %2d: 0x%02x\n", i, i-3, req.byte[i] );190 }191 }192 193 // reorder the bytes to the correct layout194 for (int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i) {195 req.quadlet[i] = ntohl( req.quadlet[i] );196 }197 198 if ( isVerbose() ) {199 // debug output200 puts("request:");201 for (int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i) {202 printf(" %2d: 0x%08x\n", i, req.quadlet[i]);203 }204 }205 206 resp = reinterpret_cast<packet_t*>(207 m_1394Service->transactionBlock( m_nodeId,208 req.quadlet,209 STREAM_FORMAT_REQUEST_SIZE ) );210 if ( resp ) {211 if ( isVerbose() ) {212 // debug output213 puts("response:");214 for ( int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i ) {215 printf( " %2d: 0x%08x\n", i, resp->quadlet[i] );216 }217 }218 219 // reorder the bytes to the correct layout220 for ( int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i ) {221 resp->quadlet[i] = htonl( resp->quadlet[i] );222 }223 224 if ( isVerbose() ) {225 // a more detailed debug output226 printf( "\n" );227 printf( " idx type value\n" );228 printf( "-------------------------------------\n" );229 printf( " %02d ctype: 0x%02x\n", 0, resp->byte[0] );230 printf( " %02d subunit_type + subunit_id: 0x%02x\n", 1, resp->byte[1] );231 printf( " %02d opcode: 0x%02x\n", 2, resp->byte[2] );232 233 for ( int i = 3; i < STREAM_FORMAT_REQUEST_SIZE * 4; ++i ) {234 printf( " %02d operand %2d: 0x%02x\n", i, i-3, resp->byte[i] );235 }236 }237 238 // parse output239 parseResponse( resp->byte[0] );240 switch ( getResponse() )241 {242 case eR_Implemented:243 {244 BufferDeserialize de( resp->byte, sizeof( req ) );245 result = deserialize( de );246 break;247 }248 case eR_NotImplemented:249 {250 BufferDeserialize de( resp->byte, sizeof( req ) );251 result = deserialize( de );252 }253 break;254 default:255 printf( "unexpected response received (0x%x)\n", getResponse() );256 }257 } else {258 printf( "no response\n" );259 }260 261 return result;262 }trunk/libfreebob/src/libfreebobavc/avc_extended_subunit_info.h
r172 r183 93 93 virtual bool deserialize( IISDeserialize& de ); 94 94 95 virtual bool fire(); 95 virtual const char* getCmdName() const 96 { return "ExtendedSubunitInfoCmd"; } 96 97 97 98 page_t m_page; trunk/libfreebob/src/libfreebobavc/avc_generic.cpp
r172 r183 23 23 #include "ieee1394service.h" 24 24 25 #include <netinet/in.h> 26 27 #define DEBUG_EXTRA_VERBOSE 2 28 29 int AVCCommand::m_time = 0; 30 25 31 AVCCommand::AVCCommand( Ieee1394Service* ieee1394service, 26 32 opcode_t opcode ) … … 31 37 , m_opcode( opcode ) 32 38 , m_eResponse( eR_Unknown ) 33 , m_verbose ( false)39 , m_verboseLevel( 0 ) 34 40 { 35 41 } … … 74 80 75 81 bool 76 AVCCommand::parseResponse( byte_t response )77 {78 m_eResponse = static_cast<EResponse>( response );79 return true;80 }81 82 bool83 82 AVCCommand::setSubunitType(ESubunitType subunitType) 84 83 { … … 116 115 117 116 bool 118 AVCCommand::setVerbose( bool enable ) 119 { 120 m_verbose = enable; 121 return true; 122 } 123 124 bool 125 AVCCommand::isVerbose() 126 { 127 return m_verbose; 128 } 129 117 AVCCommand::setVerbose( int verboseLevel ) 118 { 119 m_verboseLevel = verboseLevel; 120 return true; 121 } 122 123 int 124 AVCCommand::getVerboseLevel() 125 { 126 return m_verboseLevel; 127 } 128 129 130 void 131 AVCCommand::showFcpFrame( const unsigned char* buf, 132 unsigned short frameSize ) const 133 { 134 for ( int i = 0; i < frameSize; ++i ) { 135 if ( ( i % 16 ) == 0 ) { 136 if ( i > 0 ) { 137 printf( "\n" ); 138 } 139 printf( " %3d:\t", i ); 140 } else if ( ( i % 4 ) == 0 ) { 141 printf( " " ); 142 } 143 printf( "%02x ", buf[i] ); 144 } 145 printf( "\n" ); 146 } 147 148 bool 149 AVCCommand::fire() 150 { 151 memset( &m_fcpFrame, 0x0, sizeof( m_fcpFrame ) ); 152 153 BufferSerialize se( m_fcpFrame, sizeof( m_fcpFrame ) ); 154 if ( !serialize( se ) ) { 155 printf( "ExtendedPlugInfoCmd::fire: Could not serialize\n" ); 156 return false; 157 } 158 159 unsigned short fcpFrameSize = se.getNrOfProducesBytes(); 160 161 if ( getVerboseLevel() >= DEBUG_EXTRA_VERBOSE ) { 162 printf( "%s:\n", getCmdName() ); 163 puts( " Request:"); 164 showFcpFrame( m_fcpFrame, fcpFrameSize ); 165 166 CoutSerializer se; 167 serialize( se ); 168 } 169 170 quadlet_t* resp = m_1394Service->transactionBlock( m_nodeId, 171 (quadlet_t*)m_fcpFrame, 172 ( fcpFrameSize + 3 ) / 4 ); 173 bool result = false; 174 if ( resp ) { 175 unsigned char* buf = ( unsigned char* ) resp; 176 177 m_eResponse = ( EResponse )( *buf ); 178 switch ( m_eResponse ) 179 { 180 case eR_Implemented: 181 case eR_Rejected: 182 case eR_NotImplemented: 183 { 184 BufferDeserialize de( buf, 512 ); // XXX magic number 185 result = deserialize( de ); 186 187 if ( getVerboseLevel() >= DEBUG_EXTRA_VERBOSE) { 188 puts(" Response:"); 189 showFcpFrame( buf, de.getNrOfConsumedBytes() ); 190 191 CoutSerializer se; 192 serialize( se ); 193 } 194 } 195 break; 196 default: 197 printf( "unexpected response received (0x%x)\n", m_eResponse ); 198 } 199 } else { 200 printf( "no response\n" ); 201 } 202 203 if ( getVerboseLevel() >= DEBUG_EXTRA_VERBOSE ) { 204 printf( "\n" ); 205 } 206 207 m_1394Service->transactionBlockClose(); 208 209 usleep( m_time ); 210 211 return result; 212 } 213 214 void 215 AVCCommand::setSleepAfterAVCCommand( int time ) 216 { 217 m_time = time; 218 } 130 219 131 220 const char* subunitTypeStrings[] = trunk/libfreebob/src/libfreebobavc/avc_generic.h
r125 r183 31 31 class IISDeserialize; 32 32 class Ieee1394Service; 33 34 const int fcpFrameMaxLength = 512; 35 typedef unsigned char fcp_frame_t[fcpFrameMaxLength]; 33 36 34 37 class IBusData { … … 89 92 90 93 virtual bool setCommandType( ECommandType commandType ); 91 virtual bool fire() = 0;94 virtual bool fire(); 92 95 93 96 EResponse getResponse(); … … 100 103 subunit_id_t getSubunitId(); 101 104 102 bool setVerbose( bool enable);103 bool isVerbose();105 bool setVerbose( int verboseLevel ); 106 int getVerboseLevel(); 104 107 108 virtual const char* getCmdName() const = 0; 109 110 // workaround 111 static void setSleepAfterAVCCommand( int time ); 112 protected: 113 void showFcpFrame( const unsigned char* buf, 114 unsigned short frameSize ) const; 105 115 106 116 protected: … … 108 118 virtual ~AVCCommand() {} 109 119 110 bool parseResponse( byte_t response );111 120 ECommandType getCommandType(); 112 121 113 122 Ieee1394Service* m_1394Service; 114 123 fb_nodeid_t m_nodeId; 124 125 fcp_frame_t m_fcpFrame; 115 126 116 127 private: … … 119 130 opcode_t m_opcode; 120 131 EResponse m_eResponse; 121 bool m_verbose;132 int m_verboseLevel; 122 133 ECommandType m_commandType; 134 static int m_time; 123 135 }; 124 136 trunk/libfreebob/src/libfreebobavc/avc_plug_info.cpp
r164 r183 134 134 135 135 bool 136 PlugInfoCmd::fire()137 {138 bool result = false;139 140 #define STREAM_FORMAT_REQUEST_SIZE 20 // XXX random length141 union UPacket {142 quadlet_t quadlet[STREAM_FORMAT_REQUEST_SIZE];143 unsigned char byte[STREAM_FORMAT_REQUEST_SIZE*4];144 };145 typedef union UPacket packet_t;146 147 packet_t req;148 packet_t* resp;149 150 // initialize complete packet151 memset( &req, 0xff, sizeof( req ) );152 153 BufferSerialize se( req.byte, sizeof( req ) );154 if ( !serialize( se ) ) {155 printf( "PlugInfoCmd::fire: Could not serialize\n" );156 return false;157 }158 159 // reorder the bytes to the correct layout160 for (int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i) {161 req.quadlet[i] = ntohl( req.quadlet[i] );162 }163 164 if ( isVerbose() ) {165 // debug output166 puts("request:");167 for (int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i) {168 printf(" %2d: 0x%08x\n", i, req.quadlet[i]);169 }170 }171 172 resp = reinterpret_cast<packet_t*>(173 m_1394Service->transactionBlock( m_nodeId,174 req.quadlet,175 STREAM_FORMAT_REQUEST_SIZE ) );176 if ( resp ) {177 if ( isVerbose() ) {178 // debug output179 puts("response:");180 for ( int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i ) {181 printf( " %2d: 0x%08x\n", i, resp->quadlet[i] );182 }183 }184 185 // reorder the bytes to the correct layout186 for ( int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i ) {187 resp->quadlet[i] = htonl( resp->quadlet[i] );188 }189 190 if ( isVerbose() ) {191 // a more detailed debug output192 printf( "\n" );193 printf( " idx type value\n" );194 printf( "-------------------------------------\n" );195 printf( " %02d ctype: 0x%02x\n", 0, resp->byte[0] );196 printf( " %02d subunit_type + subunit_id: 0x%02x\n", 1, resp->byte[1] );197 printf( " %02d opcode: 0x%02x\n", 2, resp->byte[2] );198 199 for ( int i = 3; i < STREAM_FORMAT_REQUEST_SIZE * 4; ++i ) {200 printf( " %02d operand %2d: 0x%02x\n", i, i-3, resp->byte[i] );201 }202 }203 204 // parse output205 parseResponse( resp->byte[0] );206 switch ( getResponse() )207 {208 case eR_Implemented:209 {210 BufferDeserialize de( resp->byte, sizeof( req ) );211 result = deserialize( de );212 }213 break;214 default:215 printf( "unexpected response received (0x%x)\n", getResponse() );216 }217 } else {218 printf( "no response\n" );219 }220 221 return result;222 }223 224 bool225 136 PlugInfoCmd::setSubFunction( ESubFunction subFunction ) 226 137 { trunk/libfreebob/src/libfreebobavc/avc_plug_info.h
r157 r183 50 50 virtual bool deserialize( IISDeserialize& de ); 51 51 52 virtual bool fire();53 52 virtual const char* getCmdName() const 53 { return "PlugInfoCmd"; } 54 54 55 55 nr_of_plugs_t m_serialBusIsochronousInputPlugs; trunk/libfreebob/src/libfreebobavc/avc_signal_source.cpp
r164 r183 230 230 231 231 bool 232 SignalSourceCmd::fire()233 {234 bool result = false;235 236 #define STREAM_FORMAT_REQUEST_SIZE 20 // XXX random length237 union UPacket {238 quadlet_t quadlet[STREAM_FORMAT_REQUEST_SIZE];239 unsigned char byte[STREAM_FORMAT_REQUEST_SIZE*4];240 };241 typedef union UPacket packet_t;242 243 packet_t req;244 packet_t* resp;245 246 // initialize complete packet247 memset( &req, 0xff, sizeof( req ) );248 249 BufferSerialize se( req.byte, sizeof( req ) );250 if ( !serialize( se ) ) {251 printf( "SignalSourceCmd::fire: Could not serialize\n" );252 return false;253 }254 255 // reorder the bytes to the correct layout256 for (int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i) {257 req.quadlet[i] = ntohl( req.quadlet[i] );258 }259 260 if ( isVerbose() ) {261 // debug output262 puts("request:");263 for (int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i) {264 printf(" %2d: 0x%08x\n", i, req.quadlet[i]);265 }266 }267 268 resp = reinterpret_cast<packet_t*>(269 m_1394Service->transactionBlock( m_nodeId,270 req.quadlet,271 STREAM_FORMAT_REQUEST_SIZE ) );272 if ( resp ) {273 if ( isVerbose() ) {274 // debug output275 puts("response:");276 for ( int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i ) {277 printf( " %2d: 0x%08x\n", i, resp->quadlet[i] );278 }279 }280 281 // reorder the bytes to the correct layout282 for ( int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i ) {283 resp->quadlet[i] = htonl( resp->quadlet[i] );284 }285 286 if ( isVerbose() ) {287 // a more detailed debug output288 printf( "\n" );289 printf( " idx type value\n" );290 printf( "-------------------------------------\n" );291 printf( " %02d ctype: 0x%02x\n", 0, resp->byte[0] );292 printf( " %02d subunit_type + subunit_id: 0x%02x\n", 1, resp->byte[1] );293 printf( " %02d opcode: 0x%02x\n", 2, resp->byte[2] );294 295 for ( int i = 3; i < STREAM_FORMAT_REQUEST_SIZE * 4; ++i ) {296 printf( " %02d operand %2d: 0x%02x\n", i, i-3, resp->byte[i] );297 }298 }299 300 // parse output301 parseResponse( resp->byte[0] );302 switch ( getResponse() )303 {304 case eR_Implemented:305 case eR_NotImplemented:306 case eR_Accepted:307 case eR_Rejected:308 {309 BufferDeserialize de( resp->byte, sizeof( req ) );310 result = deserialize( de );311 }312 break;313 default:314 printf( "unexpected response received (0x%x)\n", getResponse() );315 }316 } else {317 printf( "no response\n" );318 }319 320 return result;321 }322 323 bool324 232 SignalSourceCmd::setSignalSource( SignalUnitAddress& signalAddress ) 325 233 { trunk/libfreebob/src/libfreebobavc/avc_signal_source.h
r164 r183 72 72 virtual bool deserialize( IISDeserialize& de ); 73 73 74 virtual bool fire(); 74 virtual const char* getCmdName() const 75 { return "SignalSourceCmd"; } 75 76 76 77 bool setSignalSource( SignalUnitAddress& signalAddress ); trunk/libfreebob/src/libfreebobavc/avc_subunit_info.cpp
r164 r183 93 93 return true; 94 94 } 95 96 bool97 SubUnitInfoCmd::fire()98 {99 bool result = false;100 101 #define REQUEST_SIZE 2102 union UPacket {103 quadlet_t quadlet[REQUEST_SIZE];104 unsigned char byte[REQUEST_SIZE*4];105 };106 typedef union UPacket packet_t;107 108 packet_t req;109 packet_t* resp;110 111 // initialize complete packet112 memset( &req, 0xff, sizeof( req ) );113 114 BufferSerialize se( req.byte, sizeof( req ) );115 if ( !serialize( se ) ) {116 printf( "UnitInoCmd::fire: Could not serialize\n" );117 return false;118 }119 120 // reorder the bytes to the correct layout121 for (int i = 0; i < REQUEST_SIZE; ++i) {122 req.quadlet[i] = ntohl( req.quadlet[i] );123 }124 125 if ( isVerbose() ) {126 // debug output127 puts("request:");128 for (int i = 0; i < REQUEST_SIZE; ++i) {129 printf(" %2d: 0x%08x\n", i, req.quadlet[i]);130 }131 }132 133 resp = reinterpret_cast<packet_t*>(134 m_1394Service->transactionBlock( m_nodeId,135 req.quadlet,136 REQUEST_SIZE ) );137 if ( resp ) {138 if ( isVerbose() ) {139 // debug output140 puts("response:");141 for ( int i = 0; i < REQUEST_SIZE; ++i ) {142 printf( " %2d: 0x%08x\n", i, resp->quadlet[i] );143 }144 }145 146 // reorder the bytes to the correct layout147 for ( int i = 0; i < REQUEST_SIZE; ++i ) {148 resp->quadlet[i] = htonl( resp->quadlet[i] );149 }150 151 if ( isVerbose() ) {152 // a more detailed debug output153 printf( "\n" );154 printf( " idx type value\n" );155 printf( "-------------------------------------\n" );156 printf( " %02d ctype: 0x%02x\n", 0, resp->byte[0] );157 printf( " %02d subunit_type + subunit_id: 0x%02x\n", 1, resp->byte[1] );158 printf( " %02d opcode: 0x%02x\n", 2, resp->byte[2] );159 160 for ( int i = 3; i < REQUEST_SIZE * 4; ++i ) {161 printf( " %02d operand %2d: 0x%02x\n", i, i-3, resp->byte[i] );162 }163 }164 165 // parse output166 parseResponse( resp->byte[0] );167 switch ( getResponse() )168 {169 case eR_Implemented:170 {171 BufferDeserialize de( resp->byte, sizeof( req ) );172 result = deserialize( de );173 }174 break;175 case eR_NotImplemented:176 break;177 178 default:179 printf( "unexpected response received (0x%x)\n", getResponse() );180 }181 } else {182 printf( "no response\n" );183 }184 185 return result;186 }trunk/libfreebob/src/libfreebobavc/avc_subunit_info.h
r125 r183 38 38 virtual bool deserialize( IISDeserialize& de ); 39 39 40 virtual bool fire(); 40 virtual const char* getCmdName() const 41 { return "SubUnitInfoCmd"; } 41 42 42 43 bool clear(); trunk/libfreebob/src/libfreebobavc/avc_unit_info.cpp
r164 r183 81 81 return true; 82 82 } 83 84 bool85 UnitInfoCmd::fire()86 {87 bool result = false;88 89 #define STREAM_FORMAT_REQUEST_SIZE 290 union UPacket {91 quadlet_t quadlet[STREAM_FORMAT_REQUEST_SIZE];92 unsigned char byte[STREAM_FORMAT_REQUEST_SIZE*4];93 };94 typedef union UPacket packet_t;95 96 packet_t req;97 packet_t* resp;98 99 // initialize complete packet100 memset( &req, 0xff, sizeof( req ) );101 102 BufferSerialize se( req.byte, sizeof( req ) );103 if ( !serialize( se ) ) {104 printf( "UnitInoCmd::fire: Could not serialize\n" );105 return false;106 }107 108 // reorder the bytes to the correct layout109 for (int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i) {110 req.quadlet[i] = ntohl( req.quadlet[i] );111 }112 113 if ( isVerbose() ) {114 // debug output115 puts("request:");116 for (int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i) {117 printf(" %2d: 0x%08x\n", i, req.quadlet[i]);118 }119 }120 121 resp = reinterpret_cast<packet_t*>(122 m_1394Service->transactionBlock( m_nodeId,123 req.quadlet,124 STREAM_FORMAT_REQUEST_SIZE ) );125 if ( resp ) {126 if ( isVerbose() ) {127 // debug output128 puts("response:");129 for ( int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i ) {130 printf( " %2d: 0x%08x\n", i, resp->quadlet[i] );131 }132 }133 134 // reorder the bytes to the correct layout135 for ( int i = 0; i < STREAM_FORMAT_REQUEST_SIZE; ++i ) {136 resp->quadlet[i] = htonl( resp->quadlet[i] );137 }138 139 if ( isVerbose() ) {140 // a more detailed debug output141 printf( "\n" );142 printf( " idx type value\n" );143 printf( "-------------------------------------\n" );144 printf( " %02d ctype: 0x%02x\n", 0, resp->byte[0] );145 printf( " %02d subunit_type + subunit_id: 0x%02x\n", 1, resp->byte[1] );146 printf( " %02d opcode: 0x%02x\n", 2, resp->byte[2] );147 148 for ( int i = 3; i < STREAM_FORMAT_REQUEST_SIZE * 4; ++i ) {149 printf( " %02d operand %2d: 0x%02x\n", i, i-3, resp->byte[i] );150 }151 }152 153 // parse output154 parseResponse( resp->byte[0] );155 switch ( getResponse() )156 {157 case eR_Implemented:158 {159 BufferDeserialize de( resp->byte, sizeof( req ) );160 result = deserialize( de );161 }162 break;163 default:164 printf( "unexpected response received (0x%x)\n", getResponse() );165 }166 } else {167 printf( "no response\n" );168 }169 170 return result;171 }trunk/libfreebob/src/libfreebobavc/avc_unit_info.h
r125 r183 55 55 virtual bool deserialize( IISDeserialize& de ); 56 56 57 virtual bool fire();58 57 virtual const char* getCmdName() const 58 { return "UnitInfoCmd"; } 59 59 60 60 reserved_t m_reserved; trunk/libfreebob/src/libfreebobavc/ieee1394service.cpp
r174 r183 23 23 24 24 #include <errno.h> 25 #include <netinet/in.h> 25 26 26 27 #include <iostream> … … 85 86 int len ) 86 87 { 87 return avc1394_transaction_block( m_handle, nodeId, buf, len, 10 ); 88 for (int i = 0; i < len; ++i) { 89 buf[i] = ntohl( buf[i] ); 90 } 91 92 fb_quadlet_t* result = 93 avc1394_transaction_block( m_handle, nodeId, buf, len, 10 ); 94 95 for ( int i = 0; i < 512/4; ++i ) { //XXX 96 result[i] = htonl( result[i] ); 97 } 98 99 return result; 88 100 } 101 102 103 bool 104 Ieee1394Service::transactionBlockClose() 105 { 106 avc1394_transaction_block_close( m_handle ); 107 return true; 108 } trunk/libfreebob/src/libfreebobavc/ieee1394service.h
r155 r183 84 84 int len ); 85 85 86 87 86 bool transactionBlockClose(); 88 87 89 88 private: trunk/libfreebob/src/libfreebobavc/serialize.cpp
r125 r183 24 24 #include <iomanip> 25 25 26 using namespace std; 26 #include <netinet/in.h> 27 27 28 28 bool 29 29 CoutSerializer::write( byte_t d, const char* name ) 30 30 { 31 cout << name << ": 0x" << setfill( '0' ) << hex << static_cast<unsigned int>( d ) << endl; 31 printf( " %3d:\t0x%02x\t%s\n", m_cnt, d, name ); 32 m_cnt += sizeof( byte_t ); 33 32 34 return true; 33 35 } … … 36 38 CoutSerializer::write( quadlet_t d, const char* name ) 37 39 { 38 cout << name << ": 0x" << setfill( '0' ) << setw( 8 ) << hex << d << endl; 40 printf( " %3d:\t0x%08x\t%s\n", m_cnt, d, name ); 41 m_cnt += sizeof( quadlet_t ); 39 42 return true; 40 43 } … … 96 99 *value = *m_curPos; 97 100 m_curPos += sizeof( quadlet_t ); 98 result = true;; 101 result = true; 102 } 103 return result; 104 } 105 106 bool 107 BufferDeserialize::read( char** value, size_t length ) 108 { 109 bool result = false; 110 if ( isCurPosValid() ) { 111 *value = ( char* )m_curPos; 112 m_curPos += length; 113 result = true; 99 114 } 100 115 return result; trunk/libfreebob/src/libfreebobavc/serialize.h
r125 r183 42 42 virtual bool read( byte_t* value ) = 0; 43 43 virtual bool read( quadlet_t* value ) = 0; 44 virtual bool read( char** value, size_t length ) = 0; 44 45 virtual bool peek( byte_t* value ) = 0; 45 46 }; … … 51 52 CoutSerializer() 52 53 : IOSSerialize() 54 , m_cnt( 0 ) 53 55 {} 54 56 virtual ~CoutSerializer() {} … … 56 58 virtual bool write( byte_t value, const char* name = "" ); 57 59 virtual bool write( quadlet_t value, const char* name = "" ); 60 61 private: 62 unsigned int m_cnt; 63 58 64 }; 59 65 … … 70 76 virtual bool write( byte_t value, const char* name = "" ); 71 77 virtual bool write( quadlet_t value, const char* name = "" ); 78 79 int getNrOfProducesBytes() const 80 { return m_curPos - m_buffer; } 72 81 73 82 protected: … … 92 101 virtual bool read( byte_t* value ); 93 102 virtual bool read( quadlet_t* value ); 103 virtual bool read( char** value, size_t length ); 94 104 virtual bool peek( byte_t* value ); 105 106 int getNrOfConsumedBytes() const 107 { return m_curPos - m_buffer; } 95 108 96 109 protected: … … 100 113 unsigned char* m_buffer; // start of the buffer 101 114 unsigned char* m_curPos; // current read pos 102 size_t m_length; // lengthof buffer115 size_t m_length; // size of buffer 103 116 }; 104 117 trunk/libfreebob/tests/Makefile.am
r159 r183 25 25 26 26 test_freebob_SOURCES = test-freebob.c 27 test_freebob_LDADD = $(top_builddir)/src/libfreebob.la $(LIBXML_LIBS) 27 test_freebob_LDADD = $(top_builddir)/src/libfreebob.la $(LIBXML_LIBS) -lavc1394 28 28 29 29 test_extplugcmd_SOURCES = test-extplugcmd.cpp 30 test_extplugcmd_LDADD = $(top_builddir)/src/libfreebobavc/libfreebobavc.la 30 test_extplugcmd_LDADD = $(top_builddir)/src/libfreebobavc/libfreebobavc.la -lavc1394 31 31 32 32 #TESTS_ENVIRONMENT trunk/libfreebob/tests/streaming/Makefile.am
r159 r183 23 23 24 24 teststreaming_SOURCES = teststreaming.c debugtools.c 25 teststreaming_LDADD = @top_builddir@src/libfreebob.la 25 teststreaming_LDADD = @top_builddir@src/libfreebob.la -lavc1394 26 26 27 27 teststreaming2_SOURCES = teststreaming2.c debugtools.c 28 teststreaming2_LDADD = @top_builddir@src/libfreebob.la 28 teststreaming2_LDADD = @top_builddir@src/libfreebob.la -lavc1394 29 29 30 30 teststreaming3_SOURCES = teststreaming3.c debugtools.c 31 teststreaming3_LDADD = @top_builddir@src/libfreebob.la 31 teststreaming3_LDADD = @top_builddir@src/libfreebob.la -lavc1394 32 32 33 33 testmidistreaming1_SOURCES = testmidistreaming1.c debugtools.c 34 testmidistreaming1_LDADD = @top_builddir@src/libfreebob.la -lasound 34 testmidistreaming1_LDADD = @top_builddir@src/libfreebob.la -lasound -lavc1394 trunk/libfreebob/tests/streaming/teststreaming2.c
r160 r183 165 165 166 166 freebob_streaming_get_capture_stream_name(dev,i,name,sizeof(name)); 167 fprintf(fid_in[i], "Channel name: %s\n" );167 fprintf(fid_in[i], "Channel name: %s\n",name); 168 168 switch (freebob_streaming_get_capture_stream_type(dev,i)) { 169 169 case freebob_stream_type_audio: trunk/libfreebob/tests/test-freebob.c
r169 r183 50 50 int node_id; 51 51 int node_id_set; 52 int time; 52 53 char* args[2]; 53 54 }; … … 55 56 // The options we understand. 56 57 static struct argp_option options[] = { 57 {"verbose", 'v', 0, 0, "Produce verbose output" }, 58 {"quiet", 'q', 0, 0, "Don't produce any output" }, 59 {"silent", 's', 0, OPTION_ALIAS }, 60 {"node", 'n', "id", 0, "Node to use" }, 61 {"port", 'p', "nr", 0, "IEEE1394 Port to use" }, 58 {"quiet", 'q', 0, 0, "Don't produce any output" }, 59 {"silent", 's', 0, OPTION_ALIAS }, 60 61 {"verbose", 'v', "level", 0, "Produce verbose output" }, 62 63 64 {"node", 'n', "id", 0, "Node to use" }, 65 {"port", 'p', "nr", 0, "IEEE1394 Port to use" }, 66 {"time", 't', "time", 0, "Workaround: sleep <time> usec after AVC command\n" }, 62 67 { 0 } 63 68 }; … … 79 84 break; 80 85 case 'v': 81 arguments->verbose = 1; 86 if (arg) { 87 arguments->verbose = strtol( arg, &tail, 0 ); 88 if ( errno ) { 89 fprintf( stderr, "Could not parse 'verbose' argument\n" ); 90 return ARGP_ERR_UNKNOWN; 91 } 92 } 93 break; 94 case 't': 95 if (arg) { 96 arguments->time = strtol( arg, &tail, 0 ); 97 if ( errno ) { 98 fprintf( stderr, "Could not parse 'time' argument\n" ); 99 return ARGP_ERR_UNKNOWN; 100 } 101 } 82 102 break; 83 103 case 'p': … … 143 163 arguments.node_id = 0; 144 164 arguments.node_id_set = 0; // if we don't specify a node, discover all 165 arguments.time = 0; 145 166 arguments.args[0] = ""; 146 167 arguments.args[1] = ""; … … 153 174 } 154 175 176 printf("verbose level = %d\n", arguments.verbose); 177 155 178 printf( "Using freebob library version: %s\n\n", freebob_get_version() ); 179 180 freebob_sleep_after_avc_command( arguments.time ); 156 181 157 182 if ( strcmp( arguments.args[0], "discover" ) == 0 ) {