#pragma once // Internal interface between the hardware stand-ins (shim/, SimHardware.cpp) // and the exported API (HexapodSimApi.cpp). Not visible to robot/ code. #include namespace simhw { // ---- Clock ---- void advanceMicros(uint32_t us); uint64_t nowMicros(); // ---- Serial ---- void serialFeed(const char* bytes, int len); // Unity -> robot Serial.read() int serialDrain(char* out, int cap); // robot Serial.print() -> Unity // ---- Servos (indexed by pin) ---- constexpr int MAX_PINS = 64; struct ServoPin { bool attached = false; int us = 1500; // Teensy Servo's default pulse after attach() uint32_t writes = 0; // writeMicroseconds() calls since start }; const ServoPin& servoPin(int pin); // ---- MPU6050 ---- void imuSetPresent(bool present); // Body-frame values as the chip would measure them: accel in g (reads +1 g // on the axis pointing up when at rest), gyro in deg/s. void imuSet(float ax, float ay, float az, float gx, float gy, float gz); // ---- Radio ---- void radioSetPresent(bool present); // Puts one packet "on air" using the protocol's channel/address/data rate. void radioSend(const uint8_t* bytes, int len); } // namespace simhw