39 #if defined(PIOS_INCLUDE_USB_HID)
42 static bool transfer_possible =
false;
45 static volatile bool sof_seen_since_reset =
false;
47 enum pios_usb_dev_magic {
48 PIOS_USB_DEV_MAGIC = 0x17365904,
52 enum pios_usb_dev_magic
magic;
60 static int32_t PIOS_USB_validate(
struct pios_usb_dev * usb_dev)
65 if (usb_dev->magic != PIOS_USB_DEV_MAGIC)
71 static struct pios_usb_dev * PIOS_USB_alloc(
void)
73 struct pios_usb_dev * usb_dev;
75 usb_dev = (
struct pios_usb_dev *)
PIOS_malloc(
sizeof(*usb_dev));
76 if (!usb_dev)
return(NULL);
78 usb_dev->magic = PIOS_USB_DEV_MAGIC;
87 static uintptr_t pios_usb_com_id;
93 struct pios_usb_dev * usb_dev;
95 usb_dev = (
struct pios_usb_dev *) PIOS_USB_alloc();
96 if (!usb_dev)
goto out_fail;
107 pios_usb_com_id = (uintptr_t) usb_dev;
110 NVIC_Init((NVIC_InitTypeDef*)&usb_dev->cfg->irq.init);
113 GPIO_InitTypeDef GPIO_InitStructure;
114 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
115 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
116 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
117 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
118 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
119 GPIO_Init(GPIOA, &GPIO_InitStructure);
121 GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_14);
122 GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_14);
125 if (usb_dev->cfg->vsense.gpio)
126 GPIO_Init(usb_dev->cfg->vsense.gpio, (GPIO_InitTypeDef*)&usb_dev->cfg->vsense.init);
129 RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
131 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);
136 *usb_id = (uintptr_t) usb_dev;
154 transfer_possible =
true;
158 #if defined(USB_LED_ON)
163 transfer_possible =
false;
165 #if defined(USB_LED_OFF)
176 _SetCNTR(CNTR_FRES | CNTR_PDWN);
181 GPIO_InitTypeDef GPIO_InitStructure;
182 GPIO_StructInit(&GPIO_InitStructure);
183 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
184 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
185 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
186 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
187 GPIO_Init(GPIOA, &GPIO_InitStructure);
202 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
203 GPIO_Init(GPIOA, &GPIO_InitStructure);
207 RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
209 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);
216 struct pios_usb_dev * usb_dev = (
struct pios_usb_dev *) pios_usb_com_id;
218 if (PIOS_USB_validate(usb_dev) != 0)
222 if (usb_dev->cfg->vsense.gpio != NULL)
223 return GPIO_ReadInputDataBit(usb_dev->cfg->vsense.gpio, usb_dev->cfg->vsense.init.GPIO_Pin) == Bit_SET;
225 return sof_seen_since_reset;
230 struct pios_usb_dev * usb_dev = (
struct pios_usb_dev *) pios_usb_com_id;
232 if (PIOS_USB_validate(usb_dev) != 0)
235 return usb_dev->cfg->vsense.gpio != NULL;
246 struct pios_usb_dev * usb_dev = (
struct pios_usb_dev *) pios_usb_com_id;
248 if (PIOS_USB_validate(usb_dev) != 0)
254 void SOF_Callback(
void)
256 sof_seen_since_reset =
true;
259 void SUSP_Callback(
void)
261 sof_seen_since_reset =
false;
Main PiOS header to include all the compiled in PiOS options.
int32_t PIOS_USB_Reenumerate()
void * PIOS_malloc(size_t size)
bool PIOS_USB_CheckAvailable(uintptr_t id)
static struct flyingpicmd_cfg_fa cfg
int32_t PIOS_USB_ChangeConnectionState(bool connected)
USB HID layer functions header.
bool PIOS_USB_HaveVSense(uintptr_t id)
int32_t PIOS_USB_Init(uintptr_t *usb_id, const struct pios_usb_cfg *cfg)
bool PIOS_USB_CableConnected(uintptr_t id)
#define PIOS_Assert(test)
int32_t PIOS_DELAY_WaitmS(uint32_t mS)
int32_t PIOS_DELAY_WaituS(uint32_t uS)