From 95286a22f0bb6a822b4d2a62611bcc7b2c2daa8b Mon Sep 17 00:00:00 2001 From: Gareth McMullin Date: Sun, 13 Mar 2011 14:50:53 +1300 Subject: More build improvements and fixed broken examples. --- examples/stm32/lisa-m/Makefile | 43 ------------ examples/stm32/lisa-m/usb_dfu/usbdfu.c | 64 ++++++----------- examples/stm32/mb525/Makefile | 44 ------------ examples/stm32/obldc/Makefile | 56 --------------- examples/stm32/obldc/usart_irq/usart_irq.c | 4 +- examples/stm32/other/Makefile | 92 ------------------------ examples/stm32/stm32-discovery/Makefile | 62 ----------------- examples/stm32/stm32-h103/Makefile | 108 ----------------------------- examples/stm32/stm32-h103/usb_dfu/usbdfu.c | 64 ++++++----------- examples/stm32/stm32-h103/usb_iap/Makefile | 2 +- examples/stm32/stm32-h103/usb_iap/usbiap.c | 64 ++++++----------- examples/stm32/stm32-h107/Makefile | 38 ---------- 12 files changed, 63 insertions(+), 578 deletions(-) delete mode 100644 examples/stm32/lisa-m/Makefile delete mode 100644 examples/stm32/mb525/Makefile delete mode 100644 examples/stm32/obldc/Makefile delete mode 100644 examples/stm32/other/Makefile delete mode 100644 examples/stm32/stm32-discovery/Makefile delete mode 100644 examples/stm32/stm32-h103/Makefile delete mode 100644 examples/stm32/stm32-h107/Makefile (limited to 'examples/stm32') diff --git a/examples/stm32/lisa-m/Makefile b/examples/stm32/lisa-m/Makefile deleted file mode 100644 index fa554bc..0000000 --- a/examples/stm32/lisa-m/Makefile +++ /dev/null @@ -1,43 +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 . -## - -# Be silent per default, but 'make V=1' will show all compiler calls. -ifneq ($(V),1) -Q := @ -# Do not print "Entering directory ...". -MAKEFLAGS += --no-print-directory -endif - -# TODO: Add usb_dfu later, doesn't build at the moment. -all: fancyblink usb_hid - -fancyblink: - @printf " BUILD examples/stm32/lisa-m/fancyblink\n" - $(Q)$(MAKE) -C usb_hid - -usb_hid: - @printf " BUILD examples/stm32/lisa-m/usb_hid\n" - $(Q)$(MAKE) -C usb_hid - -clean: - @printf " CLEAN examples/stm32/lisa-m/usb_hid\n" - $(Q)$(MAKE) -C usb_hid clean - -.PHONY: fancyblink usb_hid clean - diff --git a/examples/stm32/lisa-m/usb_dfu/usbdfu.c b/examples/stm32/lisa-m/usb_dfu/usbdfu.c index 2ae8374..4e83ce0 100644 --- a/examples/stm32/lisa-m/usb_dfu/usbdfu.c +++ b/examples/stm32/lisa-m/usb_dfu/usbdfu.c @@ -173,18 +173,26 @@ static void usbdfu_getstatus_complete(struct usb_setup_data *req) } } -static int usbdfu_control_command(struct usb_setup_data *req, - void (**complete)(struct usb_setup_data *req)) +static int usbdfu_control_request(struct usb_setup_data *req, u8 **buf, + u16 *len, void (**complete)(struct usb_setup_data *req)) { - (void)complete; - if(req->bmRequestType != 0x21) + if((req->bmRequestType & 0x7F) != 0x21) return 0; /* Only accept class request */ - + switch(req->bRequest) { case DFU_DNLOAD: - usbdfu_state = STATE_DFU_MANIFEST_SYNC; - return 1; + 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) @@ -194,19 +202,6 @@ static int usbdfu_control_command(struct usb_setup_data *req, /* Abort returns to dfuIDLE state */ usbdfu_state = STATE_DFU_IDLE; return 1; - } - - return 0; -} - -static int usbdfu_control_read(struct usb_setup_data *req, u8 **buf, u16 *len, - void (**complete)(struct usb_setup_data *req)) -{ - - if(req->bmRequestType != 0xA1) - return 0; /* Only accept class request */ - - switch(req->bRequest) { case DFU_UPLOAD: /* Upload not supported for now */ return 0; @@ -235,26 +230,6 @@ static int usbdfu_control_read(struct usb_setup_data *req, u8 **buf, u16 *len, return 0; } -static int usbdfu_control_write(struct usb_setup_data *req, u8 *buf, u16 len, - void (**complete)(struct usb_setup_data *req)) -{ - (void)complete; - - if(req->bmRequestType != 0x21) - return 0; /* Only accept class request */ - - if(req->bRequest != DFU_DNLOAD) - return 0; - - /* 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; -} - int main(void) { rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPAEN); @@ -280,11 +255,12 @@ int main(void) AFIO_MAPR |= AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_ON; gpio_set_mode(GPIOA, GPIO_MODE_INPUT, 0, GPIO15); - usbd_init(&dev, &config, usb_strings); + usbd_init(&stm32f103_usb_driver, &dev, &config, usb_strings); usbd_set_control_buffer_size(sizeof(usbd_control_buffer)); - usbd_register_control_command_callback(usbdfu_control_command); - usbd_register_control_write_callback(usbdfu_control_write); - usbd_register_control_read_callback(usbdfu_control_read); + 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, diff --git a/examples/stm32/mb525/Makefile b/examples/stm32/mb525/Makefile deleted file mode 100644 index 78181e0..0000000 --- a/examples/stm32/mb525/Makefile +++ /dev/null @@ -1,44 +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 . -## - -# Be silent per default, but 'make V=1' will show all compiler calls. -ifneq ($(V),1) -Q := @ -# Do not print "Entering directory ...". -MAKEFLAGS += --no-print-directory -endif - -all: fancyblink pwmleds - -fancyblink: - @printf " BUILD examples/stm32/mb525/fancyblink\n" - $(Q)$(MAKE) -C fancyblink - -pwmleds: - @printf " BUILD examples/stm32/mb525/pwmleds\n" - $(Q)$(MAKE) -C pwmleds - -clean: - @printf " CLEAN examples/stm32/mb525/fancyblink\n" - $(Q)$(MAKE) -C fancyblink clean - @printf " CLEAN examples/stm32/mb525/pwmleds\n" - $(Q)$(MAKE) -C pwmleds clean - -.PHONY: fancyblink pwmleds clean - diff --git a/examples/stm32/obldc/Makefile b/examples/stm32/obldc/Makefile deleted file mode 100644 index 626d889..0000000 --- a/examples/stm32/obldc/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -## -## This file is part of the libopencm3 project. -## -## Copyright (C) 2010 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 . -## - -# Be silent per default, but 'make V=1' will show all compiler calls. -ifneq ($(V),1) -Q := @ -# Do not print "Entering directory ...". -MAKEFLAGS += --no-print-directory -endif - -all: led systick usart can - -led: - @printf " BUILD examples/stm32/obldc/led\n" - $(Q)$(MAKE) -C led - -systick: - @printf " BUILD examples/stm32/obldc/systick\n" - $(Q)$(MAKE) -C systick - -usart: - @printf " BUILD examples/stm32/obldc/usart\n" - $(Q)$(MAKE) -C usart - -can: - @printf " BUILD examples/stm32/obldc/can\n" - $(Q)$(MAKE) -C can - -clean: - @printf " CLEAN examples/stm32/obldc/led\n" - $(Q)$(MAKE) -C led clean - @printf " CLEAN examples/stm32/obldc/systick\n" - $(Q)$(MAKE) -C systick clean - @printf " CLEAN examples/stm32/obldc/usart\n" - $(Q)$(MAKE) -C usart clean - @printf " CLEAN examples/stm32/obldc/can\n" - $(Q)$(MAKE) -C can clean - -.PHONY: led systick usart can - diff --git a/examples/stm32/obldc/usart_irq/usart_irq.c b/examples/stm32/obldc/usart_irq/usart_irq.c index 7e5f971..82320c1 100644 --- a/examples/stm32/obldc/usart_irq/usart_irq.c +++ b/examples/stm32/obldc/usart_irq/usart_irq.c @@ -80,7 +80,7 @@ void usart1_isr(void) static u8 data = 'A'; /* Check if we were called because of RXNE. */ - if (((USART_CR1(USART1) & USART_SR_RXNEIE) != 0) && + if (((USART_CR1(USART1) & USART_CR1_RXNEIE) != 0) && ((USART_SR(USART1) & USART_SR_RXNE) != 0)) { /* Indicate that we got data. */ gpio_toggle(GPIOA, GPIO6); @@ -93,7 +93,7 @@ void usart1_isr(void) } /* Check if we were called because of TXE. */ - if ((USART_CR1(USART1) & USART_SR_TXEIE) != 0) && + if (((USART_CR1(USART1) & USART_CR1_TXEIE) != 0) && ((USART_SR(USART1) & USART_SR_TXE) != 0)) { /* Indicate that we are sending out data. */ gpio_toggle(GPIOA, GPIO7); diff --git a/examples/stm32/other/Makefile b/examples/stm32/other/Makefile deleted file mode 100644 index 995bec8..0000000 --- a/examples/stm32/other/Makefile +++ /dev/null @@ -1,92 +0,0 @@ -## -## This file is part of the libopencm3 project. -## -## Copyright (C) 2010 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 . -## - -# Be silent per default, but 'make V=1' will show all compiler calls. -ifneq ($(V),1) -Q := @ -# Do not print "Entering directory ...". -MAKEFLAGS += --no-print-directory -endif - -all: i2c_stts75_sensor adc_temperature_sensor dma_mem2mem timer_interrupt systick dogm128 rtc usb_cdcacm usb_dfu usb_hid - -i2c_stts75_sensor: - @printf " BUILD examples/stm32/other/i2c_stts75_sensor\n" - $(Q)$(MAKE) -C i2c_stts75_sensor - -adc_temperature_sensor: - @printf " BUILD examples/stm32/other/adc_temperature_sensor\n" - $(Q)$(MAKE) -C adc_temperature_sensor - -dma_mem2mem: - @printf " BUILD examples/stm32/other/dma_mem2mem\n" - $(Q)$(MAKE) -C dma_mem2mem - -timer_interrupt: - @printf " BUILD examples/stm32/other/timer_interrupt\n" - $(Q)$(MAKE) -C timer_interrupt - -systick: - @printf " BUILD examples/stm32/other/systick\n" - $(Q)$(MAKE) -C systick - -dogm128: - @printf " BUILD examples/stm32/other/dogm128\n" - $(Q)$(MAKE) -C dogm128 - -rtc: - @printf " BUILD examples/stm32/other/rtc\n" - $(Q)$(MAKE) -C rtc - -usb_cdcacm: - @printf " BUILD examples/stm32/other/usb_cdcacm\n" - $(Q)$(MAKE) -C usb_cdcacm - -usb_dfu: - @printf " BUILD examples/stm32/other/usb_dfu\n" - $(Q)$(MAKE) -C usb_dfu - -usb_hid: - @printf " BUILD examples/stm32/other/usb_hid\n" - $(Q)$(MAKE) -C usb_hid - -clean: - @printf " CLEAN examples/stm32/other/i2c_stts75_sensor\n" - $(Q)$(MAKE) -C i2c_stts75_sensor clean - @printf " CLEAN examples/stm32/other/adc_temperature_sensor\n" - $(Q)$(MAKE) -C adc_temperature_sensor clean - @printf " CLEAN examples/stm32/other/dma_mem2mem\n" - $(Q)$(MAKE) -C dma_mem2mem clean - @printf " CLEAN examples/stm32/other/timer_interrupt\n" - $(Q)$(MAKE) -C timer_interrupt clean - @printf " CLEAN examples/stm32/other/systick\n" - $(Q)$(MAKE) -C systick clean - @printf " CLEAN examples/stm32/other/dogm128\n" - $(Q)$(MAKE) -C dogm128 clean - @printf " CLEAN examples/stm32/other/rtc\n" - $(Q)$(MAKE) -C rtc clean - @printf " CLEAN examples/stm32/other/usb_cdcacm\n" - $(Q)$(MAKE) -C usb_cdcacm clean - @printf " CLEAN examples/stm32/other/usb_dfu\n" - $(Q)$(MAKE) -C usb_dfu clean - @printf " CLEAN examples/stm32/other/usb_hid\n" - $(Q)$(MAKE) -C usb_hid clean - -.PHONY: i2c_stts75_sensor adc_temperature_sensor dma_mem2mem timer_interrupt systick dogm128 rtc clean usb_cdcacm usb_dfu usb_hid - diff --git a/examples/stm32/stm32-discovery/Makefile b/examples/stm32/stm32-discovery/Makefile deleted file mode 100644 index bbf96d8..0000000 --- a/examples/stm32/stm32-discovery/Makefile +++ /dev/null @@ -1,62 +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 . -## - -# Be silent per default, but 'make V=1' will show all compiler calls. -ifneq ($(V),1) -Q := @ -# Do not print "Entering directory ...". -MAKEFLAGS += --no-print-directory -endif - -all: miniblink fancyblink usart button rtc - -miniblink: - @printf " BUILD examples/stm32/stm32-discovery/miniblink\n" - $(Q)$(MAKE) -C miniblink - -fancyblink: - @printf " BUILD examples/stm32/stm32-discovery/fancyblink\n" - $(Q)$(MAKE) -C fancyblink - -usart: - @printf " BUILD examples/stm32/stm32-discovery/usart\n" - $(Q)$(MAKE) -C usart - -button: - @printf " BUILD examples/stm32/stm32-discovery/button\n" - $(Q)$(MAKE) -C button - -rtc: - @printf " BUILD examples/stm32/stm32-discovery/rtc\n" - $(Q)$(MAKE) -C rtc - -clean: - @printf " CLEAN examples/stm32/stm32-discovery/miniblink\n" - $(Q)$(MAKE) -C miniblink clean - @printf " CLEAN examples/stm32/stm32-discovery/fancyblink\n" - $(Q)$(MAKE) -C fancyblink clean - @printf " CLEAN examples/stm32/stm32-discovery/usart\n" - $(Q)$(MAKE) -C usart clean - @printf " CLEAN examples/stm32/stm32-discovery/button\n" - $(Q)$(MAKE) -C button clean - @printf " CLEAN examples/stm32/stm32-discovery/rtc\n" - $(Q)$(MAKE) -C rtc clean - -.PHONY: miniblink fancyblink usart button rtc clean - diff --git a/examples/stm32/stm32-h103/Makefile b/examples/stm32/stm32-h103/Makefile deleted file mode 100644 index 85d0c45..0000000 --- a/examples/stm32/stm32-h103/Makefile +++ /dev/null @@ -1,108 +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 . -## - -# Be silent per default, but 'make V=1' will show all compiler calls. -ifneq ($(V),1) -Q := @ -# Do not print "Entering directory ...". -MAKEFLAGS += --no-print-directory -endif - -all: miniblink fancyblink usart usart_irq usart_printf usart_irq_printf timer usb_cdcacm usb_hid button exti_both traceswo - -miniblink: - @printf " BUILD examples/stm32/stm32-h103/miniblink\n" - $(Q)$(MAKE) -C miniblink - -fancyblink: - @printf " BUILD examples/stm32/stm32-h103/fancyblink\n" - $(Q)$(MAKE) -C fancyblink - -usart: - @printf " BUILD examples/stm32/stm32-h103/usart\n" - $(Q)$(MAKE) -C usart - -usart_irq: - @printf " BUILD examples/stm32/stm32-h103/usart_irq\n" - $(Q)$(MAKE) -C usart_irq - -usart_printf: - @printf " BUILD examples/stm32/stm32-h103/usart_printf\n" - $(Q)$(MAKE) -C usart_printf - -usart_irq_printf: - @printf " BUILD examples/stm32/stm32-h103/usart_irq_printf\n" - $(Q)$(MAKE) -C usart_irq_printf - -timer: - @printf " BUILD examples/stm32/stm32-h103/timer\n" - $(Q)$(MAKE) -C timer - -spi: - @printf " BUILD examples/stm32/stm32-h103/spi\n" - $(Q)$(MAKE) -C spi - -usb_cdcacm: - @printf " BUILD examples/stm32/stm32-h103/usb_cdcacm\n" - $(Q)$(MAKE) -C usb_cdcacm - -usb_hid: - @printf " BUILD examples/stm32/stm32-h103/usb_hid\n" - $(Q)$(MAKE) -C usb_hid - -button: - @printf " BUILD examples/stm32/stm32-h103/button\n" - $(Q)$(MAKE) -C button - -exti_both: - @printf " BUILD examples/stm32/stm32-h103/exti_both\n" - $(Q)$(MAKE) -C exti_both - -traceswo: - @printf " BUILD examples/stm32/stm32-h103/traceswo\n" - $(Q)$(MAKE) -C traceswo - -clean: - @printf " CLEAN examples/stm32/stm32-h103/miniblink\n" - $(Q)$(MAKE) -C miniblink clean - @printf " CLEAN examples/stm32/stm32-h103/fancyblink\n" - $(Q)$(MAKE) -C fancyblink clean - @printf " CLEAN examples/stm32/stm32-h103/usart\n" - $(Q)$(MAKE) -C usart clean - @printf " CLEAN examples/stm32/stm32-h103/usart_irq\n" - $(Q)$(MAKE) -C usart_irq clean - @printf " CLEAN examples/stm32/stm32-h103/usart_printf\n" - $(Q)$(MAKE) -C usart_printf clean - @printf " CLEAN examples/stm32/stm32-h103/usart_irq_printf\n" - $(Q)$(MAKE) -C usart_irq_printf clean - @printf " CLEAN examples/stm32/stm32-h103/spi\n" - $(Q)$(MAKE) -C spi clean - @printf " CLEAN examples/stm32/stm32-h103/usb_cdcacm\n" - $(Q)$(MAKE) -C usb_cdcacm clean - @printf " CLEAN examples/stm32/stm32-h103/usb_hid\n" - $(Q)$(MAKE) -C usb_hid clean - @printf " CLEAN examples/stm32/stm32-h103/button\n" - $(Q)$(MAKE) -C button clean - @printf " CLEAN examples/stm32/stm32-h103/exti_both\n" - $(Q)$(MAKE) -C exti_both clean - @printf " CLEAN examples/stm32/stm32-h103/traceswo\n" - $(Q)$(MAKE) -C traceswo clean - -.PHONY: miniblink fancyblink usart usart_irq usart_printf usart_irq_printf timer spi usb_cdcacm usb_hid button exti_both traceswo clean - diff --git a/examples/stm32/stm32-h103/usb_dfu/usbdfu.c b/examples/stm32/stm32-h103/usb_dfu/usbdfu.c index 2ae8374..4e83ce0 100644 --- a/examples/stm32/stm32-h103/usb_dfu/usbdfu.c +++ b/examples/stm32/stm32-h103/usb_dfu/usbdfu.c @@ -173,18 +173,26 @@ static void usbdfu_getstatus_complete(struct usb_setup_data *req) } } -static int usbdfu_control_command(struct usb_setup_data *req, - void (**complete)(struct usb_setup_data *req)) +static int usbdfu_control_request(struct usb_setup_data *req, u8 **buf, + u16 *len, void (**complete)(struct usb_setup_data *req)) { - (void)complete; - if(req->bmRequestType != 0x21) + if((req->bmRequestType & 0x7F) != 0x21) return 0; /* Only accept class request */ - + switch(req->bRequest) { case DFU_DNLOAD: - usbdfu_state = STATE_DFU_MANIFEST_SYNC; - return 1; + 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) @@ -194,19 +202,6 @@ static int usbdfu_control_command(struct usb_setup_data *req, /* Abort returns to dfuIDLE state */ usbdfu_state = STATE_DFU_IDLE; return 1; - } - - return 0; -} - -static int usbdfu_control_read(struct usb_setup_data *req, u8 **buf, u16 *len, - void (**complete)(struct usb_setup_data *req)) -{ - - if(req->bmRequestType != 0xA1) - return 0; /* Only accept class request */ - - switch(req->bRequest) { case DFU_UPLOAD: /* Upload not supported for now */ return 0; @@ -235,26 +230,6 @@ static int usbdfu_control_read(struct usb_setup_data *req, u8 **buf, u16 *len, return 0; } -static int usbdfu_control_write(struct usb_setup_data *req, u8 *buf, u16 len, - void (**complete)(struct usb_setup_data *req)) -{ - (void)complete; - - if(req->bmRequestType != 0x21) - return 0; /* Only accept class request */ - - if(req->bRequest != DFU_DNLOAD) - return 0; - - /* 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; -} - int main(void) { rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPAEN); @@ -280,11 +255,12 @@ int main(void) AFIO_MAPR |= AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_ON; gpio_set_mode(GPIOA, GPIO_MODE_INPUT, 0, GPIO15); - usbd_init(&dev, &config, usb_strings); + usbd_init(&stm32f103_usb_driver, &dev, &config, usb_strings); usbd_set_control_buffer_size(sizeof(usbd_control_buffer)); - usbd_register_control_command_callback(usbdfu_control_command); - usbd_register_control_write_callback(usbdfu_control_write); - usbd_register_control_read_callback(usbdfu_control_read); + 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, diff --git a/examples/stm32/stm32-h103/usb_iap/Makefile b/examples/stm32/stm32-h103/usb_iap/Makefile index 0b51782..bed9908 100644 --- a/examples/stm32/stm32-h103/usb_iap/Makefile +++ b/examples/stm32/stm32-h103/usb_iap/Makefile @@ -19,5 +19,5 @@ BINARY = usbiap -include ../../Makefile.includes +include ../../Makefile.include diff --git a/examples/stm32/stm32-h103/usb_iap/usbiap.c b/examples/stm32/stm32-h103/usb_iap/usbiap.c index 2ae8374..4e83ce0 100644 --- a/examples/stm32/stm32-h103/usb_iap/usbiap.c +++ b/examples/stm32/stm32-h103/usb_iap/usbiap.c @@ -173,18 +173,26 @@ static void usbdfu_getstatus_complete(struct usb_setup_data *req) } } -static int usbdfu_control_command(struct usb_setup_data *req, - void (**complete)(struct usb_setup_data *req)) +static int usbdfu_control_request(struct usb_setup_data *req, u8 **buf, + u16 *len, void (**complete)(struct usb_setup_data *req)) { - (void)complete; - if(req->bmRequestType != 0x21) + if((req->bmRequestType & 0x7F) != 0x21) return 0; /* Only accept class request */ - + switch(req->bRequest) { case DFU_DNLOAD: - usbdfu_state = STATE_DFU_MANIFEST_SYNC; - return 1; + 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) @@ -194,19 +202,6 @@ static int usbdfu_control_command(struct usb_setup_data *req, /* Abort returns to dfuIDLE state */ usbdfu_state = STATE_DFU_IDLE; return 1; - } - - return 0; -} - -static int usbdfu_control_read(struct usb_setup_data *req, u8 **buf, u16 *len, - void (**complete)(struct usb_setup_data *req)) -{ - - if(req->bmRequestType != 0xA1) - return 0; /* Only accept class request */ - - switch(req->bRequest) { case DFU_UPLOAD: /* Upload not supported for now */ return 0; @@ -235,26 +230,6 @@ static int usbdfu_control_read(struct usb_setup_data *req, u8 **buf, u16 *len, return 0; } -static int usbdfu_control_write(struct usb_setup_data *req, u8 *buf, u16 len, - void (**complete)(struct usb_setup_data *req)) -{ - (void)complete; - - if(req->bmRequestType != 0x21) - return 0; /* Only accept class request */ - - if(req->bRequest != DFU_DNLOAD) - return 0; - - /* 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; -} - int main(void) { rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPAEN); @@ -280,11 +255,12 @@ int main(void) AFIO_MAPR |= AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_ON; gpio_set_mode(GPIOA, GPIO_MODE_INPUT, 0, GPIO15); - usbd_init(&dev, &config, usb_strings); + usbd_init(&stm32f103_usb_driver, &dev, &config, usb_strings); usbd_set_control_buffer_size(sizeof(usbd_control_buffer)); - usbd_register_control_command_callback(usbdfu_control_command); - usbd_register_control_write_callback(usbdfu_control_write); - usbd_register_control_read_callback(usbdfu_control_read); + 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, diff --git a/examples/stm32/stm32-h107/Makefile b/examples/stm32/stm32-h107/Makefile deleted file mode 100644 index a6d797d..0000000 --- a/examples/stm32/stm32-h107/Makefile +++ /dev/null @@ -1,38 +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 . -## - -# Be silent per default, but 'make V=1' will show all compiler calls. -ifneq ($(V),1) -Q := @ -# Do not print "Entering directory ...". -MAKEFLAGS += --no-print-directory -endif - -all: fancyblink - -fancyblink: - @printf " BUILD examples/stm32/stm32-h107/fancyblink\n" - $(Q)$(MAKE) -C fancyblink - -clean: - @printf " CLEAN examples/stm32/stm32-h107/fancyblink\n" - $(Q)$(MAKE) -C fancyblink clean - -.PHONY: fancyblink - -- cgit v1.2.3