Changeset 86

Show
Ignore:
Timestamp:
04/02/05 04:13:31 (19 years ago)
Author:
pieterpalmers
Message:

- Added channel naming support to XML generation

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/freebob/src/avdevice.cpp

    r85 r86  
    619619} 
    620620 
     621std::string AvDevice::getPlugChannelName(unsigned int direction, unsigned int plug, unsigned int channel) { 
     622    quadlet_t request[6]; 
     623    quadlet_t *response; 
     624        std::string str; 
     625 
     626        request[0] = AVC1394_CTYPE_STATUS 
     627                     | AVC1394_SUBUNIT_TYPE_UNIT 
     628                     | AVC1394_SUBUNIT_ID_IGNORE 
     629                     | AVC1394_COMMAND_PLUG_INFO 
     630                     | 0xC0; 
     631                    
     632        request[1]=0x00000000 | ((direction &0xFF)<<24) | (plug & 0xFF); 
     633        request[2]=0xFF040000 | ((channel & 0xFF) << 8); 
     634 
     635        response = Ieee1394Service::instance()->avcExecuteTransaction(m_iNodeId, request, 3, 3); 
     636 
     637        if ( response ) { 
     638                unsigned namelen=response[3]&0xFF; 
     639                char *buff=NULL; 
     640                 
     641                buff=new char[namelen+1]; 
     642                if (!buff) { 
     643                        debugError( "Could not allocate memory for temporary name buffer\n" ); 
     644                        return str; 
     645                } 
     646                 
     647                if(!strncpy(buff, (const char *)(response+3), namelen)) { 
     648                        buff[0]=0; 
     649                        debugError( "Could not copy name\n" ); 
     650                        str=""; 
     651                } else { 
     652                        buff[namelen]=0; 
     653                        str=buff; 
     654                } 
     655                delete buff; 
     656        } 
     657 
     658        return str; 
     659} 
     660 
     661 
    621662#define FREEBOB_DIRTY_XML_CHILD_ADD(XparentX,XnodeX,XvalueX)  if ( !xmlNewChild( XparentX, 0, BAD_CAST XnodeX, BAD_CAST XvalueX ) ) { debugError( "Couldn't create " XnodeX "node\n" ); return eFBRC_CreatingXMLDocFailed; } 
    622663 
     
    625666{ 
    626667        char tmpbuff[256]; 
     668        std::string name; 
    627669         
    628670        // At this point only plug 0 is used by the firmware for audio i/o 
     
    732774                        FREEBOB_DIRTY_XML_CHILD_ADD(stream, "DestinationPort",tmpbuff); 
    733775                         
    734                         sprintf(tmpbuff,"playback_%d_%d",i,j); 
    735                         FREEBOB_DIRTY_XML_CHILD_ADD(stream, "Name",tmpbuff); 
     776                        name=getInputPlugChannelName(plug, clusterInfo->getPosition(j)+1); 
     777                        xmlChar *enc_name=xmlEncodeEntitiesReentrant(root->doc, BAD_CAST name.c_str()); 
     778                        FREEBOB_DIRTY_XML_CHILD_ADD(stream, "Name",enc_name); 
     779                        xmlFree(enc_name); 
    736780                } 
    737781        } 
     
    819863                        FREEBOB_DIRTY_XML_CHILD_ADD(stream, "DestinationPort",tmpbuff); 
    820864                         
    821                         sprintf(tmpbuff,"playback_%d_%d",i,j); 
    822                         FREEBOB_DIRTY_XML_CHILD_ADD(stream, "Name",tmpbuff); 
     865                        name=getOutputPlugChannelName(plug, clusterInfo->getPosition(j)+1); 
     866         
     867                        xmlChar *enc_name=xmlEncodeEntitiesReentrant(root->doc, BAD_CAST name.c_str()); 
     868                        FREEBOB_DIRTY_XML_CHILD_ADD(stream, "Name",enc_name); 
     869                        xmlFree(enc_name); 
    823870                } 
    824871        } 
  • trunk/freebob/src/avdevice.h

    r85 r86  
    6161        { return m_configRom.getModelName(); } 
    6262 
    63  
    64  
     63    std::string getInputPlugChannelName(unsigned int plug, unsigned int channel) 
     64        { return getPlugChannelName(0x00,plug,channel); } 
     65    std::string getOutputPlugChannelName(unsigned int plug, unsigned int channel) 
     66        { return getPlugChannelName(0x01,plug,channel); } 
     67     
    6568    void execute( EStates state ); 
    6669     
     
    8588    void test(); 
    8689    FBReturnCodes addConnectionsToXml( xmlNodePtr root ); 
    87              
     90 
    8891    unsigned char getNbAsyncSourcePlugs()  
    8992        { return m_iNbAsyncSourcePlugs; } 
     
    99102        { return m_iNbExtDestinationPlugs; } 
    100103 
    101  protected: 
     104  
     105protected: 
    102106    AvDeviceSubunit *getSubunit(unsigned char type, unsigned char id); 
    103107 
    104108    FBReturnCodes create1394RawHandle(); 
    105109    FBReturnCodes enumerateSubUnits(); 
    106   
     110 
     111    std::string getPlugChannelName(unsigned int direction, unsigned int plug, unsigned int channel); 
     112      
    107113 private: 
    108114    ConfigRom m_configRom; 
  • trunk/freebob/src/ipchandler.cpp

    r80 r86  
    2828#include <fcntl.h> 
    2929#include <stdlib.h> 
     30#include <libavc1394/avc1394.h> 
     31#include <libavc1394/avc1394_vcr.h> 
    3032 
    3133#include "debugmodule.h" 
     
    3436#include "avdevicepool.h" 
    3537#include "cmhandler.h" 
     38#include "ieee1394service.h" 
    3639 
    3740IPCHandler* IPCHandler::m_pInstance = 0; 
     
    6265 
    6366        return handler->requestHandler(path, types,argv, argc, msg); 
     67} 
     68 
     69int request_handler_debug(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) { 
     70        IPCHandler *handler=(IPCHandler *)user_data; 
     71 
     72        if (!user_data) { 
     73                printf("user_data not valid\n"); 
     74                return -1; 
     75        } 
     76 
     77        return handler->requestHandlerDebug(path, types,argv, argc, msg); 
    6478} 
    6579 
     
    102116 
    103117    lo_server_thread_add_method(m_serverThread, "/freebob/request", "s", request_handler, (void *)this); 
     118    lo_server_thread_add_method(m_serverThread, "/freebob/debug", "s", request_handler_debug, (void *)this); 
     119    lo_server_thread_add_method(m_serverThread, "/freebob/debug", "sii", request_handler_debug, (void *)this); 
     120    lo_server_thread_add_method(m_serverThread, "/freebob/debug", "si", request_handler_debug, (void *)this); 
    104121 
    105122    return eFBRC_Success; 
     
    197214    return 0; 
    198215} 
     216 
     217int 
     218IPCHandler::requestHandlerDebug(const char *path, 
     219                           const char *types, 
     220                           lo_arg **argv, 
     221                           int argc, 
     222                           lo_message msg) 
     223{ 
     224    lo_address src=lo_message_get_source ( msg ); 
     225 
     226    debugPrint(DEBUG_LEVEL_IPC,"request from %s port %s (%s)\n", lo_address_get_hostname(src), lo_address_get_port(src), lo_address_get_url ( src ) ); 
     227    debugPrint(DEBUG_LEVEL_IPC,"to path: <%s>\n", path); 
     228 
     229    if(argc >= 1) { 
     230        if(strcasecmp(&argv[0]->s,"AvDevice.test")==0) { 
     231            if ( AvDevicePool::instance()->m_avDevices.size() ) { 
     232                AvDevice* pAvDevice 
     233                    = AvDevicePool::instance()->m_avDevices.front(); 
     234 
     235                if ( pAvDevice ) { 
     236                    pAvDevice->test(); 
     237                } 
     238            } 
     239        } else if((strcasecmp(&argv[0]->s,"setDebugLevel")==0) && argc==2) { 
     240         
     241                setDebugLevel(argv[1]->i); 
     242                 
     243        } else if((strcasecmp(&argv[0]->s,"plugInfo")==0) && argc==3) { 
     244                quadlet_t request[6]; 
     245                quadlet_t *response; 
     246 
     247                if ( AvDevicePool::instance()->m_avDevices.size() ) { 
     248                        AvDevice* pAvDevice 
     249                        = AvDevicePool::instance()->m_avDevices.front(); 
     250         
     251                        if ( pAvDevice ) { 
     252                                request[0] = AVC1394_CTYPE_STATUS 
     253                                        | AVC1394_SUBUNIT_TYPE_UNIT 
     254                                        | AVC1394_SUBUNIT_ID_IGNORE 
     255                                        | AVC1394_COMMAND_PLUG_INFO 
     256                                        | 0xC0; 
     257                                request[1]=argv[1]->i; 
     258                                request[2]=argv[2]->i; 
     259                         
     260                                response = Ieee1394Service::instance()->avcExecuteTransaction(pAvDevice->getNodeId(), request, 3, 20); 
     261                         
     262                                if ( response ) { 
     263                                        hexDump( (unsigned char *)response, 20 *sizeof(quadlet_t)); 
     264                         
     265                                } 
     266                        } 
     267                } 
     268                                         
     269 
     270        } 
     271         
     272    } 
     273    return 0; 
     274} 
  • trunk/freebob/src/ipchandler.h

    r71 r86  
    4343    int genericHandler(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg); 
    4444    int requestHandler(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg); 
     45    int requestHandlerDebug(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg); 
    4546     
    4647private: