Deploying to gh-pages from master @ b1de11c275
🚀
This commit is contained in:
parent
d5cdf96744
commit
7c2f4122cc
6 changed files with 17 additions and 159 deletions
|
@ -92,6 +92,8 @@ Serial Driver initialization.
|
|||
|
||||
This function is implicitly invoked by `halInit()`, there is no need to explicitly initialize the driver.
|
||||
|
||||
@init
|
||||
|
||||
#### `public void `[`qmkusbObjectInit`](#group___s_e_r_i_a_l___u_s_b_1gaf8ba926d88993cb4fab100f1ef427e0b)`(`[`QMKUSBDriver`](.build/docs/internals_SERIAL_USB.md#struct_q_m_k_u_s_b_driver)` * qmkusbp,const `[`QMKUSBConfig`](.build/docs/internals_SERIAL_USB.md#struct_q_m_k_u_s_b_config)` * config)` {#group___s_e_r_i_a_l___u_s_b_1gaf8ba926d88993cb4fab100f1ef427e0b}
|
||||
|
||||
Initializes a generic full duplex driver object.
|
||||
|
@ -101,6 +103,8 @@ The HW dependent part of the initialization has to be performed outside, usually
|
|||
#### Parameters
|
||||
* `qmkusbp` pointer to a `[QMKUSBDriver](.build/docs/internals_SERIAL_USB.md#struct_q_m_k_u_s_b_driver)` structure
|
||||
|
||||
@init
|
||||
|
||||
#### `public void `[`qmkusbStart`](#group___s_e_r_i_a_l___u_s_b_1ga82f3c032f7fb6832a60d6048f69c3e3d)`(`[`QMKUSBDriver`](.build/docs/internals_SERIAL_USB.md#struct_q_m_k_u_s_b_driver)` * qmkusbp,const `[`QMKUSBConfig`](.build/docs/internals_SERIAL_USB.md#struct_q_m_k_u_s_b_config)` * config)` {#group___s_e_r_i_a_l___u_s_b_1ga82f3c032f7fb6832a60d6048f69c3e3d}
|
||||
|
||||
Configures and starts the driver.
|
||||
|
@ -110,6 +114,8 @@ Configures and starts the driver.
|
|||
|
||||
* `config` the serial over USB driver configuration
|
||||
|
||||
@api
|
||||
|
||||
#### `public void `[`qmkusbStop`](#group___s_e_r_i_a_l___u_s_b_1gaa032aca2a467800dc0dc0e205b4757d5)`(`[`QMKUSBDriver`](.build/docs/internals_SERIAL_USB.md#struct_q_m_k_u_s_b_driver)` * qmkusbp)` {#group___s_e_r_i_a_l___u_s_b_1gaa032aca2a467800dc0dc0e205b4757d5}
|
||||
|
||||
Stops the driver.
|
||||
|
@ -119,6 +125,8 @@ Any thread waiting on the driver's queues will be awakened with the message `MSG
|
|||
#### Parameters
|
||||
* `qmkusbp` pointer to a `[QMKUSBDriver](.build/docs/internals_SERIAL_USB.md#struct_q_m_k_u_s_b_driver)` object
|
||||
|
||||
@api
|
||||
|
||||
#### `public void `[`qmkusbSuspendHookI`](#group___s_e_r_i_a_l___u_s_b_1gad59935eea3dab7a0584fd759c884e814)`(`[`QMKUSBDriver`](.build/docs/internals_SERIAL_USB.md#struct_q_m_k_u_s_b_driver)` * qmkusbp)` {#group___s_e_r_i_a_l___u_s_b_1gad59935eea3dab7a0584fd759c884e814}
|
||||
|
||||
USB device suspend handler.
|
||||
|
@ -128,6 +136,8 @@ Generates a `CHN_DISCONNECT` event and puts queues in non-blocking mode, this wa
|
|||
#### Parameters
|
||||
* `qmkusbp` pointer to a `[QMKUSBDriver](.build/docs/internals_SERIAL_USB.md#struct_q_m_k_u_s_b_driver)` object
|
||||
|
||||
@iclass
|
||||
|
||||
#### `public void `[`qmkusbWakeupHookI`](#group___s_e_r_i_a_l___u_s_b_1ga9bc8dd88462d0e3b39f7fdfec2c3ee55)`(`[`QMKUSBDriver`](.build/docs/internals_SERIAL_USB.md#struct_q_m_k_u_s_b_driver)` * qmkusbp)` {#group___s_e_r_i_a_l___u_s_b_1ga9bc8dd88462d0e3b39f7fdfec2c3ee55}
|
||||
|
||||
USB device wakeup handler.
|
||||
|
@ -139,6 +149,8 @@ If this function is not called from an ISR then an explicit call to `osalOsResch
|
|||
#### Parameters
|
||||
* `qmkusbp` pointer to a `[QMKUSBDriver](.build/docs/internals_SERIAL_USB.md#struct_q_m_k_u_s_b_driver)` object
|
||||
|
||||
@iclass
|
||||
|
||||
#### `public void `[`qmkusbConfigureHookI`](#group___s_e_r_i_a_l___u_s_b_1ga920acd9f8890b819614515b73923b72f)`(`[`QMKUSBDriver`](.build/docs/internals_SERIAL_USB.md#struct_q_m_k_u_s_b_driver)` * qmkusbp)` {#group___s_e_r_i_a_l___u_s_b_1ga920acd9f8890b819614515b73923b72f}
|
||||
|
||||
USB device configured handler.
|
||||
|
@ -146,6 +158,8 @@ USB device configured handler.
|
|||
#### Parameters
|
||||
* `qmkusbp` pointer to a `[QMKUSBDriver](.build/docs/internals_SERIAL_USB.md#struct_q_m_k_u_s_b_driver)` object
|
||||
|
||||
@iclass
|
||||
|
||||
#### `public bool `[`qmkusbRequestsHook`](#group___s_e_r_i_a_l___u_s_b_1gabae5bdec8abeac31be61c976301c37ba)`(USBDriver * usbp)` {#group___s_e_r_i_a_l___u_s_b_1gabae5bdec8abeac31be61c976301c37ba}
|
||||
|
||||
Default requests hook.
|
||||
|
@ -178,6 +192,8 @@ The SOF interrupt is used for automatic flushing of incomplete buffers pending i
|
|||
#### Parameters
|
||||
* `qmkusbp` pointer to a `[QMKUSBDriver](.build/docs/internals_SERIAL_USB.md#struct_q_m_k_u_s_b_driver)` object
|
||||
|
||||
@iclass
|
||||
|
||||
#### `public void `[`qmkusbDataTransmitted`](#group___s_e_r_i_a_l___u_s_b_1ga2baecc9d4f4ec49c7e26b5dd0740c7cd)`(USBDriver * usbp,usbep_t ep)` {#group___s_e_r_i_a_l___u_s_b_1ga2baecc9d4f4ec49c7e26b5dd0740c7cd}
|
||||
|
||||
Default data transmitted callback.
|
||||
|
|
|
@ -142,7 +142,7 @@ Calls the routine at address *addr*.
|
|||
|
||||
It generates a long call opcode.
|
||||
|
||||
For example, `Long_call(0x80000000)' generates a software reset on a UC3 if it is invoked from the CPU supervisor mode.
|
||||
For example, [Long_call(0x80000000)](.build/docs/internals_undefined.md#group__group__sam0__utils_1ga5b759626f343cc1af9159cc02b763837) generates a software reset on a UC3 if it is invoked from the CPU supervisor mode.
|
||||
|
||||
#### Parameters
|
||||
* `addr` Address of the routine to call.
|
||||
|
|
|
@ -40,19 +40,9 @@ Configuration descriptor and UDI link for one USB speed.
|
|||
|
||||
Members | Descriptions
|
||||
--------------------------------|---------------------------------------------
|
||||
`public `[`usb_conf_desc_t](.build/docs/internals_usb_protocol_group.md#structusb__conf__desc__t)[UDC_DESC_STORAGE`](.build/docs/internals_undefined.md#group__udc__desc__group_1gae086959cec07a2e71ab069e25a51764f)` * `[`desc`](#structudc__config__speed__t_1a6603d52f85ab88bc45af669a01c4b73a) | USB configuration descriptor.
|
||||
`public `[`udi_api_t](.build/docs/internals_udi_group.md#structudi__api__t)[UDC_DESC_STORAGE](.build/docs/internals_undefined.md#group__udc__desc__group_1gae086959cec07a2e71ab069e25a51764f) *[UDC_DESC_STORAGE`](.build/docs/internals_undefined.md#group__udc__desc__group_1gae086959cec07a2e71ab069e25a51764f)` * `[`udi_apis`](#structudc__config__speed__t_1a6b3a118ab8cad1b5fd0a3a1e8cf2ba36) | Array of UDI API pointer.
|
||||
|
||||
## Members
|
||||
|
||||
#### `public `[`usb_conf_desc_t](.build/docs/internals_usb_protocol_group.md#structusb__conf__desc__t)[UDC_DESC_STORAGE`](.build/docs/internals_undefined.md#group__udc__desc__group_1gae086959cec07a2e71ab069e25a51764f)` * `[`desc`](#structudc__config__speed__t_1a6603d52f85ab88bc45af669a01c4b73a) {#structudc__config__speed__t_1a6603d52f85ab88bc45af669a01c4b73a}
|
||||
|
||||
USB configuration descriptor.
|
||||
|
||||
#### `public `[`udi_api_t](.build/docs/internals_udi_group.md#structudi__api__t)[UDC_DESC_STORAGE](.build/docs/internals_undefined.md#group__udc__desc__group_1gae086959cec07a2e71ab069e25a51764f) *[UDC_DESC_STORAGE`](.build/docs/internals_undefined.md#group__udc__desc__group_1gae086959cec07a2e71ab069e25a51764f)` * `[`udi_apis`](#structudc__config__speed__t_1a6b3a118ab8cad1b5fd0a3a1e8cf2ba36) {#structudc__config__speed__t_1a6b3a118ab8cad1b5fd0a3a1e8cf2ba36}
|
||||
|
||||
Array of UDI API pointer.
|
||||
|
||||
# struct `udc_config_t` {#structudc__config__t}
|
||||
|
||||
All information about the USB Device.
|
||||
|
@ -61,19 +51,6 @@ All information about the USB Device.
|
|||
|
||||
Members | Descriptions
|
||||
--------------------------------|---------------------------------------------
|
||||
`public `[`usb_dev_desc_t](.build/docs/internals_usb_protocol_group.md#structusb__dev__desc__t)[UDC_DESC_STORAGE`](.build/docs/internals_undefined.md#group__udc__desc__group_1gae086959cec07a2e71ab069e25a51764f)` * `[`confdev_lsfs`](#structudc__config__t_1af7a4ce04947ddceb4c621cfd1da6e19f) | USB device descriptor for low or full speed.
|
||||
`public `[`udc_config_speed_t](.build/docs/internals_udc_desc_group.md#structudc__config__speed__t)[UDC_DESC_STORAGE`](.build/docs/internals_undefined.md#group__udc__desc__group_1gae086959cec07a2e71ab069e25a51764f)` * `[`conf_lsfs`](#structudc__config__t_1a5f1714368d3c5fc176c1d31705e8ab89) | USB configuration descriptor and UDI API pointers for low or full speed.
|
||||
`public `[`usb_dev_bos_desc_t](.build/docs/internals_usb_protocol_group.md#structusb__dev__bos__desc__t)[UDC_DESC_STORAGE`](.build/docs/internals_undefined.md#group__udc__desc__group_1gae086959cec07a2e71ab069e25a51764f)` * `[`conf_bos`](#structudc__config__t_1a1618a7226bcdbef10cf749598ce5d2af) |
|
||||
|
||||
## Members
|
||||
|
||||
#### `public `[`usb_dev_desc_t](.build/docs/internals_usb_protocol_group.md#structusb__dev__desc__t)[UDC_DESC_STORAGE`](.build/docs/internals_undefined.md#group__udc__desc__group_1gae086959cec07a2e71ab069e25a51764f)` * `[`confdev_lsfs`](#structudc__config__t_1af7a4ce04947ddceb4c621cfd1da6e19f) {#structudc__config__t_1af7a4ce04947ddceb4c621cfd1da6e19f}
|
||||
|
||||
USB device descriptor for low or full speed.
|
||||
|
||||
#### `public `[`udc_config_speed_t](.build/docs/internals_udc_desc_group.md#structudc__config__speed__t)[UDC_DESC_STORAGE`](.build/docs/internals_undefined.md#group__udc__desc__group_1gae086959cec07a2e71ab069e25a51764f)` * `[`conf_lsfs`](#structudc__config__t_1a5f1714368d3c5fc176c1d31705e8ab89) {#structudc__config__t_1a5f1714368d3c5fc176c1d31705e8ab89}
|
||||
|
||||
USB configuration descriptor and UDI API pointers for low or full speed.
|
||||
|
||||
#### `public `[`usb_dev_bos_desc_t](.build/docs/internals_usb_protocol_group.md#structusb__dev__bos__desc__t)[UDC_DESC_STORAGE`](.build/docs/internals_undefined.md#group__udc__desc__group_1gae086959cec07a2e71ab069e25a51764f)` * `[`conf_bos`](#structudc__config__t_1a1618a7226bcdbef10cf749598ce5d2af) {#structudc__config__t_1a1618a7226bcdbef10cf749598ce5d2af}
|
||||
|
||||
|
|
|
@ -141,31 +141,6 @@ This global variable allows to decode and response a setup request. It can be up
|
|||
|
||||
Members | Descriptions
|
||||
--------------------------------|---------------------------------------------
|
||||
`public `[`usb_setup_req_t`](.build/docs/internals_usb_protocol_group.md#structusb__setup__req__t)` `[`req`](#structudd__ctrl__request__t_1a8ca591128eb7000ed02f8cc730af6e69) | Data received in USB SETUP packet Note: The swap of "req.wValues" from uin16_t to le16_t is done by UDD.
|
||||
`public uint8_t * `[`payload`](#structudd__ctrl__request__t_1aa5cbdad2c57e9b3f949e1a4d96382b66) | Point to buffer to send or fill with data following SETUP packet This buffer must be word align for DATA IN phase (use prefix COMPILER_WORD_ALIGNED for buffer)
|
||||
`public uint16_t `[`payload_size`](#structudd__ctrl__request__t_1a34d21baa46ca7f4b695307631457c75f) | Size of buffer to send or fill, and content the number of byte transfered.
|
||||
`public void(* `[`callback`](#structudd__ctrl__request__t_1a11f084a69a85b6e1da79695b6a3d07c3) | Callback called after reception of ZLP from setup request.
|
||||
`public bool(* `[`over_under_run`](#structudd__ctrl__request__t_1a3d31b0db5458678975632d6b5815ea8c) | Callback called when the buffer given (.payload) is full or empty. This one return false to abort data transfer, or true with a new buffer in .payload.
|
||||
|
||||
## Members
|
||||
|
||||
#### `public `[`usb_setup_req_t`](.build/docs/internals_usb_protocol_group.md#structusb__setup__req__t)` `[`req`](#structudd__ctrl__request__t_1a8ca591128eb7000ed02f8cc730af6e69) {#structudd__ctrl__request__t_1a8ca591128eb7000ed02f8cc730af6e69}
|
||||
|
||||
Data received in USB SETUP packet Note: The swap of "req.wValues" from uin16_t to le16_t is done by UDD.
|
||||
|
||||
#### `public uint8_t * `[`payload`](#structudd__ctrl__request__t_1aa5cbdad2c57e9b3f949e1a4d96382b66) {#structudd__ctrl__request__t_1aa5cbdad2c57e9b3f949e1a4d96382b66}
|
||||
|
||||
Point to buffer to send or fill with data following SETUP packet This buffer must be word align for DATA IN phase (use prefix COMPILER_WORD_ALIGNED for buffer)
|
||||
|
||||
#### `public uint16_t `[`payload_size`](#structudd__ctrl__request__t_1a34d21baa46ca7f4b695307631457c75f) {#structudd__ctrl__request__t_1a34d21baa46ca7f4b695307631457c75f}
|
||||
|
||||
Size of buffer to send or fill, and content the number of byte transfered.
|
||||
|
||||
#### `public void(* `[`callback`](#structudd__ctrl__request__t_1a11f084a69a85b6e1da79695b6a3d07c3) {#structudd__ctrl__request__t_1a11f084a69a85b6e1da79695b6a3d07c3}
|
||||
|
||||
Callback called after reception of ZLP from setup request.
|
||||
|
||||
#### `public bool(* `[`over_under_run`](#structudd__ctrl__request__t_1a3d31b0db5458678975632d6b5815ea8c) {#structudd__ctrl__request__t_1a3d31b0db5458678975632d6b5815ea8c}
|
||||
|
||||
Callback called when the buffer given (.payload) is full or empty. This one return false to abort data transfer, or true with a new buffer in .payload.
|
||||
|
||||
|
|
|
@ -20,56 +20,6 @@ The [udc_get_interface_desc()](.build/docs/internals_undefined.md#group__udc__gr
|
|||
|
||||
Members | Descriptions
|
||||
--------------------------------|---------------------------------------------
|
||||
`public bool(* `[`enable`](#structudi__api__t_1ab2247f6571bf21eb4139a40a23c78eea) | Enable the interface.
|
||||
`public void(* `[`disable`](#structudi__api__t_1ace1449d367bdcce8d6ca549dceac7a7f) | Disable the interface.
|
||||
`public bool(* `[`setup`](#structudi__api__t_1a11fce471b0558711a238238dac0d5e7c) | Handle a control request directed at an interface.
|
||||
`public uint8_t(* `[`getsetting`](#structudi__api__t_1a095cfc23d86008d478b6d002afbdd66a) | Returns the current setting of the selected interface.
|
||||
`public void(* `[`sof_notify`](#structudi__api__t_1a9d8887d1cfbe10252f51a733cb66b9a5) | To signal that a SOF is occurred.
|
||||
|
||||
## Members
|
||||
|
||||
#### `public bool(* `[`enable`](#structudi__api__t_1ab2247f6571bf21eb4139a40a23c78eea) {#structudi__api__t_1ab2247f6571bf21eb4139a40a23c78eea}
|
||||
|
||||
Enable the interface.
|
||||
|
||||
This function is called when the host selects a configuration to which this interface belongs through a Set Configuration request, and when the host selects an alternate setting of this interface through a Set Interface request.
|
||||
|
||||
#### Returns
|
||||
`1` if function was successfully done, otherwise `0`.
|
||||
|
||||
#### `public void(* `[`disable`](#structudi__api__t_1ace1449d367bdcce8d6ca549dceac7a7f) {#structudi__api__t_1ace1449d367bdcce8d6ca549dceac7a7f}
|
||||
|
||||
Disable the interface.
|
||||
|
||||
This function is called when this interface is currently active, and
|
||||
|
||||
* the host selects any configuration through a Set Configuration request, or
|
||||
|
||||
* the host issues a USB reset, or
|
||||
|
||||
* the device is detached from the host (i.e. Vbus is no longer present)
|
||||
|
||||
#### `public bool(* `[`setup`](#structudi__api__t_1a11fce471b0558711a238238dac0d5e7c) {#structudi__api__t_1a11fce471b0558711a238238dac0d5e7c}
|
||||
|
||||
Handle a control request directed at an interface.
|
||||
|
||||
This function is called when this interface is currently active and the host sends a SETUP request with this interface as the recipient.
|
||||
|
||||
Use udd_g_ctrlreq to decode and response to SETUP request.
|
||||
|
||||
#### Returns
|
||||
`1` if this interface supports the SETUP request, otherwise `0`.
|
||||
|
||||
#### `public uint8_t(* `[`getsetting`](#structudi__api__t_1a095cfc23d86008d478b6d002afbdd66a) {#structudi__api__t_1a095cfc23d86008d478b6d002afbdd66a}
|
||||
|
||||
Returns the current setting of the selected interface.
|
||||
|
||||
This function is called when UDC when know alternate setting of selected interface.
|
||||
|
||||
#### Returns
|
||||
alternate setting of selected interface
|
||||
|
||||
#### `public void(* `[`sof_notify`](#structudi__api__t_1a9d8887d1cfbe10252f51a733cb66b9a5) {#structudi__api__t_1a9d8887d1cfbe10252f51a733cb66b9a5}
|
||||
|
||||
To signal that a SOF is occurred.
|
||||
|
||||
|
|
|
@ -8,68 +8,8 @@ protocol definitions
|
|||
|
||||
Members | Descriptions
|
||||
--------------------------------|---------------------------------------------
|
||||
`enum `[`usb_reqid_hid`](#group__usb__hid__protocol_1gaa7c41bb1274630413fb8f1e9a8acb3e5) | Hid USB requests (bRequest)
|
||||
`enum `[`usb_descriptor_type_hid`](#group__usb__hid__protocol_1ga75d07fddd98e94eee499e34ce80eebc7) | HID USB descriptor types.
|
||||
`enum `[`usb_hid_item_report_type`](#group__usb__hid__protocol_1gab8c213eaa38f71a4aae0c2bb7341f170) | HID Type for report descriptor.
|
||||
`enum `[`usb_hid_report_type`](#group__usb__hid__protocol_1ga5832b449d0ccdae41b51ee5436e8df28) | HID report type.
|
||||
`enum `[`usb_hid_protocol`](#group__usb__hid__protocol_1gaf68d2167c72cb42e4788cbeba994c255) | HID protocol.
|
||||
`struct `[`usb_hid_descriptor_t`](#structusb__hid__descriptor__t) | HID Descriptor.
|
||||
|
||||
## Members
|
||||
|
||||
#### `enum `[`usb_reqid_hid`](#group__usb__hid__protocol_1gaa7c41bb1274630413fb8f1e9a8acb3e5) {#group__usb__hid__protocol_1gaa7c41bb1274630413fb8f1e9a8acb3e5}
|
||||
|
||||
Values | Descriptions
|
||||
--------------------------------|---------------------------------------------
|
||||
USB_REQ_HID_GET_REPORT |
|
||||
USB_REQ_HID_GET_IDLE |
|
||||
USB_REQ_HID_GET_PROTOCOL |
|
||||
USB_REQ_HID_SET_REPORT |
|
||||
USB_REQ_HID_SET_IDLE |
|
||||
USB_REQ_HID_SET_PROTOCOL |
|
||||
|
||||
Hid USB requests (bRequest)
|
||||
|
||||
#### `enum `[`usb_descriptor_type_hid`](#group__usb__hid__protocol_1ga75d07fddd98e94eee499e34ce80eebc7) {#group__usb__hid__protocol_1ga75d07fddd98e94eee499e34ce80eebc7}
|
||||
|
||||
Values | Descriptions
|
||||
--------------------------------|---------------------------------------------
|
||||
USB_DT_HID |
|
||||
USB_DT_HID_REPORT |
|
||||
USB_DT_HID_PHYSICAL |
|
||||
|
||||
HID USB descriptor types.
|
||||
|
||||
#### `enum `[`usb_hid_item_report_type`](#group__usb__hid__protocol_1gab8c213eaa38f71a4aae0c2bb7341f170) {#group__usb__hid__protocol_1gab8c213eaa38f71a4aae0c2bb7341f170}
|
||||
|
||||
Values | Descriptions
|
||||
--------------------------------|---------------------------------------------
|
||||
USB_HID_ITEM_REPORT_TYPE_MAIN |
|
||||
USB_HID_ITEM_REPORT_TYPE_GLOBAL |
|
||||
USB_HID_ITEM_REPORT_TYPE_LOCAL |
|
||||
USB_HID_ITEM_REPORT_TYPE_LONG |
|
||||
|
||||
HID Type for report descriptor.
|
||||
|
||||
#### `enum `[`usb_hid_report_type`](#group__usb__hid__protocol_1ga5832b449d0ccdae41b51ee5436e8df28) {#group__usb__hid__protocol_1ga5832b449d0ccdae41b51ee5436e8df28}
|
||||
|
||||
Values | Descriptions
|
||||
--------------------------------|---------------------------------------------
|
||||
USB_HID_REPORT_TYPE_INPUT |
|
||||
USB_HID_REPORT_TYPE_OUTPUT |
|
||||
USB_HID_REPORT_TYPE_FEATURE |
|
||||
|
||||
HID report type.
|
||||
|
||||
#### `enum `[`usb_hid_protocol`](#group__usb__hid__protocol_1gaf68d2167c72cb42e4788cbeba994c255) {#group__usb__hid__protocol_1gaf68d2167c72cb42e4788cbeba994c255}
|
||||
|
||||
Values | Descriptions
|
||||
--------------------------------|---------------------------------------------
|
||||
USB_HID_PROCOTOL_BOOT |
|
||||
USB_HID_PROCOTOL_REPORT |
|
||||
|
||||
HID protocol.
|
||||
|
||||
# struct `usb_hid_descriptor_t` {#structusb__hid__descriptor__t}
|
||||
|
||||
HID Descriptor.
|
||||
|
|
Loading…
Reference in a new issue