Functions

libswd.c File Reference

#include <urjtag/libswd.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

Functions

int swd_bin8_parity_even (char *data, char *parity)
 Data parity calculator, calculates even parity on char type.
int swd_bin32_parity_even (int *data, char *parity)
 Data parity calculator, calculates even parity on integer type.
int swd_bin8_print (char *data)
 Prints binary data of a char value on the screen.
int swd_bin32_print (int *data)
 Prints binary data of an integer value on the screen.
char * swd_bin8_string (char *data)
 Generates string containing binary data of a char value.
char * swd_bin32_string (int *data)
 Generates string containing binary data of an integer value.
int swd_bin8_bitswap (unsigned char *buffer, int bitcount)
 Bit swap helper function that reverse bit order in char *buffer.
int swd_bin32_bitswap (unsigned int *buffer, int bitcount)
 Bit swap helper function that reverse bit order in int *buffer.
int swd_cmd_queue_init (swd_cmd_t *cmdq)
 Initialize new queue element in memory that becomes a queue root.
swd_cmd_tswd_cmd_queue_find_root (swd_cmd_t *cmdq)
 Find queue root (first element).
swd_cmd_tswd_cmd_queue_find_tail (swd_cmd_t *cmdq)
 Find queue tail (last element).
int swd_cmd_queue_append (swd_cmd_t *cmdq, swd_cmd_t *cmd)
 Append element pointed by *cmd at the end of the quque pointed by *cmdq.
int swd_cmd_queue_free (swd_cmd_t *cmdq)
 Free queue pointed by *cmdq element.
int swd_cmd_queue_free_head (swd_cmd_t *cmdq)
 Free queue head up to *cmdq element.
int swd_cmd_queue_free_tail (swd_cmd_t *cmdq)
 Free queue tail starting after *cmdq element.
int swd_cmd_queue_append_mosi_request (swd_ctx_t *swdctx, char *request)
 Appends command queue with SWD Request packet header.
int swd_cmd_queue_append_mosi_trn (swd_ctx_t *swdctx)
 Append command queue with Turnaround activating MOSI mode.
int swd_cmd_queue_append_miso_trn (swd_ctx_t *swdctx)
 Append command queue with Turnaround activating MISO mode.
int swd_cmd_queue_append_miso_nbit (swd_ctx_t *swdctx, char **data, int count)
 Append command queue with bus binary read bit-by-bit operation.
int swd_cmd_queue_append_mosi_nbit (swd_ctx_t *swdctx, char *data, int count)
 Append command queue with bus binary write bit-by-bit operation.
int swd_cmd_queue_append_mosi_parity (swd_ctx_t *swdctx, char *parity)
 Append command queue with parity bit write.
int swd_cmd_queue_append_miso_parity (swd_ctx_t *swdctx, char *parity)
 Append command queue with parity bit read.
int swd_cmd_queue_append_miso_data (swd_ctx_t *swdctx, int *data)
 Append command queue with data read.
int swd_cmd_queue_append_miso_data_p (swd_ctx_t *swdctx, int *data, char *parity)
 Append command queue with data and parity read.
int swd_cmd_queue_append_miso_n_data_p (swd_ctx_t *swdctx, int **data, char **parity, int count)
 Append command queue with series of data and parity read.
int swd_cmd_queue_append_mosi_data (swd_ctx_t *swdctx, int *data)
 Append command queue with data and parity write.
int swd_cmd_queue_append_mosi_data_ap (swd_ctx_t *swdctx, int *data)
 Append command queue with data and automatic parity write.
int swd_cmd_queue_append_mosi_data_p (swd_ctx_t *swdctx, int *data, char *parity)
 Append command queue with data and provided parity write.
int swd_cmd_append_mosi_n_data_ap (swd_ctx_t *swdctx, int **data, int count)
 Append command queue with series of data and automatic parity writes.
int swd_cmd_append_mosi_n_data_p (swd_ctx_t *swdctx, int **data, char **parity, int count)
 Append command queue with series of data and provided parity writes.
int swd_cmd_queue_append_miso_ack (swd_ctx_t *swdctx, char *ack)
 Append queue with ACK read.
