98 Commits

Author SHA1 Message Date
Marc Kleine-Budde
f5e5a6e16b gs_usb: remove unused struct gs_tx_context 2022-11-14 17:04:56 +01:00
Marc Kleine-Budde
048288042f gs_usb: update comment about struct gs_device_config::byte_order
Fixes: bbe39cad2ea8 ("usbd_gs_can: remove unused USBD_GS_CAN_HandleTypeDef::host_config")
2022-11-14 17:04:56 +01:00
Marc Kleine-Budde
84a397731b compiler.h: add more helper macros
Add:
- __aligned
- __packed
- container_of
- ARRAY_SIZE
2022-11-14 17:04:56 +01:00
Marc Kleine-Budde
8ab58a41f7 compiler.h: uncrustify 2022-11-14 17:04:56 +01:00
Marc Kleine-Budde
ae59fae696 compiler.h: remove unused defines 2022-11-14 17:04:56 +01:00
Marc Kleine-Budde
eab812d07a compiler.h: import from freebsd 2022-11-14 17:04:56 +01:00
ConvertDevice
e0e04ea938 ci: add convertdevice-xcan01 hardware support 2022-11-14 10:46:19 -05:00
fenugrec
a0caf93e50 Remove flash-as-eeprom emulation for USER_ID
There is a pair of USB requests ( GS_USB_BREQ_GET_USER_ID and
_SET_USER_ID) that is not supported by the linux driver, and not used by
any known software :

https://github.com/candle-usb/candleLight_fw/issues/91

Since the firmware returns a unique serial #, there doesn't appear to be
any use case for assigning a user ID. Using a whole flash page for that
purpose can be wasteful on bigger targets .

This removes all the relevant code and adjusts the linker scripts
accordingly.
2022-11-14 10:40:27 -05:00
Ryan Edwards
b24cba3a55 Add config for budgetcan
Update the config.h and CMake to support the budgetcan device which contains the STM32G0B1xK microcontroller.
2022-11-14 10:03:53 -05:00
Marc Kleine-Budde
7f97321149 queue: remove unused functionality
Looking at the queue code it turns out, a lot of the functions are not
used. Remove the unused queue functionality. Not sure why the compiler
hasn't removed the malloc() and free() functions entirely, but this
saves some bytes:

| add/remove: 0/3 grow/shrink: 0/0 up/down: 0/-232 (-232)
| Function                                     old     new   delta
| malloc                                        20       -     -20
| free                                          20       -     -20
| _free_r                                      192       -    -192
| Total: Before=17370, After=17138, chg -1.34%
2022-11-10 19:46:08 -05:00
Ryan Edwards
8a9cdf1076 config.h: move the CAN_INTERFACE and CAN_CLOCK_SPEED to the config.h
Move CAN_INTERFACE and CAN_CLOCK_SPEED to the config file as the CAN
clock can vary based on HW implementation.

Better to add it here than to keep adding defines into the
usbd_gs_can.h file.

CAN_INTERFACE can vary based on the number of channels you are using
so also makes sense to add here even though most chips use the same
interface ID.
2022-11-09 08:59:21 +01:00
Marc Kleine-Budde
2bba52ffc9 gs_usb.h: document GS_CAN_FEATURE_GET_STATE, GS_USB_BREQ_GET_STATE
In commit
40e1997d45
[1] GS_CAN_FEATURE_GET_STATE has been added to the Linux driver.
Document this bit here accordingly.

The new feature ("GS_CAN_FEATURE_GET_STATE") indicates that the state
of the CAN controller can be queried with the new
GS_USB_BREQ_GET_STATE control message.

[1] https://git.kernel.org/torvalds/c/40e1997d4551e6053fc2f61959628da474775dc5
2022-10-31 14:06:28 +01:00
Marc Kleine-Budde
ad2f13ace7 gs_usb.h: document GS_CAN_MODE_BERR_REPORTING
In commit
1f1835264d
[1] Bus Error Reporting has been added to the Linux driver. Document
this bit here accordingly.

The new feature ("GS_CAN_FEATURE_BERR_REPORTING") indicates that the
bus error reporting in the CAN controller can switched on and off with
the GS_CAN_MODE_BERR_REPORTING mode bit in the GS_USB_BREQ_MODE
control message.

[1] https://git.kernel.org/torvalds/c/1f1835264d81da03fcd05646542a622678b379d6
2022-10-31 14:06:08 +01:00
fenugrec
12cc477412 some misc whitespace leftovers uncrustified
closes gh #118
2022-10-15 10:01:51 -04:00
Jeroen Hofstee
9a663007f5 remove triggering error message based on counter values
Since all bit errors already trigger sending a error msg,
remove the code triggering on counters going upwards, since they
are send anyway. See [1] "This if statement doesn't normally do
anything", get rid of it.

