private void SendOutputChange(OutputTriggerType TriggerType, string command) { //Command format for VT300/310e: //@@<L><ID><Command:4115/4114/5114><AABBCCDDEE><Checksum>0D0A //Thankfully, everything else about the commands are identical StringBuilder data = new StringBuilder(); data.Append(getOutputCommand(1, TriggerType)); data.Append(getOutputCommand(2, TriggerType)); data.Append(getOutputCommand(3, TriggerType)); data.Append(getOutputCommand(4, TriggerType)); data.Append(getOutputCommand(5, TriggerType)); //if there's nothing to do, don't bother sending the command; if (data.ToString().Equals("0202020202")) { return; } //If we're still here, there's a change so let's kick things off with the @@ and length = 16 StringBuilder sb = new StringBuilder("40400016"); sb.Append(getPaddedTrackerId()); sb.Append(command); sb.Append(data.ToString()); sb.Append(Utilities.CalcCRC16(sb.ToString())); sb.Append("0D0A"); //Utilities.SendCommand(tcpClient, sb.ToString()); }
public GPSTrackerOutput(string trackerId, int number, OutputState newState, OutputState lastState, OutputTriggerType triggerType) { this.TrackerId = trackerId; this.Number = number; //don't need to know the type from Server POV this.Type = OutputType.Unknown; this.ProposedState = newState; this.LastVerifiedState = lastState; this.TriggerType = triggerType; }
private string getOutputCommand(int outputNumber, OutputTriggerType TriggerType) { GPSTrackerOutput output = outputs.Find(m => m.Number == outputNumber); //for the 300/310, 02 means "leave the output at it's previous value" if ((output == null) || (output.TriggerType != TriggerType) || (output.ProposedState == output.LastVerifiedState) || (output.ProposedState == OutputState.Previous)) { return("02"); } if (output.ProposedState == OutputState.On) { return("00"); } if (output.ProposedState == OutputState.Off) { return("01"); } //Uhh.. why're we here? return("02"); }