int swd_cmd_queue_append_mosi_control (swd_ctx_t *swdctx, char *ctlmsg, int len)
 Append command queue with len-octet size control seruence.
int swd_cmd_queue_append_swdpreset (swd_ctx_t *swdctx)
 Append command queue with SW-DP-RESET sequence.
int swd_cmd_queue_append_jtag2swd (swd_ctx_t *swdctx)
 Append command queue with JTAG-TO-SWD DAP-switch sequence.
int swd_cmd_queue_append_swd2jtag (swd_ctx_t *swdctx)
 Append command queue with SWD-TO-JTAG DAP-switch sequence.
int swd_bus_setdir_mosi (swd_ctx_t *swdctx)
 Append command queue with TRN WRITE/MOSI.
int swd_bus_setdir_miso (swd_ctx_t *swdctx)
 Append command queue with TRN READ/MISO.
int swd_cmd_queue_flush (swd_ctx_t *swdctx, swd_operation_t operation)
 Flush command queue contents into interface driver.
int swd_mosi_request (swd_ctx_t *swdctx, swd_operation_t operation, char *APnDP, char *RnW, char *addr)
 Perform Request.
int swd_miso_ack (swd_ctx_t *swdctx, swd_operation_t operation, char *ack)
 Perform ACK read into *ack and verify received data.
int swd_mosi_data_p (swd_ctx_t *swdctx, swd_operation_t operation, int *data, char *parity)
 Perform (MOSI) data write with provided parity value.
int swd_mosi_data_ap (swd_ctx_t *swdctx, swd_operation_t operation, int *data)
 Perform (MOSI) data write with automatic parity calculation.
int swd_miso_data_p (swd_ctx_t *swdctx, swd_operation_t operation, int *data, char *parity)
 Perform (MISO) data read.
int swd_idcode (swd_ctx_t *swdctx, swd_operation_t operation, int *idcode, char *ack, char *parity)
 Read target's IDCODE register value.
int swd_log (swd_loglevel_t loglevel, char *msg)
char * swd_error_string (swd_error_code_t error)
swd_ctx_tswd_init (void)
 LibSWD initialization routine.
int swd_deinit_ctx (swd_ctx_t *swdctx)
 De-initialize selected swd context and free its memory.
int swd_deinit_cmdq (swd_ctx_t *swdctx)
 De-initialize command queue and free its memory on selected swd context.
int swd_deinit (swd_ctx_t *swdctx)
 De-initialize selected swd context and its command queue.

Detailed Description


Function Documentation

int swd_bin32_bitswap ( unsigned int *  buffer,
int  bitcount 
)

Bit swap helper function that reverse bit order in int *buffer.

Most Significant Bit becomes Least Significant Bit. It is possible to swap only n-bits from int (32-bit) *buffer.

Parameters:
*buffer unsigned char (32-bit) data pointer.
bitcount how many bits to swap.
Returns:
swapped bit count (positive) or error code (negative).
int swd_bin32_parity_even ( int *  data,
char *  parity 
)

Data parity calculator, calculates even parity on integer type.

Parameters:
*data source data pointer.
*parity resulting data pointer.
Returns:
negative value on error, 0 or 1 as parity result.
int swd_bin32_print ( int *  data  ) 

Prints binary data of an integer value on the screen.

Parameters:
*data source data pointer.
Returns:
number of characters printed.
char* swd_bin32_string ( int *  data  ) 

Generates string containing binary data of an integer value.

Parameters:
*data source data pointer.
Returns:
pointer to the resulting string.
int swd_bin8_bitswap ( unsigned char *  buffer,
int  bitcount 
)

Bit swap helper function that reverse bit order in char *buffer.

Most Significant Bit becomes Least Significant Bit. It is possible to swap only n-bits from char (8-bit) *buffer.

Parameters:
*buffer unsigned char (8-bit) data pointer.
bitcount how many bits to swap.
Returns:
swapped bit count (positive) or error code (negative).
int swd_bin8_parity_even ( char *  data,
char *  parity 
)

Data parity calculator, calculates even parity on char type.

Parameters:
*data source data pointer.
*parity resulting data pointer.
Returns:
negative value on error, 0 or 1 as parity result.
int swd_bin8_print ( char *  data  ) 

