From cff706e3ca3823ffb388a4e87c4ef8bf925945c4 Mon Sep 17 00:00:00 2001 From: Fergus Noble Date: Thu, 15 Sep 2011 01:20:45 -0700 Subject: Rename F1 examples folder. --- examples/stm32/lisa-m/fancyblink/Makefile | 23 -- examples/stm32/lisa-m/fancyblink/fancyblink.c | 67 ------ examples/stm32/lisa-m/fancyblink/fancyblink.ld | 31 --- examples/stm32/lisa-m/usb_dfu/Makefile | 23 -- examples/stm32/lisa-m/usb_dfu/README | 7 - examples/stm32/lisa-m/usb_dfu/usbdfu.c | 270 ----------------------- examples/stm32/lisa-m/usb_dfu/usbdfu.ld | 29 --- examples/stm32/lisa-m/usb_hid/Makefile | 23 -- examples/stm32/lisa-m/usb_hid/README | 7 - examples/stm32/lisa-m/usb_hid/usbhid.c | 289 ------------------------- examples/stm32/lisa-m/usb_hid/usbhid.ld | 31 --- 11 files changed, 800 deletions(-) delete mode 100644 examples/stm32/lisa-m/fancyblink/Makefile delete mode 100644 examples/stm32/lisa-m/fancyblink/fancyblink.c delete mode 100644 examples/stm32/lisa-m/fancyblink/fancyblink.ld delete mode 100644 examples/stm32/lisa-m/usb_dfu/Makefile delete mode 100644 examples/stm32/lisa-m/usb_dfu/README delete mode 100644 examples/stm32/lisa-m/usb_dfu/usbdfu.c delete mode 100644 examples/stm32/lisa-m/usb_dfu/usbdfu.ld delete mode 100644 examples/stm32/lisa-m/usb_hid/Makefile delete mode 100644 examples/stm32/lisa-m/usb_hid/README delete mode 100644 examples/stm32/lisa-m/usb_hid/usbhid.c delete mode 100644 examples/stm32/lisa-m/usb_hid/usbhid.ld (limited to 'examples/stm32/lisa-m') diff --git a/examples/stm32/lisa-m/fancyblink/Makefile b/examples/stm32/lisa-m/fancyblink/Makefile deleted file mode 100644 index 1baec4d..0000000 --- a/examples/stm32/lisa-m/fancyblink/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -## -## This file is part of the libopencm3 project. -## -## Copyright (C) 2009 Uwe Hermann -## -## This program is free software: you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation, either version 3 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program. If not, see . -## - -BINARY = fancyblink - -include ../../Makefile.include - diff --git a/examples/stm32/lisa-m/fancyblink/fancyblink.c b/examples/stm32/lisa-m/fancyblink/fancyblink.c deleted file mode 100644 index 5987bdf..0000000 --- a/examples/stm32/lisa-m/fancyblink/fancyblink.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * This file is part of the libopencm3 project. - * - * Copyright (C) 2009 Uwe Hermann - * Copyright (C) 2011 Piotr Esden-Tempski - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include - -/* Set STM32 to 72 MHz. */ -void clock_setup(void) -{ - rcc_clock_setup_in_hse_12mhz_out_72mhz(); - - /* Enable GPIOC clock. */ - rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPBEN); - rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPCEN); - rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_AFIOEN); - -} - -void gpio_setup(void) -{ - /* Set GPIO12 (in GPIO port C) to 'output push-pull'. */ - gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_50_MHZ, - GPIO_CNF_OUTPUT_PUSHPULL, GPIO13); - gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, - GPIO_CNF_OUTPUT_PUSHPULL, GPIO4); - - AFIO_MAPR |= AFIO_MAPR_SWJ_CFG_FULL_SWJ_NO_JNTRST; - - /* preconfigure the led's */ - gpio_set(GPIOB, GPIO4); /* switch off led */ - gpio_clear(GPIOC, GPIO13); /* switch on led */ -} - -int main(void) -{ - int i; - - clock_setup(); - gpio_setup(); - - /* Blink the LED (PC12) on the board. */ - while (1) { - gpio_toggle(GPIOC, GPIO13); /* LED on/off */ - gpio_toggle(GPIOB, GPIO4); /* LED on/off */ - for (i = 0; i < 800000; i++) /* Wait a bit. */ - __asm__("nop"); - } - - return 0; -} diff --git a/examples/stm32/lisa-m/fancyblink/fancyblink.ld b/examples/stm32/lisa-m/fancyblink/fancyblink.ld deleted file mode 100644 index 7ea2b92..0000000 --- a/examples/stm32/lisa-m/fancyblink/fancyblink.ld +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of the libopencm3 project. - * - * Copyright (C) 2009 Uwe Hermann - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/* Linker script for Olimex STM32-H103 (STM32F103RBT6, 128K flash, 20K RAM). */ - -/* Define memory regions. */ -MEMORY -{ - rom (rx) : ORIGIN = 0x08000000, LENGTH = 128K - ram (rwx) : ORIGIN = 0x20000000, LENGTH = 20K -} - -/* Include the common ld script. */ -INCLUDE libopencm3_stm32.ld - diff --git a/examples/stm32/lisa-m/usb_dfu/Makefile b/examples/stm32/lisa-m/usb_dfu/Makefile deleted file mode 100644 index 48e2d6b..0000000 --- a/examples/stm32/lisa-m/usb_dfu/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -## -## This file is part of the libopencm3 project. -## -## Copyright (C) 2009 Uwe Hermann -## -## This program is free software: you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation, either version 3 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program. If not, see . -## - -BINARY = usbdfu - -include ../../Makefile.include - diff --git a/examples/stm32/lisa-m/usb_dfu/README b/examples/stm32/lisa-m/usb_dfu/README deleted file mode 100644 index 9c0169a..0000000 --- a/examples/stm32/lisa-m/usb_dfu/README +++ /dev/null @@ -1,7 +0,0 @@ ------------------------------------------------------------------------------- -README ------------------------------------------------------------------------------- - -This example implements a USB Device Firmware Upgrade (DFU) bootloader -to demonstrate the use of the USB device stack. - diff --git a/examples/stm32/lisa-m/usb_dfu/usbdfu.c b/examples/stm32/lisa-m/usb_dfu/usbdfu.c deleted file mode 100644 index 7ffbc74..0000000 --- a/examples/stm32/lisa-m/usb_dfu/usbdfu.c +++ /dev/null @@ -1,270 +0,0 @@ -/* - * This file is part of the libopencm3 project. - * - * Copyright (C) 2010 Gareth McMullin - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include -#include -#include -#include -#include -#include - -#define APP_ADDRESS 0x08002000 - -/* Commands sent with wBlockNum == 0 as per ST implementation. */ -#define CMD_SETADDR 0x21 -#define CMD_ERASE 0x41 - -/* We need a special large control buffer for this device: */ -u8 usbd_control_buffer[1024]; - -static enum dfu_state usbdfu_state = STATE_DFU_IDLE; - -static struct { - u8 buf[sizeof(usbd_control_buffer)]; - u16 len; - u32 addr; - u16 blocknum; -} prog; - -const struct usb_device_descriptor dev = { - .bLength = USB_DT_DEVICE_SIZE, - .bDescriptorType = USB_DT_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0, - .bDeviceSubClass = 0, - .bDeviceProtocol = 0, - .bMaxPacketSize0 = 64, - .idVendor = 0x0483, - .idProduct = 0xDF11, - .bcdDevice = 0x0200, - .iManufacturer = 1, - .iProduct = 2, - .iSerialNumber = 3, - .bNumConfigurations = 1, -}; - -const struct usb_dfu_descriptor dfu_function = { - .bLength = sizeof(struct usb_dfu_descriptor), - .bDescriptorType = DFU_FUNCTIONAL, - .bmAttributes = USB_DFU_CAN_DOWNLOAD | USB_DFU_WILL_DETACH, - .wDetachTimeout = 255, - .wTransferSize = 1024, - .bcdDFUVersion = 0x011A, -}; - -const struct usb_interface_descriptor iface = { - .bLength = USB_DT_INTERFACE_SIZE, - .bDescriptorType = USB_DT_INTERFACE, - .bInterfaceNumber = 0, - .bAlternateSetting = 0, - .bNumEndpoints = 0, - .bInterfaceClass = 0xFE, /* Device Firmware Upgrade */ - .bInterfaceSubClass = 1, - .bInterfaceProtocol = 2, - - /* The ST Microelectronics DfuSe application needs this string. - * The format isn't documented... */ - .iInterface = 4, - - .extra = &dfu_function, - .extralen = sizeof(dfu_function), -}; - -const struct usb_interface ifaces[] = {{ - .num_altsetting = 1, - .altsetting = &iface, -}}; - -const struct usb_config_descriptor config = { - .bLength = USB_DT_CONFIGURATION_SIZE, - .bDescriptorType = USB_DT_CONFIGURATION, - .wTotalLength = 0, - .bNumInterfaces = 1, - .bConfigurationValue = 1, - .iConfiguration = 0, - .bmAttributes = 0xC0, - .bMaxPower = 0x32, - - .interface = ifaces, -}; - -static const char *usb_strings[] = { - "x", - "Black Sphere Technologies", - "DFU Demo", - "DEMO", - /* This string is used by ST Microelectronics' DfuSe utility */ - "@Internal Flash /0x08000000/8*001Ka,56*001Kg" -}; - -static u8 usbdfu_getstatus(u32 *bwPollTimeout) -{ - switch(usbdfu_state) { - case STATE_DFU_DNLOAD_SYNC: - usbdfu_state = STATE_DFU_DNBUSY; - *bwPollTimeout = 100; - return DFU_STATUS_OK; - - case STATE_DFU_MANIFEST_SYNC: - /* Device will reset when read is complete */ - usbdfu_state = STATE_DFU_MANIFEST; - return DFU_STATUS_OK; - - default: - return DFU_STATUS_OK; - } -} - -static void usbdfu_getstatus_complete(struct usb_setup_data *req) -{ - int i; - (void)req; - - switch(usbdfu_state) { - case STATE_DFU_DNBUSY: - - flash_unlock(); - if(prog.blocknum == 0) { - switch(prog.buf[0]) { - case CMD_ERASE: - flash_erase_page(*(u32*)(prog.buf+1)); - case CMD_SETADDR: - prog.addr = *(u32*)(prog.buf+1); - } - } else { - u32 baseaddr = prog.addr + - ((prog.blocknum - 2) * - dfu_function.wTransferSize); - for(i = 0; i < prog.len; i += 2) - flash_program_half_word(baseaddr + i, - *(u16*)(prog.buf+i)); - } - flash_lock(); - - /* We jump straight to dfuDNLOAD-IDLE, - * skipping dfuDNLOAD-SYNC - */ - usbdfu_state = STATE_DFU_DNLOAD_IDLE; - return; - - case STATE_DFU_MANIFEST: - /* USB device must detach, we just reset... */ - scb_reset_system(); - return; /* Will never return */ - default: - return; - } -} - -static int usbdfu_control_request(struct usb_setup_data *req, u8 **buf, - u16 *len, void (**complete)(struct usb_setup_data *req)) -{ - - if((req->bmRequestType & 0x7F) != 0x21) - return 0; /* Only accept class request */ - - switch(req->bRequest) { - case DFU_DNLOAD: - if((len == NULL) || (*len == 0)) { - usbdfu_state = STATE_DFU_MANIFEST_SYNC; - return 1; - } else { - /* Copy download data for use on GET_STATUS */ - prog.blocknum = req->wValue; - prog.len = *len; - memcpy(prog.buf, *buf, *len); - usbdfu_state = STATE_DFU_DNLOAD_SYNC; - return 1; - } - case DFU_CLRSTATUS: - /* Clear error and return to dfuIDLE */ - if(usbdfu_state == STATE_DFU_ERROR) - usbdfu_state = STATE_DFU_IDLE; - return 1; - case DFU_ABORT: - /* Abort returns to dfuIDLE state */ - usbdfu_state = STATE_DFU_IDLE; - return 1; - case DFU_UPLOAD: - /* Upload not supported for now */ - return 0; - case DFU_GETSTATUS: { - u32 bwPollTimeout = 0; /* 24-bit integer in DFU class spec */ - - (*buf)[0] = usbdfu_getstatus(&bwPollTimeout); - (*buf)[1] = bwPollTimeout & 0xFF; - (*buf)[2] = (bwPollTimeout >> 8) & 0xFF; - (*buf)[3] = (bwPollTimeout >> 16) & 0xFF; - (*buf)[4] = usbdfu_state; - (*buf)[5] = 0; /* iString not used here */ - *len = 6; - - *complete = usbdfu_getstatus_complete; - - return 1; - } - case DFU_GETSTATE: - /* Return state with no state transision */ - *buf[0] = usbdfu_state; - *len = 1; - return 1; - } - - return 0; -} - -int main(void) -{ - rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPAEN); - if(!gpio_get(GPIOA, GPIO10)) { - /* Boot the application if it's valid */ - if((*(volatile u32*)APP_ADDRESS & 0x2FFE0000) == 0x20000000) { - /* Set vector table base address */ - SCB_VTOR = APP_ADDRESS & 0xFFFF; - /* Initialise master stack pointer */ - asm volatile ("msr msp, %0"::"g" - (*(volatile u32*)APP_ADDRESS)); - /* Jump to application */ - (*(void(**)())(APP_ADDRESS + 4))(); - } - } - - rcc_clock_setup_in_hsi_out_48mhz(); - - rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPAEN); - rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_AFIOEN); - - AFIO_MAPR |= AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_ON; - gpio_set_mode(GPIOA, GPIO_MODE_INPUT, 0, GPIO15); - - usbd_init(&stm32f103_usb_driver, &dev, &config, usb_strings); - usbd_set_control_buffer_size(sizeof(usbd_control_buffer)); - usbd_register_control_callback( - USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE, - USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT, - usbdfu_control_request); - - gpio_set(GPIOA, GPIO15); - gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_2_MHZ, - GPIO_CNF_OUTPUT_PUSHPULL, GPIO15); - - while (1) - usbd_poll(); -} diff --git a/examples/stm32/lisa-m/usb_dfu/usbdfu.ld b/examples/stm32/lisa-m/usb_dfu/usbdfu.ld deleted file mode 100644 index 54e5dac..0000000 --- a/examples/stm32/lisa-m/usb_dfu/usbdfu.ld +++ /dev/null @@ -1,29 +0,0 @@ -/* - * This file is part of the libopencm3 project. - * - * Copyright (C) 2010 Thomas Otto - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/* Define memory regions. */ -MEMORY -{ - rom (rx) : ORIGIN = 0x08000000, LENGTH = 8K - ram (rwx) : ORIGIN = 0x20000000, LENGTH = 4K -} - -/* Include the common ld script. */ -INCLUDE libopencm3_stm32.ld - diff --git a/examples/stm32/lisa-m/usb_hid/Makefile b/examples/stm32/lisa-m/usb_hid/Makefile deleted file mode 100644 index d831e9e..0000000 --- a/examples/stm32/lisa-m/usb_hid/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -## -## This file is part of the libopencm3 project. -## -## Copyright (C) 2009 Uwe Hermann -## -## This program is free software: you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation, either version 3 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program. If not, see . -## - -BINARY = usbhid - -include ../../Makefile.include - diff --git a/examples/stm32/lisa-m/usb_hid/README b/examples/stm32/lisa-m/usb_hid/README deleted file mode 100644 index 48a9b39..0000000 --- a/examples/stm32/lisa-m/usb_hid/README +++ /dev/null @@ -1,7 +0,0 @@ ------------------------------------------------------------------------------- -README ------------------------------------------------------------------------------- - -This example implements a USB Human Interface Device (HID) -to demonstrate the use of the USB device stack. - diff --git a/examples/stm32/lisa-m/usb_hid/usbhid.c b/examples/stm32/lisa-m/usb_hid/usbhid.c deleted file mode 100644 index f42454b..0000000 --- a/examples/stm32/lisa-m/usb_hid/usbhid.c +++ /dev/null @@ -1,289 +0,0 @@ -/* - * This file is part of the libopencm3 project. - * - * Copyright (C) 2010 Gareth McMullin - * Copyright (C) 2011 Piotr Esden-Tempski - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include -#include -#include -#include -#include -#include - -/* Define this to include the DFU APP interface. */ -#define INCLUDE_DFU_INTERFACE - -#ifdef INCLUDE_DFU_INTERFACE -#include -#include -#endif - -const struct usb_device_descriptor dev = { - .bLength = USB_DT_DEVICE_SIZE, - .bDescriptorType = USB_DT_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0, - .bDeviceSubClass = 0, - .bDeviceProtocol = 0, - .bMaxPacketSize0 = 64, - .idVendor = 0x0483, - .idProduct = 0x5710, - .bcdDevice = 0x0200, - .iManufacturer = 1, - .iProduct = 2, - .iSerialNumber = 3, - .bNumConfigurations = 1, -}; - -/* I have no idea what this means. I haven't read the HID spec. */ -static const u8 hid_report_descriptor[] = { - 0x05, 0x01, 0x09, 0x02, 0xA1, 0x01, 0x09, 0x01, - 0xA1, 0x00, 0x05, 0x09, 0x19, 0x01, 0x29, 0x03, - 0x15, 0x00, 0x25, 0x01, 0x95, 0x03, 0x75, 0x01, - 0x81, 0x02, 0x95, 0x01, 0x75, 0x05, 0x81, 0x01, - 0x05, 0x01, 0x09, 0x30, 0x09, 0x31, 0x09, 0x38, - 0x15, 0x81, 0x25, 0x7F, 0x75, 0x08, 0x95, 0x03, - 0x81, 0x06, 0xC0, 0x09, 0x3c, 0x05, 0xff, 0x09, - 0x01, 0x15, 0x00, 0x25, 0x01, 0x75, 0x01, 0x95, - 0x02, 0xb1, 0x22, 0x75, 0x06, 0x95, 0x01, 0xb1, - 0x01, 0xc0 -}; - -static const struct { - struct usb_hid_descriptor hid_descriptor; - struct { - u8 bReportDescriptorType; - u16 wDescriptorLength; - } __attribute__((packed)) hid_report; -} __attribute__((packed)) hid_function = { - .hid_descriptor = { - .bLength = sizeof(hid_function), - .bDescriptorType = USB_DT_HID, - .bcdHID = 0x0100, - .bCountryCode = 0, - .bNumDescriptors = 1, - }, - .hid_report = { - .bReportDescriptorType = USB_DT_REPORT, - .wDescriptorLength = sizeof(hid_report_descriptor), - } -}; - -const struct usb_endpoint_descriptor hid_endpoint = { - .bLength = USB_DT_ENDPOINT_SIZE, - .bDescriptorType = USB_DT_ENDPOINT, - .bEndpointAddress = 0x81, - .bmAttributes = USB_ENDPOINT_ATTR_INTERRUPT, - .wMaxPacketSize = 4, - .bInterval = 0x20, -}; - -const struct usb_interface_descriptor hid_iface = { - .bLength = USB_DT_INTERFACE_SIZE, - .bDescriptorType = USB_DT_INTERFACE, - .bInterfaceNumber = 0, - .bAlternateSetting = 0, - .bNumEndpoints = 1, - .bInterfaceClass = USB_CLASS_HID, - .bInterfaceSubClass = 1, /* boot */ - .bInterfaceProtocol = 2, /* mouse */ - .iInterface = 0, - - .endpoint = &hid_endpoint, - - .extra = &hid_function, - .extralen = sizeof(hid_function), -}; - -#ifdef INCLUDE_DFU_INTERFACE -const struct usb_dfu_descriptor dfu_function = { - .bLength = sizeof(struct usb_dfu_descriptor), - .bDescriptorType = DFU_FUNCTIONAL, - .bmAttributes = USB_DFU_CAN_DOWNLOAD | USB_DFU_WILL_DETACH, - .wDetachTimeout = 255, - .wTransferSize = 1024, - .bcdDFUVersion = 0x011A, -}; - -const struct usb_interface_descriptor dfu_iface = { - .bLength = USB_DT_INTERFACE_SIZE, - .bDescriptorType = USB_DT_INTERFACE, - .bInterfaceNumber = 1, - .bAlternateSetting = 0, - .bNumEndpoints = 0, - .bInterfaceClass = 0xFE, - .bInterfaceSubClass = 1, - .bInterfaceProtocol = 1, - .iInterface = 0, - - .extra = &dfu_function, - .extralen = sizeof(dfu_function), -}; -#endif - -const struct usb_interface ifaces[] = {{ - .num_altsetting = 1, - .altsetting = &hid_iface, -#ifdef INCLUDE_DFU_INTERFACE -}, { - .num_altsetting = 1, - .altsetting = &dfu_iface, -#endif -}}; - -const struct usb_config_descriptor config = { - .bLength = USB_DT_CONFIGURATION_SIZE, - .bDescriptorType = USB_DT_CONFIGURATION, - .wTotalLength = 0, -#ifdef INCLUDE_DFU_INTERFACE - .bNumInterfaces = 2, -#else - .bNumInterfaces = 1, -#endif - .bConfigurationValue = 1, - .iConfiguration = 0, - .bmAttributes = 0xC0, - .bMaxPower = 0x32, - - .interface = ifaces, -}; - -static const char *usb_strings[] = { - "x", - "Black Sphere Technologies", - "HID Demo", - "DEMO", -}; - -static int hid_control_request(struct usb_setup_data *req, u8 **buf, u16 *len, - void (**complete)(struct usb_setup_data *req)) -{ - (void)complete; - - if((req->bmRequestType != 0x81) || - (req->bRequest != USB_REQ_GET_DESCRIPTOR) || - (req->wValue != 0x2200)) - return 0; - - /* Handle the HID report descriptor */ - *buf = (u8*)hid_report_descriptor; - *len = sizeof(hid_report_descriptor); - - return 1; -} - -#ifdef INCLUDE_DFU_INTERFACE -static void dfu_detach_complete(struct usb_setup_data *req) -{ - (void)req; - - gpio_set_mode(GPIOA, GPIO_MODE_INPUT, 0, GPIO15); - gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_2_MHZ, - GPIO_CNF_OUTPUT_PUSHPULL, GPIO10); - gpio_set(GPIOA, GPIO10); - scb_reset_core(); -} - -static int dfu_control_request(struct usb_setup_data *req, u8 **buf, u16 *len, - void (**complete)(struct usb_setup_data *req)) -{ - (void)buf; - (void)len; - - if((req->bmRequestType != 0x21) || (req->bRequest != DFU_DETACH)) - return 0; /* Only accept class request */ - - *complete = dfu_detach_complete; - - return 1; -} -#endif - -static void hid_set_config(u16 wValue) -{ - (void)wValue; - - usbd_ep_setup(0x81, USB_ENDPOINT_ATTR_INTERRUPT, 4, NULL); - - usbd_register_control_callback( - USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE, - USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT, - hid_control_request); -#ifdef INCLUDE_DFU_INTERFACE - usbd_register_control_callback( - USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE, - USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT, - dfu_control_request); -#endif - - systick_set_clocksource(STK_CTRL_CLKSOURCE_AHB_DIV8); - systick_set_reload(100000); - systick_interrupt_enable(); - systick_counter_enable(); -} - -int main(void) -{ - int usb_connect_blink = 0; - rcc_clock_setup_in_hse_12mhz_out_72mhz(); - - - rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPAEN); - rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPCEN); - - /* USB_DETECT as input */ - gpio_set_mode(GPIOA, GPIO_MODE_INPUT, - GPIO_CNF_INPUT_FLOAT, GPIO8); - - /* green LED off, as output */ - gpio_set(GPIOC, GPIO2); - gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_2_MHZ, - GPIO_CNF_OUTPUT_PUSHPULL, GPIO2); - - - usbd_init(&stm32f107_usb_driver, &dev, &config, usb_strings); - usbd_register_set_config_callback(hid_set_config); - - /* delay some seconds to show that pull-up switch works */ - {int i; for (i=0;i<0x800000;i++) asm("nop");} - - /* wait for USB Vbus */ - while(gpio_get(GPIOA, GPIO8) == 0) asm("nop"); - - /* green LED on, connect USB */ - gpio_clear(GPIOC, GPIO2); - //OTG_FS_GCCFG &= ~OTG_FS_GCCFG_VBUSBSEN; - - while (1) - usbd_poll(); -} - -void sys_tick_handler(void) -{ - static int x = 0; - static int dir = 1; - u8 buf[4] = {0, 0, 0, 0}; - - buf[1] = dir; - x += dir; - if(x > 30) dir = -dir; - if(x < -30) dir = -dir; - - usbd_ep_write_packet(0x81, buf, 4); -} diff --git a/examples/stm32/lisa-m/usb_hid/usbhid.ld b/examples/stm32/lisa-m/usb_hid/usbhid.ld deleted file mode 100644 index 928c898..0000000 --- a/examples/stm32/lisa-m/usb_hid/usbhid.ld +++ /dev/null @@ -1,31 +0,0 @@ -/* - * This file is part of the libopencm3 project. - * - * Copyright (C) 2010 Thomas Otto - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/* Linker script for Olimex STM32-H103 (STM32F103RBT6, 128K flash, 20K RAM). */ - -/* Define memory regions. */ -MEMORY -{ - rom (rx) : ORIGIN = 0x08000000, LENGTH = 128K - ram (rwx) : ORIGIN = 0x20000000, LENGTH = 20K -} - -/* Include the common ld script. */ -INCLUDE libopencm3_stm32.ld - -- cgit v1.2.3