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:
toggle quoted message
Show quoted text
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
?
?
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.?
?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!).