Intersystem Communications (ISC) library for SIMPL#.
varbuffer=newbyte[]{0x80,0x0A,// \x80\x0A (Digital = 1, Index = 11)0xC0,0x00,0x09,0x52,// \xC0\x00\x09R (Analog = 1234, Index = 1)0xC8,0x05,(byte)'1',(byte)'2',(byte)'3',(byte)'4',0xFF// \xC8\x051234\xFF (Serial = "1234", Index = 6)};using(vartokenReader=newXSigTokenStreamReader(newMemoryStream(buffer))){XSigTokentoken;while((token=tokenReader.ReadXSigToken())!=null)CrestronConsole.PrintLine(token.GetType().Name+": "+token.Index+" = "+token);}CrestronConsole.PrintLine(string.Concat(XSigHelpers.GetBytes(15,true).Select(b =>"\\x"+b.ToString("X2")).ToArray()));using(varmemoryStream=newMemoryStream()){using(vartokenWriter=newXSigTokenStreamWriter(memoryStream,true))tokenWriter.WriteXSigData(newXSigToken[]{newXSigAnalogToken(1,0x1234),// aout1newXSigSerialToken(2,"Hello world!"),// aout2newXSigDigitalToken(3,true),// dig_out1});byte[]bytes=memoryStream.ToArray();CrestronConsole.PrintLine(string.Concat(bytes.Select(b =>"\\x"+b.ToString("X2")).ToArray());}Note: The indexes are 1-based, and are set based on the output signal index. For instance, if nothing has been expanded on an XSIG symbol in SIMPL Windows where you have aout1 and dig_out1, aout1 is index 1 and dig_out1 is index 2. If there are no signals defined in the aout## spots, then dig_out1 seems to take index 1.
Important: Always ensure that your signal alignment matches your code to mitigate error log spam. If your datatypes and data don't match the symbol defined in your SIMPL Windows program, your logfile will be full of "Signal Mismatch in receive of Intersystem Communications" messages.