cherry-pick more haskal stuff, update CMSIS-DAP to 5.0.8 release, fix warnings

This commit is contained in:
Triss 2021-06-28 21:39:19 +02:00
parent a1c9327174
commit b68231e966
11 changed files with 83 additions and 33 deletions

@ -1 +1 @@
Subproject commit d61cf40e6c44726917d9085660f7eb2691547cc7 Subproject commit 13b9f72f212688d2306d0d085d87cbb4bf9e5d3f

View File

@ -9,6 +9,8 @@ set(BOARD "raspberry_pi_pico" CACHE STRING "Board used, determines the pinout. D
get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME) get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
set(PROJECT ${BOARD}-${PROJECT}) set(PROJECT ${BOARD}-${PROJECT})
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# TOP is absolute path to root directory of TinyUSB git repo # TOP is absolute path to root directory of TinyUSB git repo
set(TOP "./tinyusb") set(TOP "./tinyusb")
get_filename_component(TOP "${TOP}" REALPATH) get_filename_component(TOP "${TOP}" REALPATH)

View File

@ -1,22 +0,0 @@
include ./tinyusb/tools/top.mk
include ./tinyusb/examples/make.mk
INC += \
. \
./CMSIS_5/CMSIS/DAP/Firmware/Include \
./bsp/$(BOARD) \
./bsp/default \
$(TOP)/hw
APP_SOURCE += $(wildcard ./*.c) $(wildcard ./bsp/$(BOARD)/*.c)
SRC_C += $(addprefix $(CURRENT_PATH)/, $(APP_SOURCE))
SRC_C += \
./CMSIS_5/CMSIS/DAP/Firmware/Source/DAP.c \
./CMSIS_5/CMSIS/DAP/Firmware/Source/JTAG_DP.c \
./CMSIS_5/CMSIS/DAP/Firmware/Source/DAP_vendor.c \
./CMSIS_5/CMSIS/DAP/Firmware/Source/SWO.c \
./CMSIS_5/CMSIS/DAP/Firmware/Source/SW_DP.c
include ./tinyusb/examples/rules.mk

View File

@ -8,7 +8,7 @@
__attribute__((__weak__)) uint8_t get_unique_id_u8(uint8_t *desc_str) { __attribute__((__weak__)) uint8_t get_unique_id_u8(uint8_t *desc_str) {
static const char canned[] = "123456"; static const char canned[] = "123456";
for (int i=0; i<TU_ARRAY_SIZE(canned); i++) { for (size_t i=0; i<TU_ARRAY_SIZE(canned); i++) {
desc_str[i] = canned[i]; desc_str[i] = canned[i];
} }
@ -18,7 +18,7 @@ __attribute__((__weak__)) uint8_t get_unique_id_u8(uint8_t *desc_str) {
__attribute__((__weak__)) uint8_t get_unique_id_u16(uint16_t *desc_str) { __attribute__((__weak__)) uint8_t get_unique_id_u16(uint16_t *desc_str) {
static const char canned[] = "123456"; static const char canned[] = "123456";
for (int i=0; i<TU_ARRAY_SIZE(canned); i++) { for (size_t i=0; i<TU_ARRAY_SIZE(canned); i++) {
desc_str[i] = canned[i]; desc_str[i] = canned[i];
} }

View File

@ -140,6 +140,27 @@ This information includes:
/// SWO Streaming Trace. /// SWO Streaming Trace.
#define SWO_STREAM 0 ///< SWO Streaming Trace: 1 = available, 0 = not available. #define SWO_STREAM 0 ///< SWO Streaming Trace: 1 = available, 0 = not available.
/// Indicate that UART Communication Port is available.
/// This information is returned by the command \ref DAP_Info as part of <b>Capabilities</b>.
#define DAP_UART 0 ///< DAP UART: 1 = available, 0 = not available.
/// USART Driver instance number for the UART Communication Port.
#define DAP_UART_DRIVER 1 ///< USART Driver instance number (Driver_USART#).
/// UART Receive Buffer Size.
#define DAP_UART_RX_BUFFER_SIZE 64U ///< Uart Receive Buffer Size in bytes (must be 2^n).
/// UART Transmit Buffer Size.
#define DAP_UART_TX_BUFFER_SIZE 64U ///< Uart Transmit Buffer Size in bytes (must be 2^n).
/// Indicate that UART Communication via USB COM Port is available.
/// This information is returned by the command \ref DAP_Info as part of <b>Capabilities</b>.
#ifdef USE_USBCDC_FOR_STDIO
#define DAP_UART_USB_COM_PORT 1 ///< USB COM Port: 1 = available, 0 = not available.
#else
#define DAP_UART_USB_COM_PORT 0
#endif
/// Clock frequency of the Test Domain Timer. Timer value is returned with \ref TIMESTAMP_GET. /// Clock frequency of the Test Domain Timer. Timer value is returned with \ref TIMESTAMP_GET.
#define TIMESTAMP_CLOCK 0U ///< Timestamp clock in Hz (0 = timestamps not supported). #define TIMESTAMP_CLOCK 0U ///< Timestamp clock in Hz (0 = timestamps not supported).
@ -161,7 +182,7 @@ This information includes:
\return String length. \return String length.
*/ */
__STATIC_INLINE uint8_t DAP_GetVendorString (char *str) { __STATIC_INLINE uint8_t DAP_GetVendorString (char *str) {
const static char vnd[] = INFO_MANUFACTURER; static const char vnd[] = INFO_MANUFACTURER;
for (size_t i = 0; i < sizeof(vnd); ++i) str[i] = vnd[i]; for (size_t i = 0; i < sizeof(vnd); ++i) str[i] = vnd[i];
return sizeof(vnd)-1; return sizeof(vnd)-1;
} }
@ -171,7 +192,7 @@ __STATIC_INLINE uint8_t DAP_GetVendorString (char *str) {
\return String length. \return String length.
*/ */
__STATIC_INLINE uint8_t DAP_GetProductString (char *str) { __STATIC_INLINE uint8_t DAP_GetProductString (char *str) {
const static char prd[] = INFO_PRODUCT(INFO_BOARDNAME); static const char prd[] = INFO_PRODUCT(INFO_BOARDNAME);
for (size_t i = 0; i < sizeof(prd); ++i) str[i] = prd[i]; for (size_t i = 0; i < sizeof(prd); ++i) str[i] = prd[i];
return sizeof(prd)-1; return sizeof(prd)-1;
} }
@ -184,6 +205,37 @@ __STATIC_INLINE uint8_t DAP_GetSerNumString (char *str) {
return get_unique_id_u8((uint8_t*)str); return get_unique_id_u8((uint8_t*)str);
} }
/** Get Target Device Vendor string.
\param str Pointer to buffer to store the string (max 60 characters).
\return String length (including terminating NULL character) or 0 (no string).
*/
__STATIC_INLINE uint8_t DAP_GetTargetDeviceVendorString (char *str) { (void)str; return 0; }
/** Get Target Device Name string.
\param str Pointer to buffer to store the string (max 60 characters).
\return String length (including terminating NULL character) or 0 (no string).
*/
__STATIC_INLINE uint8_t DAP_GetTargetDeviceNameString (char *str) { (void)str; return 0; }
/** Get Target Board Vendor string.
\param str Pointer to buffer to store the string (max 60 characters).
\return String length (including terminating NULL character) or 0 (no string).
*/
__STATIC_INLINE uint8_t DAP_GetTargetBoardVendorString (char *str) { (void)str; return 0; }
/** Get Target Board Name string.
\param str Pointer to buffer to store the string (max 60 characters).
\return String length (including terminating NULL character) or 0 (no string).
*/
__STATIC_INLINE uint8_t DAP_GetTargetBoardNameString (char *str) { (void)str; return 0; }
/* TODO! */
/** Get Product Firmware Version string.
\param str Pointer to buffer to store the string (max 60 characters).
\return String length (including terminating NULL character) or 0 (no string).
*/
__STATIC_INLINE uint8_t DAP_GetProductFirmwareVersionString (char *str) { (void)str; return 0; }
///@} ///@}

View File

@ -70,8 +70,11 @@ void cdc_uart_set_hwflow(bool enable) {
uart_set_hw_flow(PINOUT_UART_INTERFACE, enable, enable); uart_set_hw_flow(PINOUT_UART_INTERFACE, enable, enable);
} }
/* TODO: properly dispatch to others? */
void tud_cdc_line_coding_cb(uint8_t itf, cdc_line_coding_t const* line_coding) { void tud_cdc_line_coding_cb(uint8_t itf, cdc_line_coding_t const* line_coding) {
if (itf == CDC_N_UART) {
//picoprobe_info("New baud rate %d\n", line_coding->bit_rate); //picoprobe_info("New baud rate %d\n", line_coding->bit_rate);
uart_init(PINOUT_UART_INTERFACE, line_coding->bit_rate); uart_init(PINOUT_UART_INTERFACE, line_coding->bit_rate);
}
} }