[1] https://github.com/candle-usb/candleLight_fw/pull/61
2022-10-15 10:00:52 -04:00
Daniel Trevitz
0a1d6dc920 Add switchable terminating resistor support
Add a USB message which controls a GPIO for a specified CAN bus.
The GPIO activates a SSR to connect a 120Ohm terminating resistor
  to the specified CAN bus.

Signed-off-by: Daniel Trevitz <daniel.trevitz@wika.com>
2022-10-12 17:39:21 -04:00
fenugrec
f45060be53 rework some #include lines
with help from include-what-you-use (iwyu-tool). It's not quite clever
enough to understand our intent of including "hal_include.h" but still
offers good suggestions.
2022-10-12 17:28:50 -04:00
Daniel Trevitz
cfca364c2a Uncrustify the code 2022-10-11 19:27:57 -04:00
Daniel Trevitz
0e53857656 Generalize the gpio configuration
Move the nCANSTBY_Pin to be avaliable for other boards. Make the
  LED Rx and Tx pins optional.

Signed-off-by: Daniel Trevitz <daniel.trevitz@wika.com>
2022-10-05 21:43:08 -04:00
Marc Kleine-Budde
151ec30d78 gs_usb: document switchable termination support 2022-09-29 10:10:53 +02:00
Marc Kleine-Budde
e6766934aa leds: mark led_identify_seq as const
This saves a few bytes:

before:
| create and sign dfu bin file: candleLight_fw
|    text	  data	   bss	   dec	   hex	filename
|   15708	   192	  1976	 17876	  45d4	candleLight_fw

after:
| create and sign dfu bin file: candleLight_fw
|    text	  data	   bss	   dec	   hex	filename
|   15712	   184	  1976	 17872	  45d0	candleLight_fw

Signed-off-by: Marc Kleine-Budde <mkl@blackshift.org>
2022-08-28 00:31:22 +02:00
Marc Kleine-Budde
7860fef8fd USBD_GS_CAN_GetProtocolVersion(): remove unused function
Signed-off-by: Marc Kleine-Budde <mkl@blackshift.org>
2022-08-28 00:27:52 +02:00
Jeroen Hofstee
9f07a4b223 use consistent whitespace
Use tabs for leading whitespace and spaces for continuation lines.
Besides that inconsistent whitespace looks odd, it causes unnecessary
merge conflicts.
2022-08-26 21:51:33 -04:00
Jeroen Hofstee
f1be957992 remove unused USBD_GS_CAN_GetPadPacketsToMaxPacketSize
commit 46b01339f5eeab1157d "Add new mode to pad output usb packets
to max packet size for better ..." introduced an unused function
USBD_GS_CAN_GetPadPacketsToMaxPacketSize, get rid of it.
2022-08-25 09:36:41 +02:00
Jeroen Hofstee
4668b03c7d add stricter prototype checking
Functions in c which are declared as f() accept any argument. Declare
them as f(void) instead to declare that no arguments are allowed and
add uint32_t sysmem_base to dfu_jump_to_bootloader.
2022-08-25 09:36:41 +02:00
Jeroen Hofstee
4f51b8e964 use restore_irq to restore irq state
Since commit b5cc61b3317e "fix critical section handling", there are two
versions of enable_irq, enable_irq(void) as used by queue.c and
enable_irq(int primask) as used by usbd_gs_can.c. As a consequence
interrupts might be re-enabled too early in case of nested disable calls.

To prevent this, declared enable_irq as void, since it doesn't accept an
argument and add restore_irq which requires an argument and adjust users
of it.
2022-08-25 09:36:36 +02:00
fenugrec
7d59b2f063 Rename silly LED_1/LED_2 to LED_RX/TX 2022-07-29 10:34:29 -04:00
ReXT3D
3337447233 Add Makerbase CANable-MKS board support
Configuration for Makerbase CANable-MKS and CANable-MKS Pro boards
2022-07-29 10:23:12 -04:00
ReXT3D
df5c35815b Fix whitespace consistency in config.h 2022-07-29 10:23:12 -04:00
mosu_195
5a90a192a1 Release resource on USB Resume callback
Needed for hcan->TxState to reset. In some cases when the host reboots, the TxState get locked forever and there's no way to recover other than resetting the controller.
2022-04-16 20:48:53 -04:00
Marc Kleine-Budde
b549cb768b gs_usb.h: document GS_CAN_FEATURE_BT_CONST_EXT and GS_USB_BREQ_BT_CONST_EXT
Some CAN-FD capable controllers have different bittiming constants for
arbitration phase and data phase to reach maximum performance at
higher speeds.
2022-01-12 09:21:30 -05:00
Marc Kleine-Budde
fea8b8603f gs_usb.h: document GS_CAN_FEATURE_REQ_USB_QUIRK_LPC546XX
The documents a workaround for a NXP chip errata on LPC546xx
controllers (Errata sheet LPC546xx / USB.15).

