¿ªÔÆÌåÓý

ctrl + shift + ? for shortcuts
© 2025 Groups.io

Re: Crosspoint ECCON on 4-Series


 

¿ªÔÆÌåÓý

More years ago than I can count I started driving operations in my programs with serial strings.? When the user selects to watch a source a serial string is generated and that drives all the xpoint connections, powering on a/v gear, etc. (I also used the same module to drive connections for controlling thermostats and other non-a/v gear).? At that time I wrote a small S+ module that accepted one of these strings and then drove the operation of the SimplWin equipment crosspoint connect symbol.? I've tweaked the S+ module in very minor ways over the years but the basic functionality has worked on 2-series, 3-series, and now on the CP4 running my home.? If the serial string it was meant to accept isn't compatible with the way you write your software then you can change it to suit your needs but it should provide a good example of how to drive connecting/disconnecting xpoints.? I've pasted the S+ code below.

Hope this helps

Jay

/*
? SIMPL+ Module Information
*/
/*
Dealer Name:??? ???
System Name:
System Number:
Programmer:??? ??? ???
Comments:
*/

/*
? Compiler Directives
*/
#SYMBOL_NAME "xpoint Manager v3"
#HINT "Manages crosspoint request traffic and disconnects unused connections"
#CATEGORY "5"
#DEFAULT_VOLATILE
#ENABLE_STACK_CHECKING
//#ENABLE_TRACE