View File

@ -106,6 +106,8 @@ static uint8_t __no_inline_not_in_flash_func(i2cio_read8)(bool last) {
i2cio_scl_toggle(); i2cio_scl_toggle();
i2cio_set_sda(true); i2cio_set_sda(true);
return rv;
} }
// replicating/rewriting some SDK functions because they don't do what I want // replicating/rewriting some SDK functions because they don't do what I want
@ -144,6 +146,7 @@ static int __no_inline_not_in_flash_func(i2cex_probe_address)(uint16_t addr, boo
inline static void i2cex_abort_xfer(i2c_inst_t* i2c) { inline static void i2cex_abort_xfer(i2c_inst_t* i2c) {
#if 1 #if 1
// may be bugged??? so doesnt do anything for now // may be bugged??? so doesnt do anything for now
(void)i2c;
return; return;
#else #else
// now do the abort // now do the abort

View File

@ -11,7 +11,7 @@ uint8_t get_unique_id_u8(uint8_t *desc_str) {
pico_get_unique_board_id(&uid); pico_get_unique_board_id(&uid);
for (int byte = 0; byte < TU_ARRAY_SIZE(uid.id); byte++) { for (size_t byte = 0; byte < TU_ARRAY_SIZE(uid.id); byte++) {
uint8_t tmp = uid.id[byte]; uint8_t tmp = uid.id[byte];
for (int digit = 0; digit < 2; digit++) { for (int digit = 0; digit < 2; digit++) {
desc_str[chr_count++] = nyb2hex(tmp & 0xf); desc_str[chr_count++] = nyb2hex(tmp & 0xf);
@ -28,7 +28,7 @@ uint8_t get_unique_id_u16(uint16_t *desc_str) {
pico_get_unique_board_id(&uid); pico_get_unique_board_id(&uid);
for (int byte = 0; byte < TU_ARRAY_SIZE(uid.id); byte++) { for (size_t byte = 0; byte < TU_ARRAY_SIZE(uid.id); byte++) {
uint8_t tmp = uid.id[byte]; uint8_t tmp = uid.id[byte];
for (int digit = 0; digit < 2; digit++) { for (int digit = 0; digit < 2; digit++) {
desc_str[chr_count++] = nyb2hex(tmp & 0xf); desc_str[chr_count++] = nyb2hex(tmp & 0xf);

View File

@ -8,7 +8,7 @@ uint8_t get_unique_id_u8(uint8_t *desc_str) {
uint32_t tmp = 0; uint32_t tmp = 0;
uint8_t chr_count = 0; uint8_t chr_count = 0;
for (int digit = 0; digit < 24; digit++) { for (size_t digit = 0; digit < 24; digit++) {
if (0 == (digit & 7)) tmp = *idpnt++; if (0 == (digit & 7)) tmp = *idpnt++;
desc_str[chr_count++] = nyb2hex(tmp & 0xf); desc_str[chr_count++] = nyb2hex(tmp & 0xf);
tmp >>= 4; tmp >>= 4;
@ -22,7 +22,7 @@ uint8_t get_unique_id_u16(uint16_t *desc_str) {
uint32_t tmp = 0; uint32_t tmp = 0;
uint8_t chr_count = 0; uint8_t chr_count = 0;
for (int digit = 0; digit < 24; digit++) { for (size_t digit = 0; digit < 24; digit++) {
if (0 == (digit & 7)) tmp = *idpnt++; if (0 == (digit & 7)) tmp = *idpnt++;
desc_str[chr_count++] = nyb2hex(tmp & 0xf); desc_str[chr_count++] = nyb2hex(tmp & 0xf);
tmp >>= 4; tmp >>= 4;

View File

@ -14,3 +14,4 @@ for i in range(len(data)):
with open("compile_commands.json", "w") as f: with open("compile_commands.json", "w") as f:
json.dump(data, f) json.dump(data, f)

View File

@ -38,6 +38,8 @@ static void iub_init(void) {
} }
static void iub_reset(uint8_t rhport) { static void iub_reset(uint8_t rhport) {
(void)rhport;
status = ITU_STATUS_IDLE; status = ITU_STATUS_IDLE;
memset(&curcmd, 0, sizeof curcmd); memset(&curcmd, 0, sizeof curcmd);
@ -51,6 +53,8 @@ static void iub_reset(uint8_t rhport) {
static uint16_t iub_open(uint8_t rhport, tusb_desc_interface_t const* itf_desc, static uint16_t iub_open(uint8_t rhport, tusb_desc_interface_t const* itf_desc,
uint16_t max_len) { uint16_t max_len) {
(void)rhport;
TU_VERIFY(itf_desc->bInterfaceClass == 0 TU_VERIFY(itf_desc->bInterfaceClass == 0
&& itf_desc->bInterfaceSubClass == 0 && itf_desc->bInterfaceSubClass == 0
&& itf_desc->bInterfaceProtocol == 0, 0); && itf_desc->bInterfaceProtocol == 0, 0);
@ -64,6 +68,8 @@ static uint16_t iub_open(uint8_t rhport, tusb_desc_interface_t const* itf_desc,
} }
static bool iub_ctl_req(uint8_t rhport, uint8_t stage, tusb_control_request_t const* req) { static bool iub_ctl_req(uint8_t rhport, uint8_t stage, tusb_control_request_t const* req) {
(void)rhport;
/*static char* stages[]={"SETUP","DATA","ACK"}; /*static char* stages[]={"SETUP","DATA","ACK"};
static char* types[]={"STD","CLS","VND","INV"}; static char* types[]={"STD","CLS","VND","INV"};
@ -209,6 +215,11 @@ static bool iub_ctl_req(uint8_t rhport, uint8_t stage, tusb_control_request_t co
// never actually called fsr // never actually called fsr
static bool iub_xfer(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) { static bool iub_xfer(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes) {
(void)rhport;
(void)ep_addr;
(void)result;
(void)xferred_bytes;
return true; return true;
} }