Prints binary data of a char value on the screen.

Parameters:
*data source data pointer.
Returns:
number of characters printed.
char* swd_bin8_string ( char *  data  ) 

Generates string containing binary data of a char value.

Parameters:
*data source data pointer.
Returns:
pointer to the resulting string.
int swd_bus_setdir_miso ( swd_ctx_t swdctx  ) 

Append command queue with TRN READ/MISO.

Parameters:
*swdctx swd context pointer.
Returns:
number of elements appended, or SWD_ERROR_CODE on failure.
int swd_bus_setdir_mosi ( swd_ctx_t swdctx  ) 

Append command queue with TRN WRITE/MOSI.

Parameters:
*swdctx swd context pointer.
Returns:
number of elements appended, or SWD_ERROR_CODE on failure.
int swd_cmd_append_mosi_n_data_ap ( swd_ctx_t swdctx,
int **  data,
int  count 
)

Append command queue with series of data and automatic parity writes.

Parameters:
*swdctx swd context pointer.
**data data value array pointer.
count number of (data+parity) elements to read.
Returns:
number of elements appended (2*count), or SWD_ERROR_CODE on failure.
int swd_cmd_append_mosi_n_data_p ( swd_ctx_t swdctx,
int **  data,
char **  parity,
int  count 
)

Append command queue with series of data and provided parity writes.

Parameters:
*swdctx swd context pointer.
**data data value array pointer.
**parity parity value array pointer.
count number of (data+parity) elements to read.
Returns:
number of elements appended (2*count), or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append ( swd_cmd_t cmdq,
swd_cmd_t cmd 
)

Append element pointed by *cmd at the end of the quque pointed by *cmdq.

Parameters:
*cmdq pointer to any element on command queue
*cmd pointer to the command to be appended
Returns:
number of appended elements (one), SWD_ERROR_CODE on failure
int swd_cmd_queue_append_jtag2swd ( swd_ctx_t swdctx  ) 

Append command queue with JTAG-TO-SWD DAP-switch sequence.

Parameters:
*swdctx swd context pointer.
Returns:
number of elements appended, or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_miso_ack ( swd_ctx_t swdctx,
char *  ack 
)

Append queue with ACK read.

Parameters:
*swdctx swd context pointer.
*ack packet value pointer.
Returns:
number of elements appended (1), or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_miso_data ( swd_ctx_t swdctx,
int *  data 
)

Append command queue with data read.

Parameters:
*swdctx swd context pointer.
*data data pointer.
Returns:
of elements appended (1), or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_miso_data_p ( swd_ctx_t swdctx,
int *  data,
char *  parity 
)

Append command queue with data and parity read.

Parameters:
*swdctx swd context pointer.
*data data value pointer.
*parity parity value pointer.
Returns:
number of elements appended (2), or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_miso_n_data_p ( swd_ctx_t swdctx,
int **  data,
char **  parity,
int  count 
)

Append command queue with series of data and parity read.

Parameters:
*swdctx swd context pointer.
**data data value array pointer.
**parity parity value array pointer.
count number of (data+parity) elements to read.
Returns:
number of elements appended (2*count), or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_miso_nbit ( swd_ctx_t swdctx,
char **  data,
int  count 
)

Append command queue with bus binary read bit-by-bit operation.

This function will append command to the queue for each bit, and store one bit into single char array element, so read is not constrained to 8 bits. On error memory is released and apropriate error code is returned. Important: Memory pointed by *data must be allocated prior call!

Parameters:
*swdctx swd context pointer.
**data allocated data array to write result into.
count number of bits to read (also the **data size).
Returns:
number of elements processed, or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_miso_parity ( swd_ctx_t swdctx,
char *  parity 
)

Append command queue with parity bit read.

Parameters:
*swdctx swd context pointer.
*parity parity value pointer.
Returns:
number of elements appended (1), or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_miso_trn ( swd_ctx_t swdctx  ) 

Append command queue with Turnaround activating MISO mode.

Parameters:
*swdctx swd context pointer.
Returns:
return number of elements appended (1), or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_mosi_control ( swd_ctx_t swdctx,
char *  ctlmsg,
int  len 
)