#HELP_BEGIN
?? Accepts a string formatted as EnnnnnCnnnnnAVn followed by a \x0D
?? where the nnnnn following the E is a 5 digit equipment id (leading
?? zeros are required to pad the number to 5 digits and the nnnnn
?? folling the C is the control id.? Leading zeros are also required.
?? AV is followed by a 0 or 1 that specifies if this is an A/V equipment
?? connection or not
#HELP_END

/*
? DIGITAL, ANALOG and SERIAL INPUTS and OUTPUTS
*/
DIGITAL_INPUT Disconnect;
DIGITAL_INPUT _SKIP_;
BUFFER_INPUT connect$[1024];

DIGITAL_OUTPUT _SKIP_, _SKIP_;
DIGITAL_OUTPUT Connect, DiscFromC;
ANALOG_OUTPUT ControlID, EquipmentID;

/*
? Global Variables
*/

string command$[128];??? ??? ??? ??? ??? //storage for command
integer Semaphore;??? ??? ??? ??? ??? ??? //semaphore
integer Last_ControlID;??? ??? ??? ??? ??? //last xpoint control id value

/*
? Functions
*/
callback GatherEventHandler Process_Command(GatherEventArgs Args)
{
??? string temp$[5];
??? integer c;
??? integer cid, eid, av_flag;

??? command$ = Args.RxString;
??? trace("xpoint Manager - connect = %s\n", command$);
??? ???
??? while(Semaphore)??? ??? ??? ??? //wait for semaphore
??? {
??? ??? ProcessLogic();
??? }
??? ???
??? Semaphore = 1;??? ??? ??? ??? ??? // set semaphore
??? ???
???
??? //extract equipment id
??? temp$ = mid(command$, 2, 5);
??? eid = atoi(temp$);

??? ???
??? //extract control id
??? temp$ = mid(command$, 8, 5);
??? cid = atoi(temp$);
???
??? //extract AV flag
??? temp$ = mid(command$, 15, 1);
??? av_flag = atoi(temp$);
??? ??? ??? ??? ???
??? command$ = "";
??? ???????????????
??? trace("xpoint Manager - eid = %d\n", eid);
??? trace("xpoint Manager - cid = %d\n", cid);
??? trace("xpoint Manager - av_flag = %d\n", av_flag);
???
??? //perform digital signal sequence
??? if (eid = 0)??? ??? ??? ??? ??? //is this just a disconnect command
??? {
??? ??? trace("xpoint Manager - eid = 0, perform disconnect\n");
??? ??? if ((av_flag = 1)??? ??? ??? //if this is an av connnection command
??? ??? ??? && (cid = Last_ControlID))//need to clear last connection if we???
??? ??? {??? ??? ??? ??? ??? ??? ??? //are deleting it.? Otherwise that
??? ??? ??? Last_ControlID = 0;??? ??? //connection is still valid
??? ??? }
???
??? ??? //perform the disconnect
??? ??? EquipmentID = eid;
??? ??? ControlID = cid;
??? ??? pulse(2, DiscFromC);
??? ??? delay(2);
??? }
??? else
??? {
??? ??? trace("xpoint Manager - connect command\n");
??? ??? //Disconnect priror connection
??? ??? if ((av_flag = 1)??? ??? ??? //if this is an av connnection command
??? ??? ??? && (cid != Last_ControlID)//Don't disconnect if same control point
??? ??? ??? && (Last_ControlID != 0))//make sure there was a prior connection
??? ??? {
??? ??? ??? trace("xpoint Manager - disconnect prior to connect\n");
??? ??? ??? ControlID = Last_ControlID;
??? ??? ??? EquipmentID = 0;
??? ??? ??? pulse(2, DiscFromC);
??? ??? ??? delay(2);
??? ??? }
? ??? ??? ??? ??? ???
??? ??? if (av_flag = 1)??? ??? ??? //only save if it is an av device
??? ??? {
??? ??? ??? Last_ControlID = cid;??? //save new connection??? ??? ??? ???
??? ??? }
???
??? ??? //perform the new connection
??? ??? EquipmentID = eid;
??? ??? ControlID = cid;
??? ??? pulse(2, DiscFromC);
??? ??? delay(2);
??? ??? pulse(2, Connect);
??? ??? delay(2);
??? }
??? ???
??? Semaphore = 0;??? ??? ??? ??? ??? // release semaphore
??? RearmGatherAsync(Args.input);
}

/*
? Event Handlers
*/
THREADSAFE PUSH Disconnect
{
??? while(Semaphore)??? ??? ??? ??? ??? //wait for semaphore
??? {
??? ??? ProcessLogic();
??? }
???
??? Semaphore = 1;??? ??? ??? ??? ??? ??? // set semaphore

??? if (Last_ControlID != 0)??? ??? ??? //check if we have a connection
??? {
??? ??? ControlID = Last_ControlID;??? ??? //disconnect
??? ??? EquipmentID = 0;
??? ??? pulse(2, DiscFromC);
??? ??? Last_ControlID = 0;
??? }

??? Semaphore = 0;??? ??? ??? ??? ??? ??? // release semaphore
}

CHANGE connect$
{
??? GatherAsync("\x0D", connect$, Process_Command);
}
/*
? Main()
*/
Function Main()
{
??? WaitForInitializationComplete();
??? command$ = "";
??? Semaphore = 0;
}


On 6/12/2021 3:09 PM, Ryan Cunningham via groups.io wrote:

Thanks Lincoln, I¡¯ll give the SAWPULSE with 5d a try. So far I only have 3 ECCONNECT in the project for some handheld remotes. Once I reprogram the audio for NAX and video for NVX I will redo the touch panels and the rest of the equipment with cross points.?

Ryan Cunningham?

On Jun 12, 2021, at 1:50 PM, Lincoln King-Cliby <lincoln@...> wrote:

?

As (one of the) the originators of the SAWPULSE / SMV technique my house would be very broken if the behavior changed on the 4-series ¨C my house has been running on a PRO4 since beta and that logic has been working flawlessly without modification from the PRO3 implementation. These days I generally use a SAWPULSE with 5d as the parameter [I think I had a reason for 5d rather than 1d but it¡¯s not coming to me] but in the past I¡¯ve used a SMV with .1s and I¡¯m sure I still have some of that floating around in the background.

?

To ask the stupid question: Are you sure there¡¯s not an ECCONNECT somewhere else that may be ¡°fighting¡± you on the crosspoint connection?

?

--

Lincoln King-Cliby, CTS, DMC-E-4K/T/D
Commercial Market Director
Sr. Systems Architect | Crestron Certified Master Programmer (Diamond)
ControlWorks Consulting, LLC
Direct: (+1)440.771.4807 | Cleveland: (+1)440.449.1100? | Boston: (+1)508.695.0188 | DC: (+1)202.381.9070? | Fax: (+1)440.449.1106
Crestron Services Provider | Biamp Authorized Independent Programmers | Extron Qualified Independent Programmer

?

From: [email protected] [mailto:[email protected]] On Behalf Of Ryan Cunningham via groups.io
Sent: Saturday, June 12, 2021 3:50 PM
To: [email protected]
Subject: Re: [crestron] Crosspoint ECCON on 4-Series

?

Sorry, I proofread my post but I guess I was tired and I typed it incorrectly.

OUT is tied to Disc_From_E,?

OUT* is tied to CONNECT. I tried 1D, .5s, 1s, with no change.?

Ryan Cunningham?



On Jun 12, 2021, at 10:20 AM, Oliver Hall <oliver.hall@...> wrote:

?The XPoint connection logic isn't *timing* critical - we use the analog serial logic wave one-shot to make/break the connection - it's all done in two consecutive logic waves, and it's been 100% deterministic on 3-series.? I haven't done a lot with it on 4-series, but I'd be surprised if that had changed without trigging a whole host of problems (not to say it couldn't happen!).

Join [email protected] to automatically receive all group messages.