AnasSarkiz/usb-c-pd-brushed-motor

USB-C PD-powered motor controller with protected input, selectable 5/9/12 V buck supply, MCU qualification, PWM H-bridge drive, overvoltage sensing, regenerative energy-dump resistors, and safety interlocks.

Version
0.0.1-a48-cloud-pipeline9-unrouted-c41d79a-305b1e7a
License
unset
Stars
0

firmware/stusb4500_request.h

/* RAM-PDO transaction only: success is not a negotiated power contract. */
#ifndef MOTOR_STUSB4500_REQUEST_H
#define MOTOR_STUSB4500_REQUEST_H
#include "stusb4500_rx.h"

enum stusb_request_result {
  STUSB_REQUEST_SENT,
  STUSB_REQUEST_INVALID_ARGUMENT,
  STUSB_REQUEST_UNSAFE_PRECONDITION,
  STUSB_REQUEST_REUSED_TOKEN,
  STUSB_REQUEST_LATCHED,
  STUSB_REQUEST_IO_ERROR,
  STUSB_REQUEST_LATE,
  STUSB_REQUEST_DETACHED,
  STUSB_REQUEST_READBACK_MISMATCH,
  STUSB_REQUEST_PENDING_FAULT
};
struct stusb_request_state {
  uint32_t last_request_id, completed_request_id, command_started_us;
  bool faulted;
};
struct stusb_request {
  struct stusb_request_state *state;
  const struct pd_plan *plan;
  uint32_t request_id, source_generation, started_us;
  uint8_t selector_bits;
  /* Supplied by the target adapter after actual safe GPIO ordering.
   * These flags are not electrical measurements or proof of inhibition. */
  bool power_path_inhibited, bridge_inhibited, feedback_settled;
};
/* Start with zero state. A failed/ambiguous transaction latches this state;
 * a recovery must explicitly reset PD provenance with motor power inhibited.
 * Success only means RAM readback and SEND_COMMAND acknowledgement. Fresh
 * Source_Capabilities/Accept/PS_RDY plus RDO/PE/ADC checks remain required. */
enum stusb_request_result stusb_request_contract(const struct stusb_bus *bus,
                                                const struct stusb_request *request);
#endif