35 #define SWO_CMD_START       0x64    36 #define SWO_CMD_STOP        0x65    37 #define SWO_CMD_READ        0x66    38 #define SWO_CMD_GET_SPEEDS  0x6e    40 #define SWO_PARAM_MODE      0x01    41 #define SWO_PARAM_BAUDRATE  0x02    42 #define SWO_PARAM_READ_SIZE 0x03    43 #define SWO_PARAM_BUFFER_SIZE   0x04    45 #define SWO_ERR         0x80000000    79     if (!devh || !baudrate || !size)
    89         log_err(ctx, 
"transport_start_write_read() failed: %s.",
    95     buf[1] = SWO_CMD_START;
    98     buf[3] = SWO_PARAM_MODE;
   102     buf[9] = SWO_PARAM_BAUDRATE;
   106     buf[15] = SWO_PARAM_BUFFER_SIZE;
   114         log_err(ctx, 
"transport_write() failed: %s.",
   122         log_err(ctx, 
"transport_read() failed: %s.",
   130         log_err(ctx, 
"Failed to start capture: 0x%x.", status);
   170         log_err(ctx, 
"transport_start_write_read() failed: %s.",
   176     buf[1] = SWO_CMD_STOP;
   182         log_err(ctx, 
"transport_write() failed: %s.",
   190         log_err(ctx, 
"transport_read() failed: %s.",
   198         log_err(ctx, 
"Failed to stop capture: 0x%x.", status);
   239     if (!devh || !buffer || !length)
   246         log_err(ctx, 
"transport_start_write_read() failed: %s.",
   252     buf[1] = SWO_CMD_READ;
   255     buf[3] = SWO_PARAM_READ_SIZE;
   263         log_err(ctx, 
"transport_write() failed: %s.",
   271         log_err(ctx, 
"transport_read() failed: %s.",
   280         log_err(ctx, 
"Received %u bytes but only %u bytes were "   281             "requested.", tmp, *length);
   291             log_err(ctx, 
"transport_start_read() failed: %s.",
   299             log_err(ctx, 
"transport_read() failed: %s.",
   306         log_err(ctx, 
"Failed to read data: 0x%x.", status);
   364         log_err(ctx, 
"transport_start_write_read() failed: %s.",
   370     buf[1] = SWO_CMD_GET_SPEEDS;
   373     buf[3] = SWO_PARAM_MODE;
   381         log_err(ctx, 
"transport_write() failed: %s.",
   389         log_err(ctx, 
"transport_read() failed: %s.",
   397         log_err(ctx, 
"Failed to retrieve speed information: 0x%x.",
   405         log_err(ctx, 
"Unexpected number of bytes received: %u.",
   414         log_err(ctx, 
"transport_start_read() failed: %s.",
   422         log_err(ctx, 
"transport_read() failed: %s.",
   431         log_err(ctx, 
"Minimum frequency divider is zero.");
   438         log_err(ctx, 
"Maximum frequency divider is less than minimum "   439             "frequency divider.");
   447         log_err(ctx, 
"Maximum prescaler is less than minimum " JAYLINK_API int jaylink_swo_read(struct jaylink_device_handle *devh, uint8_t *buffer, uint32_t *length)
Read SWO trace data. 
 
JAYLINK_PRIV int transport_read(struct jaylink_device_handle *devh, uint8_t *buffer, size_t length)
Read data from a device. 
 
uint32_t freq
Base frequency in Hz. 
 
JAYLINK_PRIV void log_err(const struct jaylink_context *ctx, const char *format,...)
 
JAYLINK_PRIV uint32_t buffer_get_u32(const uint8_t *buffer, size_t offset)
Read a 32-bit unsigned integer value from a buffer. 
 
uint32_t max_div
Maximum frequency divider. 
 
jaylink_swo_mode
Serial Wire Output (SWO) capture modes. 
 
Serial Wire Output (SWO) speed information. 
 
Opaque structure representing a libjaylink context. 
 
JAYLINK_API int jaylink_swo_start(struct jaylink_device_handle *devh, enum jaylink_swo_mode mode, uint32_t baudrate, uint32_t size)
Start SWO capture. 
 
Internal libjaylink header file. 
 
struct jaylink_context * ctx
libjaylink context. 
 
JAYLINK_API int jaylink_swo_stop(struct jaylink_device_handle *devh)
Stop SWO capture. 
 
size_t size
Size of the control block search area. 
 
JAYLINK_PRIV int transport_start_read(struct jaylink_device_handle *devh, size_t length)
Start a read operation for a device. 
 
Opaque structure representing a handle of a device. 
 
Public libjaylink header file to be used by applications. 
 
Universal Asynchronous Receiver Transmitter (UART). 
 
JAYLINK_API const char * jaylink_strerror(int error_code)
Return a human-readable description of a libjaylink error code. 
 
static struct jaylink_device_handle * devh
 
JAYLINK_API int jaylink_swo_get_speeds(struct jaylink_device_handle *devh, enum jaylink_swo_mode mode, struct jaylink_swo_speed *speed)
Retrieve SWO speeds. 
 
uint32_t max_prescaler
Maximum prescaler. 
 
uint32_t min_prescaler
Minimum prescaler. 
 
#define JAYLINK_API
Macro to mark public libjaylink API symbol. 
 
struct jaylink_device * dev
Device instance. 
 
JAYLINK_PRIV int transport_start_write_read(struct jaylink_device_handle *devh, size_t write_length, size_t read_length, bool has_command)
Start a write and read operation for a device. 
 
Device: unspecified error. 
 
JAYLINK_PRIV int transport_write(struct jaylink_device_handle *devh, const uint8_t *buffer, size_t length)
Write data to a device. 
 
uint32_t min_div
Minimum frequency divider. 
 
JAYLINK_PRIV void buffer_set_u32(uint8_t *buffer, uint32_t value, size_t offset)
Write a 32-bit unsigned integer value to a buffer.