//send as packed struct public void Send(FullDataFrame data) { byte[] dataBytes = new byte[messageLen]; //declare byte array and initialize its size System.IntPtr ptr = Marshal.AllocHGlobal(messageLen); //pointer to byte array Marshal.StructureToPtr(data, ptr, true); Marshal.Copy(ptr, dataBytes, 0, messageLen); Marshal.FreeHGlobal(ptr); Send(dataBytes); }
void Update() { float yaw = (transform.localRotation.eulerAngles.y - lastYaw) / Time.deltaTime; float roll = (transform.localRotation.eulerAngles.z - lastRoll) / Time.deltaTime; lastRoll = transform.localRotation.eulerAngles.z; lastYaw = transform.localRotation.eulerAngles.y; if (Time.time - lastSend < sendRate) { return; } float time = Time.time; //GearPosActual int gear = vehicleController.IsShifting ? -3 : vehicleController.Gear; //AcceleratorPedalPos int pedalPos = Mathf.RoundToInt(Mathf.Clamp01(vehicleController.accellInput) * 100); //DeceleratorPedalPos int brakePos = Mathf.RoundToInt(Mathf.Clamp(-1, 0, vehicleController.accellInput) * 100); //SteeringWheelAngle int wheelAngle = Mathf.RoundToInt(vehicleController.steerInput * 720); //VehicleSpeed float kmh = rb.velocity.magnitude * 3.6f; //TODO: calculate this from wheel rpm FullDataFrame frame = new FullDataFrame() { time = time, cruiseSpeed = 0f, rpm = vehicleController.RPM, gearPosActual = gear, gearPosTarget = vehicleController.Gear, accelleratorPos = pedalPos, deceleratorPos = brakePos, rollRate = roll, steeringWheelAngle = wheelAngle, vehicleSpeed = kmh, vehicleSpeedOverGround = kmh, wheelSpeedFL = vehicleController.WheelFL.rpm * 60, wheelSpeedFR = vehicleController.WheelFR.rpm * 60, wheelSpeedRL = vehicleController.WheelRL.rpm * 60, wheelSpeedRR = vehicleController.WheelRR.rpm * 60, yawRate = yaw }; dataStream.SendAsText(frame); }
public void SendAsText(FullDataFrame frame) { foreach (var connection in connections) { byte[] data; if (connection.IC) { data = Encoding.ASCII.GetBytes(frame.ToICCSV()); } else { data = Encoding.ASCII.GetBytes(frame.ToCSV()); } SendTCP(data, connection.client); } }
public void SendAsText(FullDataFrame frame) { foreach (var connection in connections) { if (connection != null) { byte[] data; if (connection.IC) { data = Encoding.ASCII.GetBytes(frame.ToICCSV()); SendTCP(data, connection.client); } else if (connection.events) { //do nothing here, event frames sent on their own } else { data = Encoding.ASCII.GetBytes(frame.ToCSV()); SendTCP(data, connection.client); } } } }
void Update() { float yaw = (transform.localRotation.eulerAngles.y - lastYaw) / Time.deltaTime; float roll = (transform.localRotation.eulerAngles.z - lastRoll) / Time.deltaTime; lastRoll = transform.localRotation.eulerAngles.z; lastYaw = transform.localRotation.eulerAngles.y; if (Time.time - lastSend < sendRate) { return; } float time = Time.time; //GearPosActual int gear = vehicleController.IsShifting ? -3 : vehicleController.Gear; //AcceleratorPedalPos int pedalPos = Mathf.RoundToInt(Mathf.Clamp01(vehicleController.accellInput) * 100); //DeceleratorPedalPos int brakePos = Mathf.RoundToInt(Mathf.Clamp(-1, 0, vehicleController.accellInput) * 100); //SteeringWheelAngle int wheelAngle = Mathf.RoundToInt(vehicleController.steerInput * 720); //VehicleSpeed float kmh = rb.velocity.magnitude * 3.6f; //TODO: calculate this from wheel rpm //CarLoc float carXLoc = TrackController.Instance.car.transform.position.x; float carYLoc = TrackController.Instance.car.transform.position.y; float carZLoc = TrackController.Instance.car.transform.position.z; float xAngle = TrackController.Instance.car.transform.rotation.eulerAngles.x; float yAngle = TrackController.Instance.car.transform.rotation.eulerAngles.y; float zAngle = TrackController.Instance.car.transform.rotation.eulerAngles.z; FullDataFrame frame = new FullDataFrame() { time = time, cruiseSpeed = 0f, rpm = vehicleController.RPM, gearPosActual = gear, gearPosTarget = vehicleController.Gear, accelleratorPos = pedalPos, deceleratorPos = brakePos, rollRate = roll, steeringWheelAngle = wheelAngle, vehicleSpeed = kmh, vehicleSpeedOverGround = kmh, wheelSpeedFL = vehicleController.WheelFL.rpm * 60, wheelSpeedFR = vehicleController.WheelFR.rpm * 60, wheelSpeedRL = vehicleController.WheelRL.rpm * 60, wheelSpeedRR = vehicleController.WheelRR.rpm * 60, yawRate = yaw, triggeredEvent1TimeStamp = 0f, carXLoc = carXLoc, carYLoc = carYLoc, carZLoc = carZLoc, xAngle = xAngle, yAngle = yAngle, zAngle = zAngle }; if (triggerTimeStamp1 > 0f || triggerTimeStamp2 > 0f || triggerTimeStamp3 > 0f) { TriggeredEventFrame eventFrame = new TriggeredEventFrame() { triggeredEvent1TimeStamp = triggerTimeStamp1, triggeredEvent2TimeStamp = triggerTimeStamp2, triggeredEvent3TimeStamp = triggerTimeStamp3 }; dataStream.SendAsText(eventFrame); } //add triggered events if required if (triggerTimeStamp1 > 0f) { frame.triggeredEvent1TimeStamp = triggerTimeStamp1; triggerTimeStamp1 = 0f; } if (triggerTimeStamp2 > 0f) { frame.triggeredEvent2TimeStamp = triggerTimeStamp2; triggerTimeStamp2 = 0f; } if (triggerTimeStamp3 > 0f) { frame.triggeredEvent3TimeStamp = triggerTimeStamp3; triggerTimeStamp3 = 0f; } dataStream.SendAsText(frame); }