According to the document corruption can occur when the following
conditions are met:
* A TX (IN) transfer happens after a RX (OUT) transfer.
* The RX (OUT) transfer length is 4 + N * 16 (N >= 0) bytes.

Even though the struct gs_host_frame has a size of 76 bytes for a FD
frame, which does not apply to the above rule, corruption could be
seen.

Adding a dummy byte to break the second condition also on transfer
lengths with 4 + N * 8 bytes reliably circumvents USB transfer data
corruption.

The firmware can now request this quirk by setting
GS_CAN_FEATURE_REQ_USB_QUIRK_LPC546XX.
2022-01-12 09:21:30 -05:00
Marc Kleine-Budde
41f9e7d64f gs_usb.h: introduce CAN-FD support
The CANtact FD and other devices implement a gs-usb compatible USB
protocol. The protocol has been extended to support CAN-FD and the
changes on the Linux gs_usb driver will be mainlined soon.

This patch adds the new GS_CAN_MODE_*, GS_CAN_FEATURE_*,
GS_USB_BREQ_DATA_BITTIMING, and GS_CAN_FLAG_* bits as well as struct
gs_host_frame_canfd to the candlelight driver.

This is mainly for documentation purpose, as the STM32F042 and
STM32F072 don't support CAN-FD. But there are some ports to CAN-FD
capable STM32 µC that can make use of these definitions.

[1] https://github.com/linklayer/gs_usb_fd/issues/2
2022-01-12 09:21:30 -05:00
Marc Kleine-Budde
335dc50cd6 gs_usb.h: document used GS_CAN_MODE_* bits
The bits in GS_CAN_MODE_ correspond to the bits in GS_CAN_FEATURE_*.
This means the bits 5 and 6 of GS_CAN_MODE_ are not "free", document
this by adding a comment to the corresponding GS_CAN_FEATURE_*.
2022-01-12 09:21:30 -05:00
fenugrec
2df0d420e9 Simplify BOARD_XYZ macros (no more numeric values)
There is currently no reason to assign a numeric value to each BOARD_*
macro.
Fix #83 GH
2022-01-06 17:54:49 -05:00
fenugrec
f58de5e678 config.h : document CAN_S_PIN for silent mode
fix GH #81
2022-01-06 17:48:15 -05:00
fenugrec
1b1c3bb8ff usb RX_FIFO size: remove nonapplicable PMA comment
on F4 with the USB_OTG peripheral, the RX FIFO must be sized according
to different rules vs the USB_FS peripheral of the F0.
2022-01-06 17:42:50 -05:00
Ricky Lopez
d306798923 Add STM32F4 support
Specifically, the STM32F407VE.
Even more specifically, [this](https://stm32-base.org/boards/STM32F407VET6-STM32-F4VE-V2.0.html) dev board
2022-01-06 12:31:05 -05:00
fenugrec
d66fda39f8 Add git version string to USB config descriptor
There was already provisions for this in the code. Tweaked CMake to
generate version.h automatically every build.
2021-04-06 12:03:13 -04:00
fenugrec
138e6cb433 Add basic assert checks
Avoid using <assert.h> because the standard assert() pulls in
fprintf and its of dependencies, as well as including __FILE__:__LINE__
strings for each assert() call. All this has an unacceptable memory
cost, as well as being useless since there is nothing to printf *to*.

Currently assert_basic() was added to check calloc() return values;
in case of failure we simply halt the core with BKPT(0). This could be
improved and refined.
2021-02-17 16:00:09 -05:00
fenugrec
3d52db0a97 Add PR #63 comment, and __ISB() after disable_irq 2020-12-13 10:38:29 -05:00
Hubert Denkmair
b796282765 move USB descriptor callback table to ROM 2020-12-06 12:51:46 -05:00
Hubert Denkmair
f380b5eafd rename USBD_StrDesc to USBD_DescBuf
(will reuse not only for strings)
2020-12-06 12:51:46 -05:00
Hubert Denkmair
b5cc61b331 fix critical section handling
thanks to @ndushman for pointing this out
2020-12-06 12:51:46 -05:00
fenugrec
7f9a0ea331 CAN errors : comment some funcs + defines 2020-12-06 11:58:45 -05:00
Brian Silverman
ceeac236c4 Better bit error reporting
It reports more information with more accurate ordering with respect to
other frames sent and received.

Fixes candle-usb/candleLight_fw#59
2020-12-06 11:41:53 -05:00
fenugrec
9cf7eccf3d Add new boardtype : cannette
F042-based, galvanically isolated.
2020-10-30 21:55:27 -04:00
Ethan Zonca
465e957db9 Update CANable-specific LED initialization 2020-10-30 21:50:08 -04:00
fenugrec
4dac861b8c Set explicit LED polarity and invert canalyze
the canalyze has active-high LED signals
2019-11-11 16:21:15 -05:00
Brandon Ros
faa164055a CANAlyze support 2019-11-09 14:26:45 -05:00