Source usage

Gday all,

I'm working on source tracking with RMS, and have the following paradigm.

A row of 5 source buttons to select a source. (PC, Laptop, DVD, VCR, DocCamera.)
Two data projectors which can show any source, irrespective of what the other projector is showing. Each projector can be independently blanked.
One button for each projector, effectivly acting like a "take" button on a matrix switcher.

The usual process for displaying a source would be:
1 - Select the desired source from the row of sources.
2 - Specify which projector to show it on via "take" button.

I am trying to obtain source tracking for the 5 sources, to see what proportion of time they are being used (either on one or both projectors). When a projector is blanked, the Source Usage timer should consider that the equipment is not being used. (I'm interested more in behavioural use rather than an equipment odometer.)

Should I create a virtual device for the PC & Laptop, and try to shoe-horn the RMSTransportMod onto the virtual, or should I be using the RMSSrcUsage module instead? Given that my DVD & VCR are IR controlled I can't get any real transport feedback. I was hoping to track their usage in the same manner as PC, Laptop & DocCamera.

Any thoughts / guides appreciated.

Roger McLean
Swinburne University

Comments

  • dthorsondthorson Junior Member Posts: 103
    The source tracking can be easily handled by using i!-ConnectLinx.
    You can use the amx devices from the “i!-ConnectLinxStdFunctionList.xls” or create your own as I did here in the RMSMain.axi.
    .
    DEFINE_VARIABLE
    ///////////////////////////////////////////////////////
    // Devices
    ///////////////////////////////////////////////////////
    // i-ConnectLinx paramater storage
    VOLATILE SLONG   asnNumberLevelArgValues[3]
    VOLATILE CHAR    acStringEnumArgValues[3][50]
    
    (*Custom Sources*)
    	//	PC_SEL			   vdvCLActions(1051)	TpButton(101)
    	//	MAC_SEL			  vdvCLActions(1052)   TpButton(102)
    	//	LAPTOP_SEL		 vdvCLActions(1053)  TpButton(104)
    	//	REAR_VGA_SEL	        vdvCLActions(1054)  TpButton(105)
    	//	DOC_CAM_SEL		vdvCLActions(1055)  TpButton(110)
    	//	AUX_CVIDEO_SEL	       vdvCLActions(1056)  TpButton(111)
    	//	REAR_CVIDEO_SEL	       vdvCLActions(1057)  TpButton(112)
    	//	VCR_SEL			    vdvCLActions(1058)	TpButton(4)
    	//	DVD_SEL		 	   vdvCLActions(1059)	TpButton(3)
    // i!-ConnectLinx Standard Actions
    VOLATILE INTEGER nchCLButtons[] =
    {
      1051,	// Select PC
      1052,	// Select MAC
      1053,	// Select Podium Laptop
      1054,	// Select Rear VGA
      1055,	// Select DocCam
      1056,	// Select Podium AUX
      1057,	// Select Rear AUX
      1058,	// Select VCR
      1059	// Select DVD
    }
    
    // i!-ConnectLinx Touch Panel Buttons
    VOLATILE INTEGER nchCLPanelButtons[] =
    {
      101,	// Select PC
      102,	// Select MAC
      104,	// Select Podium Laptop
      105,	// Select Rear VGA
      110,	// Select DocCam
      111,	// Select Podium AUX
      112,	// Select Rear AUX
      4,	// Select VCR
      3	// Select DVD
    }
    DEFINE_START
    // i!-ConnectLinxEngineMod
    DEFINE_MODULE 'i!-ConnectLinxEngineMod' mdlCL(vdvCLActions)
    (*******************************************)
    (* DATA: i!-ConnectLinx Engine             *)
    (*******************************************)
    DATA_EVENT[vdvCLActions]
    {
      STRING:
      {
        STACK_VAR
        CHAR    cTemp[1000]
        CHAR    cTrash[10]
        INTEGER nId
    
        // Look for arguments
        IF (LEFT_STRING(DATA.TEXT,3) = 'ARG')
        {
          // Get arg ID
          cTemp = DATA.Text
          cTrash = REMOVE_STRING(cTemp,'ARG',1)
          nId = ATOI(cTemp)
          cTrash = REMOVE_STRING(cTemp,'-',1)
    
          // Store it if we have room
          IF (MAX_LENGTH_ARRAY(acStringEnumArgValues) >= nId)
            acStringEnumArgValues [nId] = cTemp
        }
      }
    
      ONLINE:
      {
        // Set Room Info
        SEND_COMMAND DATA.DEVICE,'SET ROOM INFO-Custom Room Name HERE'
    
        // System Controls
        //   Power On (1001)
        //   Power Off (1002)
        //SEND_COMMAND DATA.DEVICE,'ADD STD-1001-1002'
    
    	(*Custom Sources*)
    	SEND_COMMAND vdvCLActions,'ADD ACTION-1051,Select PC,,Sources'
    	SEND_COMMAND vdvCLActions,'ADD ACTION-1052,Select MAC,,Sources'
    	SEND_COMMAND vdvCLActions,'ADD ACTION-1053,Select Podium Laptop,,Sources'
    	SEND_COMMAND vdvCLActions,'ADD ACTION-1054,Select Rear Panel VGA,,Sources'
    	SEND_COMMAND vdvCLActions,'ADD ACTION-1055,Select Document Camera,,Sources'
    	SEND_COMMAND vdvCLActions,'ADD ACTION-1056,Select Podium AUX Video,,Sources'
    	SEND_COMMAND vdvCLActions,'ADD ACTION-1057,Select Rear Panel AUX Video,,Sources'
    	SEND_COMMAND vdvCLActions,'ADD ACTION-1058,Select VCR,,Sources'
    	SEND_COMMAND vdvCLActions,'ADD ACTION-1059,Select DVD,,Sources'
    	
    	(*Macro for projector power*)
    	SEND_COMMAND DATA.DEVICE,'ADD STD-1101-1102'
    	SEND_COMMAND vdvCLActions,"'ADD MACRO-Projector Power OFF'"
    	SEND_COMMAND vdvCLActions,"'ADD MACRO-Projector Power ON'"
    	
    	(*Macro for system power*)
    	SEND_COMMAND DATA.DEVICE,'ADD STD-1002'
    	SEND_COMMAND vdvCLActions,"'ADD MACRO-System Power OFF'"
    	//SEND_COMMAND vdvCLActions,"'ADD MACRO-System Power ON'"
      }
    }
    (*******************************************)
    (* BUTTON: i!-ConnectLinx Engine           *)
    (*******************************************)
    BUTTON_EVENT [vdvCLActions,nchCLButtons]
    {
      PUSH:
      {
        DO_PUSH(vdvTPa,nchCLPanelButtons[GET_LAST(nchCLButtons)])
      }
    }
    
    
    (*******************************************)
    (* CHANNEL: i!-ConnectLinx Feedback        *)
    (*******************************************)
    CHANNEL_EVENT [vdvTPa,nchCLPanelButtons]
    {
      ON:
        ON[vdvCLActions,nchCLButtons[GET_LAST(nchCLPanelButtons)]]
      OFF:
        OFF[vdvCLActions,nchCLButtons[GET_LAST(nchCLPanelButtons)]]
    }
    

    This is all you need to add in your MAIN.axs file. RMS will do the rest.
    DEFINE_DEVICE
    // vdvCLActions
    vdvCLActions			= 33002:1:0
    
    DEFINE_PROGRAM
    (* ASSET MANAGER SOURCE MONITORING *)
    [vdvCLActions,1051] = (iSOURCE_SEL = PC_SEL)
    [vdvCLActions,1052] = (iSOURCE_SEL = MAC_SEL)
    [vdvCLActions,1053] = (iSOURCE_SEL = LAPTOP_SEL)
    [vdvCLActions,1054] = (iSOURCE_SEL = REAR_VGA_SEL)
    [vdvCLActions,1055] = (iSOURCE_SEL = DOC_CAM_SEL)
    [vdvCLActions,1056] = (iSOURCE_SEL = AUX_CVIDEO_SEL)
    [vdvCLActions,1057] = (iSOURCE_SEL = REAR_CVIDEO_SEL)
    [vdvCLActions,1058] = (iSOURCE_SEL = VCR_SEL)
    [vdvCLActions,1059] = (iSOURCE_SEL = DVD_SEL)
    
  • annuelloannuello Junior Member Posts: 294
    Thanks David.

    Your references to i!-ConnectLinx got me on the right track. When initially reading through the RMS Programmer documentation I skipped the chapter on "Upgrading from v1.0" since I'm starting out with v3.0. As luck would have it, that chapter gives quite a nice description of the changes between v1 & v2. The section on "Source Usage & Multiple Displays" was particularly useful in my situation.

    Out of curiosity, are there any guidelines with channel allocations for the vdvCLActions? Am I free to use whatever I want? Are 0-999 reserved for anything in particular?

    Yours,
    Roger McLean
    Swinburne University
  • dunnpdunnp Junior Member Posts: 12
    ConnectLinx parameters

    Hi Roger.
    AMX Aust can give you the complete list of Connectlinx parameters. There's a partial list in the RMS Programmer's Guide somewhere from memory.
    ...Phil Dunn
  • annuelloannuello Junior Member Posts: 294
    I've got the XLS spreadsheet version - it gets installed along with i!-ConnectLinx. However, I'm looking for a complete list that covers the whole range of IDs. Presumably there is a range reserved for AMX use (1-999?), and another for custom use, similar to how device ranges are reserved for virtual devices/AXlink boxes/Modero panels etc.

    I'd like to put all my IDs into a suitable range that will not be encroached upon by the AMX Standard Action List (SAL) in future revisions. Currently I am picking small ranges within the SAL range (1001 - 1887) that are not currently utilised. It's working fine for my purposes - I just don't want it to cause subtle problems later on if the SAL is enhanced to use the "spare" IDs that I'm currently using...

    Roger McLean
    Swinburne University
  • dunnpdunnp Junior Member Posts: 12
    Multi-source usage

    Roger,
    Another tip - to track multiple sources, don't forget to set set RMSSetMultiSource(TRUE). That will capture true select time for all sources regardless of which projector is used. Otherwise sources are treated as mutually exlcusive & you'll get inaccurate data.

    Source usage can never be treated as precision data. There are too many variables especially with IR-controlled devices - eg user pressed play or stop on the DVD, not the panel. Or the user presses Laptop then walks out of the theatre leaving everything running for hours.

    The best you can hope for is approximate - but still useful - figures. But don't tell management they are anything but accurate!!

    Cheers.
    ...Phil
    (Brisbane, Oz)
  • annuelloannuello Junior Member Posts: 294
    I've got MultiSource turned on, though I'm not sure that it gets utilised or not, given that I'm using non-standard IDs. I'm sticking to non-standar at the moment since it lets me use cusom names for the devices as well. That way my manager is familiar with the terminology that is presented to him in RMS.

    Yeah, I thought about the IR controlled issue. My approach is to track the source that I'm sending to the projector rather than transport. Given that we have blanking available on both our projectors, I'm taking the approach that lecturers won't want to show a huge blue screen (no sync) for extended periods of time. Looking at my past logs they tend to blank the projector if they don't want it on. (When a projector is blanked, my SourceSelect turns off that channel in ConnectLinx, so I'm not counting blank-minutes.) When a projector is blanked for 15 minutes, it is automatically turned off by the AMX master.

    Oh, and as for people leaving the system running, I've got PIRs in the rooms. If there is no movement for 2 hours, a "Confim shutdown" appears on the touch panel. If it is not confirmed or cancelled within 5 mintues, the system shuts down everything. (2 hours is suitable for a long media class where they are sitting very still watching a movie.) I've also got a midnight shutdown (time synced), with no confirmation.

    Thanks for your tips. :)
    Roger McLean.
    Swinburne University.
Sign In or Register to comment.