USBDevice compatible with frdmk22f-usbhid-4axis

Dependents:   frdmk22f-usbhid-4axis

Committer:
Kojto
Date:
Thu Jul 27 12:14:04 2017 +0100
Revision:
71:53949e6131f6
Update libraries

Fixes the previous commmit, as some devices were not copied. USBDevice contains
now targets directory with all targets implementations

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kojto 71:53949e6131f6 1 /* Copyright (c) 2016 mbed.org, MIT License
Kojto 71:53949e6131f6 2 *
Kojto 71:53949e6131f6 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
Kojto 71:53949e6131f6 4 * and associated documentation files (the "Software"), to deal in the Software without
Kojto 71:53949e6131f6 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
Kojto 71:53949e6131f6 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
Kojto 71:53949e6131f6 7 * Software is furnished to do so, subject to the following conditions:
Kojto 71:53949e6131f6 8 *
Kojto 71:53949e6131f6 9 * The above copyright notice and this permission notice shall be included in all copies or
Kojto 71:53949e6131f6 10 * substantial portions of the Software.
Kojto 71:53949e6131f6 11 *
Kojto 71:53949e6131f6 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
Kojto 71:53949e6131f6 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Kojto 71:53949e6131f6 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
Kojto 71:53949e6131f6 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Kojto 71:53949e6131f6 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Kojto 71:53949e6131f6 17 */
Kojto 71:53949e6131f6 18 #ifndef USBHAL_STM32L072CZ_H
Kojto 71:53949e6131f6 19 #define USBHAL_STM32L072CZ_H
Kojto 71:53949e6131f6 20
Kojto 71:53949e6131f6 21 #define USBHAL_IRQn USB_IRQn
Kojto 71:53949e6131f6 22
Kojto 71:53949e6131f6 23 /* must be multiple of 4 bytes */
Kojto 71:53949e6131f6 24 #define NB_ENDPOINT 8
Kojto 71:53949e6131f6 25 #define MAXTRANSFER_SIZE 0x200
Kojto 71:53949e6131f6 26 #define FIFO_USB_RAM_SIZE (MAXTRANSFER_SIZE+MAX_PACKET_SIZE_EP0+MAX_PACKET_SIZE_EP1+MAX_PACKET_SIZE_EP2+MAX_PACKET_SIZE_EP3)
Kojto 71:53949e6131f6 27 #if (FIFO_USB_RAM_SIZE > 0x500)
Kojto 71:53949e6131f6 28 #error "FIFO dimensioning incorrect"
Kojto 71:53949e6131f6 29 #endif
Kojto 71:53949e6131f6 30
Kojto 71:53949e6131f6 31 typedef struct
Kojto 71:53949e6131f6 32 {
Kojto 71:53949e6131f6 33 USBHAL *inst;
Kojto 71:53949e6131f6 34 void (USBHAL::*bus_reset)(void);
Kojto 71:53949e6131f6 35 void (USBHAL::*sof)(int frame);
Kojto 71:53949e6131f6 36 void (USBHAL::*connect_change)(unsigned int connected);
Kojto 71:53949e6131f6 37 void (USBHAL::*suspend_change)(unsigned int suspended);
Kojto 71:53949e6131f6 38 void (USBHAL::*ep0_setup)(void);
Kojto 71:53949e6131f6 39 void (USBHAL::*ep0_in)(void);
Kojto 71:53949e6131f6 40 void (USBHAL::*ep0_out)(void);
Kojto 71:53949e6131f6 41 void (USBHAL::*ep0_read)(void);
Kojto 71:53949e6131f6 42 bool (USBHAL::*ep_realise)(uint8_t endpoint, uint32_t maxPacket, uint32_t flags);
Kojto 71:53949e6131f6 43 bool (USBHAL::*epCallback[6])(void);
Kojto 71:53949e6131f6 44 uint8_t epComplete[2*NB_ENDPOINT];
Kojto 71:53949e6131f6 45 /* memorize dummy buffer used for reception */
Kojto 71:53949e6131f6 46 uint32_t pBufRx[MAXTRANSFER_SIZE>>2];
Kojto 71:53949e6131f6 47 uint32_t pBufRx0[MAX_PACKET_SIZE_EP0>>2];
Kojto 71:53949e6131f6 48 gpio_t usb_switch;
Kojto 71:53949e6131f6 49 }USBHAL_Private_t;
Kojto 71:53949e6131f6 50
Kojto 71:53949e6131f6 51 uint32_t HAL_PCDEx_GetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo)
Kojto 71:53949e6131f6 52 {
Kojto 71:53949e6131f6 53 return 1024;
Kojto 71:53949e6131f6 54 }
Kojto 71:53949e6131f6 55
Kojto 71:53949e6131f6 56 void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state)
Kojto 71:53949e6131f6 57 {
Kojto 71:53949e6131f6 58 USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
Kojto 71:53949e6131f6 59 gpio_write(&(priv->usb_switch),state);
Kojto 71:53949e6131f6 60 }
Kojto 71:53949e6131f6 61
Kojto 71:53949e6131f6 62 void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
Kojto 71:53949e6131f6 63 {
Kojto 71:53949e6131f6 64 USBHAL_Private_t *priv=((USBHAL_Private_t *)(hpcd->pData));
Kojto 71:53949e6131f6 65 USBHAL *obj= priv->inst;
Kojto 71:53949e6131f6 66 uint32_t sofnum = (hpcd->Instance->FNR) & USB_FNR_FN;
Kojto 71:53949e6131f6 67 void (USBHAL::*func)(int frame) = priv->sof;
Kojto 71:53949e6131f6 68 (obj->*func)(sofnum);
Kojto 71:53949e6131f6 69 }
Kojto 71:53949e6131f6 70
Kojto 71:53949e6131f6 71 USBHAL * USBHAL::instance;
Kojto 71:53949e6131f6 72
Kojto 71:53949e6131f6 73 USBHAL::USBHAL(void)
Kojto 71:53949e6131f6 74 {
Kojto 71:53949e6131f6 75 /* init parameter */
Kojto 71:53949e6131f6 76 USBHAL_Private_t *HALPriv = new(USBHAL_Private_t);
Kojto 71:53949e6131f6 77 hpcd.Instance = USB;
Kojto 71:53949e6131f6 78 /* initialized Init to zero (constructor does not zero initialized the
Kojto 71:53949e6131f6 79 * area */
Kojto 71:53949e6131f6 80 /* initialized all field of init including 0 field */
Kojto 71:53949e6131f6 81 /* constructor does not fill with zero */
Kojto 71:53949e6131f6 82 memset(&hpcd.Init, 0, sizeof(hpcd.Init));
Kojto 71:53949e6131f6 83 hpcd.Init.dev_endpoints = NB_ENDPOINT;
Kojto 71:53949e6131f6 84 hpcd.Init.ep0_mps = MAX_PACKET_SIZE_EP0;
Kojto 71:53949e6131f6 85 hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
Kojto 71:53949e6131f6 86 hpcd.Init.Sof_enable = 1;
Kojto 71:53949e6131f6 87 hpcd.Init.speed = PCD_SPEED_FULL;
Kojto 71:53949e6131f6 88 /* pass instance for usage inside call back */
Kojto 71:53949e6131f6 89 HALPriv->inst = this;
Kojto 71:53949e6131f6 90 HALPriv->bus_reset = &USBHAL::busReset;
Kojto 71:53949e6131f6 91 HALPriv->suspend_change = &USBHAL::suspendStateChanged;
Kojto 71:53949e6131f6 92 HALPriv->connect_change = &USBHAL::connectStateChanged;
Kojto 71:53949e6131f6 93 HALPriv->sof = &USBHAL::SOF;
Kojto 71:53949e6131f6 94 HALPriv->ep0_setup = &USBHAL::EP0setupCallback;
Kojto 71:53949e6131f6 95 HALPriv->ep_realise = &USBHAL::realiseEndpoint;
Kojto 71:53949e6131f6 96 HALPriv->ep0_in = &USBHAL::EP0in;
Kojto 71:53949e6131f6 97 HALPriv->ep0_out = &USBHAL::EP0out;
Kojto 71:53949e6131f6 98 HALPriv->ep0_read = &USBHAL::EP0read;
Kojto 71:53949e6131f6 99 hpcd.pData = (void*)HALPriv;
Kojto 71:53949e6131f6 100 HALPriv->epCallback[0] = &USBHAL::EP1_OUT_callback;
Kojto 71:53949e6131f6 101 HALPriv->epCallback[1] = &USBHAL::EP1_IN_callback;
Kojto 71:53949e6131f6 102 HALPriv->epCallback[2] = &USBHAL::EP2_OUT_callback;
Kojto 71:53949e6131f6 103 HALPriv->epCallback[3] = &USBHAL::EP2_IN_callback;
Kojto 71:53949e6131f6 104 HALPriv->epCallback[4] = &USBHAL::EP3_OUT_callback;
Kojto 71:53949e6131f6 105 HALPriv->epCallback[5] = &USBHAL::EP3_IN_callback;
Kojto 71:53949e6131f6 106 instance = this;
Kojto 71:53949e6131f6 107
Kojto 71:53949e6131f6 108 /* Configure USB DM pin. This is optional, and maintained only for user guidance. */
Kojto 71:53949e6131f6 109 __HAL_RCC_GPIOA_CLK_ENABLE();
Kojto 71:53949e6131f6 110 pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_USB));
Kojto 71:53949e6131f6 111 pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF2_USB));
Kojto 71:53949e6131f6 112
Kojto 71:53949e6131f6 113 /* Enable USB Clock */
Kojto 71:53949e6131f6 114 __HAL_RCC_USB_CLK_ENABLE();
Kojto 71:53949e6131f6 115
Kojto 71:53949e6131f6 116 /* Enable SYSCFG Clock */
Kojto 71:53949e6131f6 117 __HAL_RCC_SYSCFG_CLK_ENABLE();
Kojto 71:53949e6131f6 118 hpcd.State = HAL_PCD_STATE_RESET;
Kojto 71:53949e6131f6 119 HAL_PCD_Init(&hpcd);
Kojto 71:53949e6131f6 120
Kojto 71:53949e6131f6 121 /* hardcoded size of FIFO according definition*/
Kojto 71:53949e6131f6 122 HAL_PCDEx_PMAConfig(&hpcd , 0x00 , PCD_SNG_BUF, 0x30);
Kojto 71:53949e6131f6 123 HAL_PCDEx_PMAConfig(&hpcd , 0x80 , PCD_SNG_BUF, 0x70);
Kojto 71:53949e6131f6 124 HAL_PCDEx_PMAConfig(&hpcd , 0x3, PCD_DBL_BUF, 0x018000b0);
Kojto 71:53949e6131f6 125 HAL_PCDEx_PMAConfig(&hpcd , 0x83, PCD_SNG_BUF, 0xb0);
Kojto 71:53949e6131f6 126
Kojto 71:53949e6131f6 127 NVIC_SetVector(USBHAL_IRQn,(uint32_t)&_usbisr);
Kojto 71:53949e6131f6 128 NVIC_SetPriority(USBHAL_IRQn, 1);
Kojto 71:53949e6131f6 129 HAL_PCD_Start(&hpcd);
Kojto 71:53949e6131f6 130 }
Kojto 71:53949e6131f6 131 #endif