Append command queue with len-octet size control seruence.

This control sequence can be used for instance to send payload of packets switching DAP between JTAG and SWD mode.

Parameters:
*swdctx swd context pointer.
*ctlmsg control message array pointer.
len number of elements to send from *ctlmsg.
Returns:
number of elements appended (len), or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_mosi_data ( swd_ctx_t swdctx,
int *  data 
)

Append command queue with data and parity write.

Parameters:
*swdctx swd context pointer.
*data data value pointer.
Returns:
number of elements appended (1), or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_mosi_data_ap ( swd_ctx_t swdctx,
int *  data 
)

Append command queue with data and automatic parity write.

Parameters:
*swdctx swd context pointer.
*data data value pointer.
Returns:
number of elements appended (2), or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_mosi_data_p ( swd_ctx_t swdctx,
int *  data,
char *  parity 
)

Append command queue with data and provided parity write.

Parameters:
*swdctx swd context pointer.
*data data value pointer.
*parity parity value pointer.
Returns:
number of elements appended (2), or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_mosi_nbit ( swd_ctx_t swdctx,
char *  data,
int  count 
)

Append command queue with bus binary write bit-by-bit operation.

This function will append command to the queue for each bit and store one bit into single char array element, so read is not constrained to 8 bits. On error memory is released and apropriate error code is returned. Important: Memory pointed by *data must be allocated prior call!

Parameters:
*swdctx swd context pointer.
**data allocated data array to write result into.
count number of bits to read (also the **data size).
Returns:
number of elements processed, or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_mosi_parity ( swd_ctx_t swdctx,
char *  parity 
)

Append command queue with parity bit write.

Parameters:
*swdctx swd context pointer.
*parity parity value pointer.
Returns:
number of elements appended (1), or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_mosi_request ( swd_ctx_t swdctx,
char *  request 
)

Appends command queue with SWD Request packet header.

Note that contents is not validated, so bad request can be sent as well.

Parameters:
*swdctx swd context pointer.
*request pointer to the 8-bit request payload.
Returns:
return number elements appended (1), or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_mosi_trn ( swd_ctx_t swdctx  ) 

Append command queue with Turnaround activating MOSI mode.

Parameters:
*swdctx swd context pointer.
Returns:
return number elements appended (1), or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_swd2jtag ( swd_ctx_t swdctx  ) 

Append command queue with SWD-TO-JTAG DAP-switch sequence.

Parameters:
*swdctx swd context pointer.
Returns:
number of elements appended, or SWD_ERROR_CODE on failure.
int swd_cmd_queue_append_swdpreset ( swd_ctx_t swdctx  ) 

Append command queue with SW-DP-RESET sequence.

Parameters:
*swdctx swd context pointer.
Returns:
number of elements appended, or SWD_ERROR_CODE on failure.
swd_cmd_t* swd_cmd_queue_find_root ( swd_cmd_t cmdq  ) 

Find queue root (first element).

Parameters:
*cmdq pointer to any queue element
Returns:
swd_cmd_t* pointer to the first element (root), NULL on failure
swd_cmd_t* swd_cmd_queue_find_tail ( swd_cmd_t cmdq  ) 

Find queue tail (last element).

Parameters:
*cmdq pointer to any queue element
Returns:
swd_cmd_t* pointer to the last element (tail), NULL on failure
int swd_cmd_queue_flush ( swd_ctx_t swdctx,
swd_operation_t  operation 
)

Flush command queue contents into interface driver.

Operation is specified by SWD_OPERATION and can be used to select how to flush the queue, ie. head-only, tail-only, one, all, etc.

Parameters:
*swdctx swd context pointer.
operation tells how to flush the queue.
Returns:
number of commands transmitted, or SWD_ERROR_CODE on failure.
int swd_cmd_queue_free ( swd_cmd_t cmdq  ) 

Free queue pointed by *cmdq element.

Parameters:
*cmdq pointer to any element on command queue
Returns:
number of elements destroyed, SWD_ERROR_CODE on failure
int swd_cmd_queue_free_head ( swd_cmd_t cmdq  ) 

Free queue head up to *cmdq element.

Parameters:
*cmdq pointer to the element that becomes new queue root.
Returns:
number of elements destroyed, or SWD_ERROR_CODE on failure.
int swd_cmd_queue_free_tail ( swd_cmd_t cmdq  ) 

Free queue tail starting after *cmdq element.

Parameters:
*cmdq pointer to the last element on the new queue.
Returns:
number of elements destroyed, or SWD_ERROR_CODE on failure.
int swd_cmd_queue_init ( swd_cmd_t cmdq  ) 

Initialize new queue element in memory that becomes a queue root.

Parameters:
*cmdq pointer to the command queue element of type swd_cmd_t
Returns:
SWD_OK on success, SWD_ERROR_CODE code on failure
int swd_deinit ( swd_ctx_t swdctx  ) 

De-initialize selected swd context and its command queue.

Parameters:
*swdctx swd context pointer.
Returns:
number of elements freed, or SWD_ERROR_CODE on failure.
int swd_deinit_cmdq ( swd_ctx_t swdctx  ) 

De-initialize command queue and free its memory on selected swd context.

Parameters:
*swdctx swd context pointer.
Returns:
number of commands freed, or SWD_ERROR_CODE on failure.
int swd_deinit_ctx ( swd_ctx_t swdctx  ) 

De-initialize selected swd context and free its memory.

Note: This function will not free command queue for selected context!

Parameters:
*swdctx swd context pointer.
Returns:
SWD_OK on success, SWD_ERROR_CODE on failure.
int swd_idcode ( swd_ctx_t swdctx,
swd_operation_t  operation,
int *  idcode,
char *  ack,
char *  parity 
)

Read target's IDCODE register value.

Parameters:
*swdctx swd context pointer.
operation type of action to perform (queue or execute).
*idcode resulting register value pointer.
*ack resulting acknowledge response value pointer.
*parity resulting data parity value pointer.
Returns:
number of elements processed on the queue, or SWD_ERROR_CODE on failure.
swd_ctx_t* swd_init ( void   ) 

LibSWD initialization routine.

It should be called prior any operation made with libswd. It initializes command queue and basic parameters for context that is returned as pointer.

Returns:
pointer to the initialized swd context.
int swd_miso_ack ( swd_ctx_t swdctx,
swd_operation_t  operation,
char *  ack 
)

Perform ACK read into *ack and verify received data.

Parameters:
*swdctx swd context pointer.
operation type of action to perform with generated request.
*ack pointer to the result location.
Returns:
number of commands processed, or SWD_ERROR_CODE on failure.
int swd_miso_data_p ( swd_ctx_t swdctx,
swd_operation_t  operation,
int *  data,
char *  parity 
)

Perform (MISO) data read.

Parameters:
*swdctx swd context pointer.
operation type of action to perform on generated command.
*data payload value pointer.
*parity payload parity value pointer.
Returns:
number of elements processed, or SWD_ERROR_CODE on failure.
int swd_mosi_data_ap ( swd_ctx_t swdctx,
swd_operation_t  operation,
int *  data 
)

Perform (MOSI) data write with automatic parity calculation.

Parameters:
*swdctx swd context pointer.
operation type of action to perform on generated command.
*data payload value pointer.
Returns:
number of elements processed, or SWD_ERROR_CODE on failure.
int swd_mosi_data_p ( swd_ctx_t swdctx,
swd_operation_t  operation,
int *  data,
char *  parity 
)

Perform (MOSI) data write with provided parity value.

Parameters:
*swdctx swd context pointer.
operation type of action to perform on generated command.
*data payload value pointer.
*parity payload parity value pointer.
Returns:
number of elements processed, or SWD_ERROR_CODE on failure.
int swd_mosi_request ( swd_ctx_t swdctx,
swd_operation_t  operation,
char *  APnDP,
char *  RnW,
char *  addr 
)

Perform Request.

Parameters:
*swdctx swd context pointer.
operation type of action to perform with generated request.
*APnDP AccessPort (high) or DebugPort (low) access value pointer.
*RnW Read (high) or Write (low) access value pointer.
*addr target register address value pointer.
Returns:
number of commands processed, or SWD_ERROR_CODE on failure.
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines