cleanup
authorNIIBE Yutaka <gniibe@fsij.org>
Mon, 30 Aug 2010 02:39:10 +0000 (11:39 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Mon, 30 Aug 2010 02:39:10 +0000 (11:39 +0900)
46 files changed:
README
USBCDC/hw_config.c [deleted file]
USBCDC/hw_config.h [deleted file]
USBCDC/platform.h [deleted file]
USBCDC/platform_config.h [deleted file]
USBCDC/usb_conf.h [deleted file]
USBCDC/usb_desc.c [deleted file]
USBCDC/usb_desc.h [deleted file]
USBCDC/usb_endp.c [deleted file]
USBCDC/usb_istr.c [deleted file]
USBCDC/usb_istr.h [deleted file]
USBCDC/usb_prop.c [deleted file]
USBCDC/usb_prop.h [deleted file]
USBCDC/usb_pwr.c [deleted file]
USBCDC/usb_pwr.h [deleted file]
Virtual_COM_Port/hw_config.c [new file with mode: 0644]
Virtual_COM_Port/hw_config.h [new file with mode: 0644]
Virtual_COM_Port/platform.h [new file with mode: 0644]
Virtual_COM_Port/platform_config.h [new file with mode: 0644]
Virtual_COM_Port/usb_conf.h [new file with mode: 0644]
Virtual_COM_Port/usb_desc.c [new file with mode: 0644]
Virtual_COM_Port/usb_desc.h [new file with mode: 0644]
Virtual_COM_Port/usb_endp.c [new file with mode: 0644]
Virtual_COM_Port/usb_istr.c [new file with mode: 0644]
Virtual_COM_Port/usb_istr.h [new file with mode: 0644]
Virtual_COM_Port/usb_prop.c [new file with mode: 0644]
Virtual_COM_Port/usb_prop.h [new file with mode: 0644]
Virtual_COM_Port/usb_pwr.c [new file with mode: 0644]
Virtual_COM_Port/usb_pwr.h [new file with mode: 0644]
src/Makefile
src/chconf.h
src/gnuk.h
src/gpg-do.c [deleted file]
src/halconf.h
src/hw_config.c
src/main.c
src/openpgp-do.c [new file with mode: 0644]
src/rsa-sign.c [new file with mode: 0644]
src/rsa.mk
src/rsa_sign.c [deleted file]
src/usb_conf.h
src/usb_lld.h
src/usb_prop.c
src/usb_prop.h
src/usbcdc.mk [deleted file]
src/vcomport.mk [new file with mode: 0644]

diff --git a/README b/README
index fb52745..8c2a6f6 100644 (file)
--- a/README
+++ b/README
@@ -10,11 +10,13 @@ External source
 Taken from http://chibios.sourceforge.net/
 Note that CRLF is converted to LF in this repository.
 
-* STM32_USB-FS-Device_Driver
-Taken from http://github.com/robots/STM32.git
+* PolarSSS 0.14.0
+Taken from http://polarssl.org/
 
-* USBCDC
-Taken from http://github.com/robots/STM32.git
+* STM32F10x USB Full Speed Device Library (USB-FS-Device_Lib)
+I took Libraries/STM32_USB-FS-Device_Driver and a part of
+Project/Virtual_COM_Port in STM32_USB-FS-Device_Lib distribution.
+See http://www.st.com for detail.
 
 
 HOWTO RUN
diff --git a/USBCDC/hw_config.c b/USBCDC/hw_config.c
deleted file mode 100644 (file)
index 3f822c0..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
-* File Name          : hw_config.c
-* Author             : MCD Application Team
-* Version            : V3.0.1
-* Date               : 04/27/2009
-* Description        : Hardware Configuration & Setup
-********************************************************************************
-* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-
-/* Includes ------------------------------------------------------------------*/
-#include "usb_lib.h"
-#include "usb_prop.h"
-#include "usb_desc.h"
-#include "hw_config.h"
-#include "platform_config.h"
-#include "usb_pwr.h"
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-
-/* Extern variables ----------------------------------------------------------*/
-/* Private function prototypes -----------------------------------------------*/
-/* Private functions ---------------------------------------------------------*/
-
-/*******************************************************************************
-* Function Name  : Enter_LowPowerMode
-* Description    : Power-off system clocks and power while entering suspend mode
-* Input          : None.
-* Return         : None.
-*******************************************************************************/
-void Enter_LowPowerMode(void)
-{
-       /* Set the device state to suspend */
-       bDeviceState = SUSPENDED;
-}
-
-/*******************************************************************************
-* Function Name  : Leave_LowPowerMode
-* Description    : Restores system clocks and power while exiting suspend mode
-* Input          : None.
-* Return         : None.
-*******************************************************************************/
-void Leave_LowPowerMode(void)
-{
-       DEVICE_INFO *pInfo = &Device_Info;
-
-       /* Set the device state to the correct state */
-       if (pInfo->Current_Configuration != 0) {
-               /* Device configured */
-               bDeviceState = CONFIGURED;
-       } else {
-               bDeviceState = ATTACHED;
-       }
-}
-
-/*******************************************************************************
-* Function Name  : USB_Cable_Config
-* Description    : Software Connection/Disconnection of USB Cable
-* Input          : None.
-* Return         : Status
-*******************************************************************************/
-void USB_Cable_Config (FunctionalState NewState)
-{
-       if (NewState != DISABLE) {
-               GPIO_ResetBits(GPIOC, GPIO_Pin_11);
-       } else {
-               GPIO_SetBits(GPIOC, GPIO_Pin_11);
-       }
-}
-
-/*******************************************************************************
-* Function Name  : Get_SerialNum.
-* Description    : Create the serial number string descriptor.
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-void Get_SerialNum(void)
-{
-       uint32_t Device_Serial0, Device_Serial1, Device_Serial2;
-/*
-  Device_Serial0 = *(__IO uint32_t*)(0x1FFFF7E8);
-  Device_Serial1 = *(__IO uint32_t*)(0x1FFFF7EC);
-  Device_Serial2 = *(__IO uint32_t*)(0x1FFFF7F0);
-
-  if (Device_Serial0 != 0)
-  {
-    Virtual_Com_Port_StringSerial[2] = (uint8_t)(Device_Serial0 & 0x000000FF);
-    Virtual_Com_Port_StringSerial[4] = (uint8_t)((Device_Serial0 & 0x0000FF00) >> 8);
-    Virtual_Com_Port_StringSerial[6] = (uint8_t)((Device_Serial0 & 0x00FF0000) >> 16);
-    Virtual_Com_Port_StringSerial[8] = (uint8_t)((Device_Serial0 & 0xFF000000) >> 24);
-
-    Virtual_Com_Port_StringSerial[10] = (uint8_t)(Device_Serial1 & 0x000000FF);
-    Virtual_Com_Port_StringSerial[12] = (uint8_t)((Device_Serial1 & 0x0000FF00) >> 8);
-    Virtual_Com_Port_StringSerial[14] = (uint8_t)((Device_Serial1 & 0x00FF0000) >> 16);
-    Virtual_Com_Port_StringSerial[16] = (uint8_t)((Device_Serial1 & 0xFF000000) >> 24);
-
-    Virtual_Com_Port_StringSerial[18] = (uint8_t)(Device_Serial2 & 0x000000FF);
-    Virtual_Com_Port_StringSerial[20] = (uint8_t)((Device_Serial2 & 0x0000FF00) >> 8);
-    Virtual_Com_Port_StringSerial[22] = (uint8_t)((Device_Serial2 & 0x00FF0000) >> 16);
-    Virtual_Com_Port_StringSerial[24] = (uint8_t)((Device_Serial2 & 0xFF000000) >> 24);
-  }*/
-}
-
-/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
diff --git a/USBCDC/hw_config.h b/USBCDC/hw_config.h
deleted file mode 100644 (file)
index e646777..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
-* File Name          : hw_config.h
-* Author             : MCD Application Team
-* Version            : V3.0.1
-* Date               : 04/27/2009
-* Description        : Hardware Configuration & Setup
-********************************************************************************
-* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __HW_CONFIG_H
-#define __HW_CONFIG_H
-
-/* Includes ------------------------------------------------------------------*/
-#include "usb_type.h"
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-/* Exported define -----------------------------------------------------------*/
-#define MASS_MEMORY_START     0x04002000
-#define BULK_MAX_PACKET_SIZE  0x00000040
-#define LED_ON                0xF0
-#define LED_OFF               0xFF
-
-/* Exported functions ------------------------------------------------------- */
-void Enter_LowPowerMode(void);
-void Leave_LowPowerMode(void);
-void USB_Cable_Config (FunctionalState NewState);
-void Get_SerialNum(void);
-
-/* External variables --------------------------------------------------------*/
-
-#endif  /*__HW_CONFIG_H*/
-/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
diff --git a/USBCDC/platform.h b/USBCDC/platform.h
deleted file mode 100644 (file)
index b7cd226..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#ifndef PLATFORM_H_
-#define PLATFORM_H_
-
-#define LED_PIN            GPIO_Pin_12
-#define LED_GPIO           GPIOC
-
-#define LCD_E_PIN          GPIO_Pin_10
-#define LCD_E_GPIO         GPIOC
-
-#define LCD_RESET_PIN      GPIO_Pin_7
-#define LCD_RESET_GPIO     GPIOC
-
-#define LCD_DC_PIN         GPIO_Pin_2
-#define LCD_DC_GPIO        GPIOB
-
-#define TAMP_PIN           GPIO_Pin_13
-#define TAMP_GPIO          GPIOC
-
-#define WAKE_PIN           GPIO_Pin_0
-#define WAKE_GPIO          GPIOA
-
-#define JOY_CENTER_PIN     GPIO_Pin_6
-#define JOY_CENTER_GPIO    GPIOC
-
-#define NRF_CS_PIN         GPIO_Pin_4
-#define NRF_CS_GPIO        GPIOA
-
-#define NRF_CE_PIN         GPIO_Pin_8
-#define NRF_CE_GPIO        GPIOC
-
-#define NRF_IRQ_PIN        GPIO_Pin_9
-#define NRF_IRQ_GPIO       GPIOC
-
-#define ADIS_CS_PIN        GPIO_Pin_10
-#define ADIS_CS_GPIO       GPIOB
-
-#define ADIS_RESET_PIN     GPIO_Pin_3
-#define ADIS_RESET_GPIO    GPIOA
-
-#define LED_WRITE(x)       GPIO_WriteBit(LED_GPIO, LED_PIN, x)
-
-#define LCD_DC_WRITE(x)    GPIO_WriteBit(LCD_DC_GPIO, LCD_DC_PIN, x)
-#define LCD_E_WRITE(x)     GPIO_WriteBit(LCD_E_GPIO, LCD_E_PIN, x)
-#define LCD_RESET_WRITE(x) GPIO_WriteBit(LCD_RESET_GPIO, LCD_RESET_PIN, x)
-
-#define TAMP_READ          GPIO_ReadInputDataBit(TAMP_GPIO, TAMP_PIN)
-#define WAKE_READ          GPIO_ReadInputDataBit(WAKE_GPIO, WAKE_PIN)
-#define JOY_CENTER_READ    GPIO_ReadInputDataBit(JOY_CENTER_GPIO, JOY_CENTER_PIN)
-
-#define NRF_CE_WRITE(x)    GPIO_WriteBit(NRF_CE_GPIO, NRF_CE_PIN, x)
-#define NRF_CS_WRITE(x)    GPIO_WriteBit(NRF_CS_GPIO, NRF_CS_PIN, x)
-#define NRF_IRQ_READ       GPIO_ReadInputDataBit(MRF_IRQ_GPIO, NRF_IRQ_PIN)
-
-#define ADIS_CS_WRITE(x)   GPIO_WriteBit(ADIS_CS_GPIO, ADIS_CS_PIN, x)
-#define ADIS_RESET_WRITE(x) GPIO_WriteBit(ADIS_RESET_GPIO, ADIS_RESET_PIN, x)
-#endif
-
diff --git a/USBCDC/platform_config.h b/USBCDC/platform_config.h
deleted file mode 100644 (file)
index f1fd83f..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
-* File Name          : platform_config.h
-* Author             : MCD Application Team
-* Version            : V3.0.1
-* Date               : 04/27/2009
-* Description        : Evaluation board specific configuration file.
-********************************************************************************
-* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __PLATFORM_CONFIG_H
-#define __PLATFORM_CONFIG_H
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32f10x.h"
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Uncomment the line corresponding to the STMicroelectronics evaluation board
-   used to run the example */
-#if !defined (USE_STM3210B_EVAL) &&  !defined (USE_STM3210E_EVAL)
- //#define USE_STM3210B_EVAL
- #define USE_STM3210E_EVAL
-#endif
-
-/* Define the STM32F10x hardware depending on the used evaluation board */
-#ifdef USE_STM3210B_EVAL
-
-  #define USB_DISCONNECT            GPIOD  
-  #define USB_DISCONNECT_PIN        GPIO_Pin_9
-  #define RCC_APB2Periph_GPIO_DISCONNECT      RCC_APB2Periph_GPIOD
-
-#else /* USE_STM3210E_EVAL */
-
-  #define USB_DISCONNECT            GPIOB  
-  #define USB_DISCONNECT_PIN        GPIO_Pin_14
-  #define RCC_APB2Periph_GPIO_DISCONNECT      RCC_APB2Periph_GPIOB
-
-#endif /* USE_STM3210B_EVAL */
-
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-
-#endif /* __PLATFORM_CONFIG_H */
-
-/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
diff --git a/USBCDC/usb_conf.h b/USBCDC/usb_conf.h
deleted file mode 100644 (file)
index ecbe241..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
-* File Name          : usb_conf.h
-* Author             : MCD Application Team
-* Version            : V3.1.1
-* Date               : 04/07/2010
-* Description        : Virtual COM Port Demo configuration  header
-********************************************************************************
-* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_CONF_H
-#define __USB_CONF_H
-
-/* Includes ------------------------------------------------------------------*/
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-/* External variables --------------------------------------------------------*/
-
-/*-------------------------------------------------------------*/
-/* EP_NUM */
-/* defines how many endpoints are used by the device */
-/*-------------------------------------------------------------*/
-
-#define EP_NUM                          (4)
-
-
-#ifndef STM32F10X_CL
-/*-------------------------------------------------------------*/
-/* --------------   Buffer Description Table  -----------------*/
-/*-------------------------------------------------------------*/
-/* buffer table base address */
-/* buffer table base address */
-#define BTABLE_ADDRESS      (0x00)
-
-/* EP0  */
-/* rx/tx buffer base address */
-#define ENDP0_RXADDR        (0x40)
-#define ENDP0_TXADDR        (0x80)
-
-/* EP1  */
-/* tx buffer base address */
-#define ENDP1_TXADDR        (0xC0)
-#define ENDP2_TXADDR        (0x100)
-#define ENDP3_RXADDR        (0x110)
-
-
-/*-------------------------------------------------------------*/
-/* -------------------   ISTR events  -------------------------*/
-/*-------------------------------------------------------------*/
-/* IMR_MSK */
-/* mask defining which events has to be handled */
-/* by the device application software */
-#define IMR_MSK (CNTR_CTRM  | CNTR_SOFM  | CNTR_RESETM )
-
-/*#define CTR_CALLBACK*/
-/*#define DOVR_CALLBACK*/
-/*#define ERR_CALLBACK*/
-/*#define WKUP_CALLBACK*/
-/*#define SUSP_CALLBACK*/
-/*#define RESET_CALLBACK*/
-/*#define SOF_CALLBACK*/
-/*#define ESOF_CALLBACK*/
-#endif /* STM32F10X_CL */
-
-#ifdef STM32F10X_CL
-/*******************************************************************************
-*                              FIFO Size Configuration
-*  
-*  (i) Dedicated data FIFO SPRAM of 1.25 Kbytes = 1280 bytes = 320 32-bits words
-*      available for the endpoints IN and OUT.
-*      Device mode features:
-*      -1 bidirectional CTRL EP 0
-*      -3 IN EPs to support any kind of Bulk, Interrupt or Isochronous transfer
-*      -3 OUT EPs to support any kind of Bulk, Interrupt or Isochronous transfer
-*
-*  ii) Receive data FIFO size = RAM for setup packets + 
-*                   OUT endpoint control information +
-*                   data OUT packets + miscellaneous
-*      Space = ONE 32-bits words
-*     --> RAM for setup packets = 4 * n + 6 space
-*        (n is the nbr of CTRL EPs the device core supports) 
-*     --> OUT EP CTRL info      = 1 space
-*        (one space for status information written to the FIFO along with each 
-*        received packet)
-*     --> data OUT packets      = (Largest Packet Size / 4) + 1 spaces 
-*        (MINIMUM to receive packets)
-*     --> OR data OUT packets  = at least 2*(Largest Packet Size / 4) + 1 spaces 
-*        (if high-bandwidth EP is enabled or multiple isochronous EPs)
-*     --> miscellaneous = 1 space per OUT EP
-*        (one space for transfer complete status information also pushed to the 
-*        FIFO with each endpoint's last packet)
-*
-*  (iii)MINIMUM RAM space required for each IN EP Tx FIFO = MAX packet size for 
-*       that particular IN EP. More space allocated in the IN EP Tx FIFO results
-*       in a better performance on the USB and can hide latencies on the AHB.
-*
-*  (iv) TXn min size = 16 words. (n  : Transmit FIFO index)
-*   (v) When a TxFIFO is not used, the Configuration should be as follows: 
-*       case 1 :  n > m    and Txn is not used    (n,m  : Transmit FIFO indexes)
-*       --> Txm can use the space allocated for Txn.
-*       case2  :  n < m    and Txn is not used    (n,m  : Transmit FIFO indexes)
-*       --> Txn should be configured with the minimum space of 16 words
-*  (vi) The FIFO is used optimally when used TxFIFOs are allocated in the top 
-*       of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
-*******************************************************************************/
-
-#define RX_FIFO_SIZE                          128
-#define TX0_FIFO_SIZE                          64
-#define TX1_FIFO_SIZE                          64
-#define TX2_FIFO_SIZE                          16
-#define TX3_FIFO_SIZE                          16
-
-/* OTGD-FS-DEVICE IP interrupts Enable definitions */
-/* Uncomment the define to enable the selected interrupt */
-//#define INTR_MODEMISMATCH
-#define INTR_SOFINTR
-#define INTR_RXSTSQLVL           /* Mandatory */
-//#define INTR_NPTXFEMPTY
-//#define INTR_GINNAKEFF
-//#define INTR_GOUTNAKEFF
-//#define INTR_ERLYSUSPEND
-#define INTR_USBSUSPEND          /* Mandatory */
-#define INTR_USBRESET            /* Mandatory */
-#define INTR_ENUMDONE            /* Mandatory */
-//#define INTR_ISOOUTDROP
-//#define INTR_EOPFRAME
-//#define INTR_EPMISMATCH
-#define INTR_INEPINTR            /* Mandatory */
-#define INTR_OUTEPINTR           /* Mandatory */
-//#define INTR_INCOMPLISOIN
-//#define INTR_INCOMPLISOOUT
-#define INTR_WKUPINTR            /* Mandatory */
-
-/* OTGD-FS-DEVICE IP interrupts subroutines */
-/* Comment the define to enable the selected interrupt subroutine and replace it
-   by user code */
-#define  INTR_MODEMISMATCH_Callback      NOP_Process
-#define  INTR_SOFINTR_Callback           NOP_Process
-#define  INTR_RXSTSQLVL_Callback         NOP_Process
-#define  INTR_NPTXFEMPTY_Callback        NOP_Process
-#define  INTR_NPTXFEMPTY_Callback        NOP_Process
-#define  INTR_GINNAKEFF_Callback         NOP_Process
-#define  INTR_GOUTNAKEFF_Callback        NOP_Process
-#define  INTR_ERLYSUSPEND_Callback       NOP_Process
-#define  INTR_USBSUSPEND_Callback        NOP_Process
-#define  INTR_USBRESET_Callback          NOP_Process
-#define  INTR_ENUMDONE_Callback          NOP_Process
-#define  INTR_ISOOUTDROP_Callback        NOP_Process
-#define  INTR_EOPFRAME_Callback          NOP_Process
-#define  INTR_EPMISMATCH_Callback        NOP_Process
-#define  INTR_INEPINTR_Callback          NOP_Process
-#define  INTR_OUTEPINTR_Callback         NOP_Process
-#define  INTR_INCOMPLISOIN_Callback      NOP_Process
-#define  INTR_INCOMPLISOOUT_Callback     NOP_Process
-#define  INTR_WKUPINTR_Callback          NOP_Process
-
-/* Isochronous data update */
-#define  INTR_RXSTSQLVL_ISODU_Callback   NOP_Process  
-
-/* Isochronous transfer parameters */
-/* Size of a single Isochronous buffer (size of a single transfer) */
-#define ISOC_BUFFER_SZE                  1
-/* Number of sub-buffers (number of single buffers/transfers), should be even */
-#define NUM_SUB_BUFFERS                  2
-
-#endif /* STM32F10X_CL */
-
-
-/* CTR service routines */
-/* associated to defined endpoints */
-/*#define  EP1_IN_Callback   NOP_Process
-#define  EP2_IN_Callback   NOP_Process
-#define  EP3_IN_Callback   NOP_Process
-#define  EP4_IN_Callback   NOP_Process
-#define  EP5_IN_Callback   NOP_Process
-#define  EP6_IN_Callback   NOP_Process
-#define  EP7_IN_Callback   NOP_Process
-
-#define  EP1_OUT_Callback   NOP_Process
-#define  EP2_OUT_Callback   NOP_Process
-#define  EP3_OUT_Callback   NOP_Process
-#define  EP4_OUT_Callback   NOP_Process
-#define  EP5_OUT_Callback   NOP_Process
-#define  EP6_OUT_Callback   NOP_Process
-#define  EP7_OUT_Callback   NOP_Process*/
-
-#endif /* __USB_CONF_H */
-
-/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
diff --git a/USBCDC/usb_desc.c b/USBCDC/usb_desc.c
deleted file mode 100644 (file)
index 80f5d52..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
-* File Name          : usb_desc.c
-* Author             : MCD Application Team
-* Version            : V3.1.1
-* Date               : 04/07/2010
-* Description        : Descriptors for Virtual Com Port Demo
-********************************************************************************
-* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-
-/* Includes ------------------------------------------------------------------*/
-#include "usb_lib.h"
-#include "usb_desc.h"
-
-/* USB Standard Device Descriptor */
-const uint8_t Virtual_Com_Port_DeviceDescriptor[] =
-  {
-    0x12,   /* bLength */
-    USB_DEVICE_DESCRIPTOR_TYPE,     /* bDescriptorType */
-    0x00,
-    0x02,   /* bcdUSB = 2.00 */
-    0x02,   /* bDeviceClass: CDC */
-    0x00,   /* bDeviceSubClass */
-    0x00,   /* bDeviceProtocol */
-    0x40,   /* bMaxPacketSize0 */
-    0x83,
-    0x04,   /* idVendor = 0x0483 */
-    0x40,
-    0x57,   /* idProduct = 0x7540 */
-    0x00,
-    0x02,   /* bcdDevice = 2.00 */
-    1,              /* Index of string descriptor describing manufacturer */
-    2,              /* Index of string descriptor describing product */
-    3,              /* Index of string descriptor describing the device's serial number */
-    0x01    /* bNumConfigurations */
-  };
-
-const uint8_t Virtual_Com_Port_ConfigDescriptor[] =
-  {
-    /*Configuation Descriptor*/
-    0x09,   /* bLength: Configuation Descriptor size */
-    USB_CONFIGURATION_DESCRIPTOR_TYPE,      /* bDescriptorType: Configuration */
-    VIRTUAL_COM_PORT_SIZ_CONFIG_DESC,       /* wTotalLength:no of returned bytes */
-    0x00,
-    0x02,   /* bNumInterfaces: 2 interface */
-    0x01,   /* bConfigurationValue: Configuration value */
-    0x00,   /* iConfiguration: Index of string descriptor describing the configuration */
-    0xC0,   /* bmAttributes: self powered */
-    0x32,   /* MaxPower 0 mA */
-    /*Interface Descriptor*/
-    0x09,   /* bLength: Interface Descriptor size */
-    USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: Interface */
-    /* Interface descriptor type */
-    0x00,   /* bInterfaceNumber: Number of Interface */
-    0x00,   /* bAlternateSetting: Alternate setting */
-    0x01,   /* bNumEndpoints: One endpoints used */
-    0x02,   /* bInterfaceClass: Communication Interface Class */
-    0x02,   /* bInterfaceSubClass: Abstract Control Model */
-    0x01,   /* bInterfaceProtocol: Common AT commands */
-    0x00,   /* iInterface: */
-    /*Header Functional Descriptor*/
-    0x05,   /* bLength: Endpoint Descriptor size */
-    0x24,   /* bDescriptorType: CS_INTERFACE */
-    0x00,   /* bDescriptorSubtype: Header Func Desc */
-    0x10,   /* bcdCDC: spec release number */
-    0x01,
-    /*Call Managment Functional Descriptor*/
-    0x05,   /* bFunctionLength */
-    0x24,   /* bDescriptorType: CS_INTERFACE */
-    0x01,   /* bDescriptorSubtype: Call Management Func Desc */
-    0x00,   /* bmCapabilities: D0+D1 */
-    0x01,   /* bDataInterface: 1 */
-    /*ACM Functional Descriptor*/
-    0x04,   /* bFunctionLength */
-    0x24,   /* bDescriptorType: CS_INTERFACE */
-    0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
-    0x02,   /* bmCapabilities */
-    /*Union Functional Descriptor*/
-    0x05,   /* bFunctionLength */
-    0x24,   /* bDescriptorType: CS_INTERFACE */
-    0x06,   /* bDescriptorSubtype: Union func desc */
-    0x00,   /* bMasterInterface: Communication class interface */
-    0x01,   /* bSlaveInterface0: Data Class Interface */
-    /*Endpoint 2 Descriptor*/
-    0x07,   /* bLength: Endpoint Descriptor size */
-    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
-    0x82,   /* bEndpointAddress: (IN2) */
-    0x03,   /* bmAttributes: Interrupt */
-    VIRTUAL_COM_PORT_INT_SIZE,      /* wMaxPacketSize: */
-    0x00,
-    0xFF,   /* bInterval: */
-    /*Data class interface descriptor*/
-    0x09,   /* bLength: Endpoint Descriptor size */
-    USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: */
-    0x01,   /* bInterfaceNumber: Number of Interface */
-    0x00,   /* bAlternateSetting: Alternate setting */
-    0x02,   /* bNumEndpoints: Two endpoints used */
-    0x0A,   /* bInterfaceClass: CDC */
-    0x00,   /* bInterfaceSubClass: */
-    0x00,   /* bInterfaceProtocol: */
-    0x00,   /* iInterface: */
-    /*Endpoint 3 Descriptor*/
-    0x07,   /* bLength: Endpoint Descriptor size */
-    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
-    0x03,   /* bEndpointAddress: (OUT3) */
-    0x02,   /* bmAttributes: Bulk */
-    VIRTUAL_COM_PORT_DATA_SIZE,             /* wMaxPacketSize: */
-    0x00,
-    0x00,   /* bInterval: ignore for Bulk transfer */
-    /*Endpoint 1 Descriptor*/
-    0x07,   /* bLength: Endpoint Descriptor size */
-    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
-    0x81,   /* bEndpointAddress: (IN1) */
-    0x02,   /* bmAttributes: Bulk */
-    VIRTUAL_COM_PORT_DATA_SIZE,             /* wMaxPacketSize: */
-    0x00,
-    0x00    /* bInterval */
-  };
-
-/* USB String Descriptors */
-const uint8_t Virtual_Com_Port_StringLangID[VIRTUAL_COM_PORT_SIZ_STRING_LANGID] =
-  {
-    VIRTUAL_COM_PORT_SIZ_STRING_LANGID,
-    USB_STRING_DESCRIPTOR_TYPE,
-    0x09,
-    0x04 /* LangID = 0x0409: U.S. English */
-  };
-
-const uint8_t Virtual_Com_Port_StringVendor[VIRTUAL_COM_PORT_SIZ_STRING_VENDOR] =
-  {
-    VIRTUAL_COM_PORT_SIZ_STRING_VENDOR,     /* Size of Vendor string */
-    USB_STRING_DESCRIPTOR_TYPE,             /* bDescriptorType*/
-    /* Manufacturer: "STMicroelectronics" */
-    'S', 0, 'T', 0, 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'e', 0,
-    'l', 0, 'e', 0, 'c', 0, 't', 0, 'r', 0, 'o', 0, 'n', 0, 'i', 0,
-    'c', 0, 's', 0
-  };
-
-const uint8_t Virtual_Com_Port_StringProduct[VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT] =
-  {
-    VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT,          /* bLength */
-    USB_STRING_DESCRIPTOR_TYPE,        /* bDescriptorType */
-    /* Product name: "STM32 Virtual COM Port" */
-    'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, ' ', 0, 'V', 0, 'i', 0,
-    'r', 0, 't', 0, 'u', 0, 'a', 0, 'l', 0, ' ', 0, 'C', 0, 'O', 0,
-    'M', 0, ' ', 0, 'P', 0, 'o', 0, 'r', 0, 't', 0, ' ', 0, ' ', 0
-  };
-
-uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL] =
-  {
-    VIRTUAL_COM_PORT_SIZ_STRING_SERIAL,           /* bLength */
-    USB_STRING_DESCRIPTOR_TYPE,                   /* bDescriptorType */
-    'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, '1', 0, '0', 0
-  };
-
-/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
diff --git a/USBCDC/usb_desc.h b/USBCDC/usb_desc.h
deleted file mode 100644 (file)
index df0476a..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
-* File Name          : usb_desc.h
-* Author             : MCD Application Team
-* Version            : V3.1.1
-* Date               : 04/07/2010
-* Description        : Descriptor Header for Virtual COM Port Device
-********************************************************************************
-* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_DESC_H
-#define __USB_DESC_H
-
-/* Includes ------------------------------------------------------------------*/
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-/* Exported define -----------------------------------------------------------*/
-#define USB_DEVICE_DESCRIPTOR_TYPE              0x01
-#define USB_CONFIGURATION_DESCRIPTOR_TYPE       0x02
-#define USB_STRING_DESCRIPTOR_TYPE              0x03
-#define USB_INTERFACE_DESCRIPTOR_TYPE           0x04
-#define USB_ENDPOINT_DESCRIPTOR_TYPE            0x05
-
-#define VIRTUAL_COM_PORT_DATA_SIZE              64
-#define VIRTUAL_COM_PORT_INT_SIZE               8
-
-#define VIRTUAL_COM_PORT_SIZ_DEVICE_DESC        18
-#define VIRTUAL_COM_PORT_SIZ_CONFIG_DESC        67
-#define VIRTUAL_COM_PORT_SIZ_STRING_LANGID      4
-#define VIRTUAL_COM_PORT_SIZ_STRING_VENDOR      38
-#define VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT     50
-#define VIRTUAL_COM_PORT_SIZ_STRING_SERIAL      26
-
-#define STANDARD_ENDPOINT_DESC_SIZE             0x09
-
-/* Exported functions ------------------------------------------------------- */
-extern const uint8_t Virtual_Com_Port_DeviceDescriptor[VIRTUAL_COM_PORT_SIZ_DEVICE_DESC];
-extern const uint8_t Virtual_Com_Port_ConfigDescriptor[VIRTUAL_COM_PORT_SIZ_CONFIG_DESC];
-
-extern const uint8_t Virtual_Com_Port_StringLangID[VIRTUAL_COM_PORT_SIZ_STRING_LANGID];
-extern const uint8_t Virtual_Com_Port_StringVendor[VIRTUAL_COM_PORT_SIZ_STRING_VENDOR];
-extern const uint8_t Virtual_Com_Port_StringProduct[VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT];
-extern uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL];
-
-#endif /* __USB_DESC_H */
-/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
diff --git a/USBCDC/usb_endp.c b/USBCDC/usb_endp.c
deleted file mode 100644 (file)
index c6642b8..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
-* File Name          : usb_endp.c
-* Author             : MCD Application Team
-* Version            : V3.1.1
-* Date               : 04/07/2010
-* Description        : Endpoint routines
-********************************************************************************
-* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-
-/* Includes ------------------------------------------------------------------*/
-#include "usb_lib.h"
-#include "usb_desc.h"
-#include "usb_mem.h"
-#include "hw_config.h"
-#include "usb_istr.h"
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-uint8_t buffer_out[VIRTUAL_COM_PORT_DATA_SIZE];
-uint8_t buffer_in[VIRTUAL_COM_PORT_DATA_SIZE];
-
-__IO uint32_t count_out = 0;
-uint32_t count_in = 0;
-
-/* Private function prototypes -----------------------------------------------*/
-/* Private functions ---------------------------------------------------------*/
-
-/*******************************************************************************
-* Function Name  : EP1_IN_Callback
-* Description    :
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-void EP1_IN_Callback(void)
-{
-  count_in = 0;
-}
-
-/*******************************************************************************
-* Function Name  : EP3_IN_Callback
-* Description    :
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-void EP3_OUT_Callback(void)
-{
-  /* Get the received data buffer and update the counter */
-  count_out = USB_SIL_Read(EP3_OUT, buffer_out);
-    
-#ifndef STM32F10X_CL
-  /* Enable the receive of data on EP3 */
-  SetEPRxValid(ENDP3);
-#endif /* STM32F10X_CL */
-}
-
-/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
-
diff --git a/USBCDC/usb_istr.c b/USBCDC/usb_istr.c
deleted file mode 100644 (file)
index a2396cb..0000000
+++ /dev/null
@@ -1,419 +0,0 @@
-/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
-* File Name          : usb_istr.c
-* Author             : MCD Application Team
-* Version            : V3.1.1
-* Date               : 04/07/2010
-* Description        : ISTR events interrupt service routines
-********************************************************************************
-* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-
-/* Includes ------------------------------------------------------------------*/
-#include "usb_lib.h"
-#include "usb_prop.h"
-#include "usb_pwr.h"
-#include "usb_istr.h"
-
-/* function prototypes Automatically built defining related macros */
-void NOP_Proc(void) {
-}
-
-#define WEAK __attribute__ ((weak))
-void WEAK EP1_IN_Callback(void);
-void WEAK EP2_IN_Callback(void);
-void WEAK EP3_IN_Callback(void);
-void WEAK EP4_IN_Callback(void);
-void WEAK EP5_IN_Callback(void);
-void WEAK EP6_IN_Callback(void);
-void WEAK EP7_IN_Callback(void);
-
-void WEAK EP1_OUT_Callback(void);
-void WEAK EP2_OUT_Callback(void);
-void WEAK EP3_OUT_Callback(void);
-void WEAK EP4_OUT_Callback(void);
-void WEAK EP5_OUT_Callback(void);
-void WEAK EP6_OUT_Callback(void);
-void WEAK EP7_OUT_Callback(void);
-
-#pragma weak EP1_IN_Callback = NOP_Proc
-#pragma weak EP2_IN_Callback = NOP_Proc
-#pragma weak EP3_IN_Callback = NOP_Proc
-#pragma weak EP4_IN_Callback = NOP_Proc
-#pragma weak EP5_IN_Callback = NOP_Proc
-#pragma weak EP6_IN_Callback = NOP_Proc
-#pragma weak EP7_IN_Callback = NOP_Proc
-
-#pragma weak EP1_OUT_Callback = NOP_Proc
-#pragma weak EP2_OUT_Callback = NOP_Proc
-#pragma weak EP3_OUT_Callback = NOP_Proc
-#pragma weak EP4_OUT_Callback = NOP_Proc
-#pragma weak EP5_OUT_Callback = NOP_Proc
-#pragma weak EP6_OUT_Callback = NOP_Proc
-#pragma weak EP7_OUT_Callback = NOP_Proc
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-__IO uint16_t wIstr;  /* ISTR register last read value */
-__IO uint8_t bIntPackSOF = 0;  /* SOFs received between 2 consecutive packets */
-
-/* Extern variables ----------------------------------------------------------*/
-/* Private function prototypes -----------------------------------------------*/
-/* Private functions ---------------------------------------------------------*/
-/* function pointers to non-control endpoints service routines */
-void (*pEpInt_IN[7])(void) =
-  {
-    EP1_IN_Callback,
-    EP2_IN_Callback,
-    EP3_IN_Callback,
-    EP4_IN_Callback,
-    EP5_IN_Callback,
-    EP6_IN_Callback,
-    EP7_IN_Callback,
-  };
-
-void (*pEpInt_OUT[7])(void) =
-  {
-    EP1_OUT_Callback,
-    EP2_OUT_Callback,
-    EP3_OUT_Callback,
-    EP4_OUT_Callback,
-    EP5_OUT_Callback,
-    EP6_OUT_Callback,
-    EP7_OUT_Callback,
-  };
-
-#ifndef STM32F10X_CL
-
-/*******************************************************************************
-* Function Name  : USB_Istr
-* Description    : STR events interrupt service routine
-* Input          :
-* Output         :
-* Return         :
-*******************************************************************************/
-void USB_Istr(void)
-{
-
-  wIstr = _GetISTR();
-
-#if (IMR_MSK & ISTR_CTR)
-  if (wIstr & ISTR_CTR & wInterrupt_Mask)
-  {
-    /* servicing of the endpoint correct transfer interrupt */
-    /* clear of the CTR flag into the sub */
-    CTR_LP();
-#ifdef CTR_CALLBACK
-    CTR_Callback();
-#endif
-  }
-#endif
-  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/  
-#if (IMR_MSK & ISTR_RESET)
-  if (wIstr & ISTR_RESET & wInterrupt_Mask)
-  {
-    _SetISTR((uint16_t)CLR_RESET);
-    Device_Property.Reset();
-#ifdef RESET_CALLBACK
-    RESET_Callback();
-#endif
-  }
-#endif
-  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-#if (IMR_MSK & ISTR_DOVR)
-  if (wIstr & ISTR_DOVR & wInterrupt_Mask)
-  {
-    _SetISTR((uint16_t)CLR_DOVR);
-#ifdef DOVR_CALLBACK
-    DOVR_Callback();
-#endif
-  }
-#endif
-  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-#if (IMR_MSK & ISTR_ERR)
-  if (wIstr & ISTR_ERR & wInterrupt_Mask)
-  {
-    _SetISTR((uint16_t)CLR_ERR);
-#ifdef ERR_CALLBACK
-    ERR_Callback();
-#endif
-  }
-#endif
-  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-#if (IMR_MSK & ISTR_WKUP)
-  if (wIstr & ISTR_WKUP & wInterrupt_Mask)
-  {
-    _SetISTR((uint16_t)CLR_WKUP);
-    Resume(RESUME_EXTERNAL);
-#ifdef WKUP_CALLBACK
-    WKUP_Callback();
-#endif
-  }
-#endif
-  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-#if (IMR_MSK & ISTR_SUSP)
-  if (wIstr & ISTR_SUSP & wInterrupt_Mask)
-  {
-
-    /* check if SUSPEND is possible */
-    if (fSuspendEnabled)
-    {
-      Suspend();
-    }
-    else
-    {
-      /* if not possible then resume after xx ms */
-      Resume(RESUME_LATER);
-    }
-    /* clear of the ISTR bit must be done after setting of CNTR_FSUSP */
-    _SetISTR((uint16_t)CLR_SUSP);
-#ifdef SUSP_CALLBACK
-    SUSP_Callback();
-#endif
-  }
-#endif
-  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-#if (IMR_MSK & ISTR_SOF)
-  if (wIstr & ISTR_SOF & wInterrupt_Mask)
-  {
-    _SetISTR((uint16_t)CLR_SOF);
-    bIntPackSOF++;
-
-#ifdef SOF_CALLBACK
-    SOF_Callback();
-#endif
-  }
-#endif
-  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-#if (IMR_MSK & ISTR_ESOF)
-  if (wIstr & ISTR_ESOF & wInterrupt_Mask)
-  {
-    _SetISTR((uint16_t)CLR_ESOF);
-    /* resume handling timing is made with ESOFs */
-    Resume(RESUME_ESOF); /* request without change of the machine state */
-
-#ifdef ESOF_CALLBACK
-    ESOF_Callback();
-#endif
-  }
-#endif
-} /* USB_Istr */
-
-/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-#else /* STM32F10X_CL */
-
-
-/*******************************************************************************
-* Function Name  : STM32_PCD_OTG_ISR_Handler
-* Description    : Handles all USB Device Interrupts
-* Input          : None
-* Output         : None
-* Return         : status
-*******************************************************************************/
-u32 STM32_PCD_OTG_ISR_Handler (void)
-{
-  USB_OTG_int_sts_data gintr_status;
-  u32 retval = 0;
-
-  if (IsDeviceMode()) /* ensure that we are in device mode */
-  {
-    gintr_status.d32 = OTGD_FS_ReadCoreItr();
-
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-    
-    /* If there is no interrupt pending exit the interrupt routine */
-    if (!gintr_status.d32)
-    {
-      return 0;
-    }
-
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
-    /* Early Suspend interrupt */ 
-#ifdef INTR_ERLYSUSPEND
-    if (gintr_status.b.erlysuspend)
-    {
-      retval |= OTGD_FS_Handle_EarlySuspend_ISR();
-    }
-#endif /* INTR_ERLYSUSPEND */
-    
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-    /* End of Periodic Frame interrupt */
-#ifdef INTR_EOPFRAME    
-    if (gintr_status.b.eopframe)
-    {
-      retval |= OTGD_FS_Handle_EOPF_ISR();
-    }
-#endif /* INTR_EOPFRAME */
-    
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-    /* Non Periodic Tx FIFO Emty interrupt */
-#ifdef INTR_NPTXFEMPTY    
-    if (gintr_status.b.nptxfempty)
-    {
-      retval |= OTGD_FS_Handle_NPTxFE_ISR();
-    }
-#endif /* INTR_NPTXFEMPTY */
-    
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
-    /* Wakeup or RemoteWakeup interrupt */
-#ifdef INTR_WKUPINTR    
-    if (gintr_status.b.wkupintr)
-    {   
-      retval |= OTGD_FS_Handle_Wakeup_ISR();
-    }
-#endif /* INTR_WKUPINTR */   
-    
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-    /* Suspend interrupt */
-#ifdef INTR_USBSUSPEND
-    if (gintr_status.b.usbsuspend)
-    { 
-      /* check if SUSPEND is possible */
-      if (fSuspendEnabled)
-      {
-        Suspend();
-      }
-      else
-      {
-        /* if not possible then resume after xx ms */
-        Resume(RESUME_LATER); /* This case shouldn't happen in OTG Device mode because 
-        there's no ESOF interrupt to increment the ResumeS.bESOFcnt in the Resume state machine */
-      }
-            
-      retval |= OTGD_FS_Handle_USBSuspend_ISR();
-    }
-#endif /* INTR_USBSUSPEND */
-
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-    /* Start of Frame interrupt */
-#ifdef INTR_SOFINTR    
-    if (gintr_status.b.sofintr)
-    {
-      /* Update the frame number variable */
-      bIntPackSOF++;
-      
-      retval |= OTGD_FS_Handle_Sof_ISR();
-    }
-#endif /* INTR_SOFINTR */
-    
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-    /* Receive FIFO Queue Status Level interrupt */
-#ifdef INTR_RXSTSQLVL
-    if (gintr_status.b.rxstsqlvl)
-    {
-      retval |= OTGD_FS_Handle_RxStatusQueueLevel_ISR();
-    }
-#endif /* INTR_RXSTSQLVL */
-    
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-    /* Enumeration Done interrupt */
-#ifdef INTR_ENUMDONE
-    if (gintr_status.b.enumdone)
-    {
-      retval |= OTGD_FS_Handle_EnumDone_ISR();
-    }
-#endif /* INTR_ENUMDONE */
-    
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-    /* Reset interrutp */
-#ifdef INTR_USBRESET
-    if (gintr_status.b.usbreset)
-    {
-      retval |= OTGD_FS_Handle_UsbReset_ISR();
-    }    
-#endif /* INTR_USBRESET */
-    
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
-    /* IN Endpoint interrupt */
-#ifdef INTR_INEPINTR
-    if (gintr_status.b.inepint)
-    {
-      retval |= OTGD_FS_Handle_InEP_ISR();
-    }
-#endif /* INTR_INEPINTR */
-    
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
-    /* OUT Endpoint interrupt */
-#ifdef INTR_OUTEPINTR
-    if (gintr_status.b.outepintr)
-    {
-      retval |= OTGD_FS_Handle_OutEP_ISR();
-    }
-#endif /* INTR_OUTEPINTR */    
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
-    /* Mode Mismatch interrupt */
-#ifdef INTR_MODEMISMATCH
-    if (gintr_status.b.modemismatch)
-    {
-      retval |= OTGD_FS_Handle_ModeMismatch_ISR();
-    }
-#endif /* INTR_MODEMISMATCH */  
-
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
-    /* Global IN Endpoints NAK Effective interrupt */
-#ifdef INTR_GINNAKEFF
-    if (gintr_status.b.ginnakeff)
-    {
-      retval |= OTGD_FS_Handle_GInNakEff_ISR();
-    }
-#endif /* INTR_GINNAKEFF */  
-
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
-    /* Global OUT Endpoints NAK effective interrupt */
-#ifdef INTR_GOUTNAKEFF
-    if (gintr_status.b.goutnakeff)
-    {
-      retval |= OTGD_FS_Handle_GOutNakEff_ISR();
-    }
-#endif /* INTR_GOUTNAKEFF */  
-
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
-    /* Isochrounous Out packet Dropped interrupt */
-#ifdef INTR_ISOOUTDROP
-    if (gintr_status.b.isooutdrop)
-    {
-      retval |= OTGD_FS_Handle_IsoOutDrop_ISR();
-    }
-#endif /* INTR_ISOOUTDROP */  
-
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
-    /* Endpoint Mismatch error interrupt */
-#ifdef INTR_EPMISMATCH
-    if (gintr_status.b.epmismatch)
-    {
-      retval |= OTGD_FS_Handle_EPMismatch_ISR();
-    }
-#endif /* INTR_EPMISMATCH */  
-
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
-    /* Incomplete Isochrous IN tranfer error interrupt */
-#ifdef INTR_INCOMPLISOIN
-    if (gintr_status.b.incomplisoin)
-    {
-      retval |= OTGD_FS_Handle_IncomplIsoIn_ISR();
-    }
-#endif /* INTR_INCOMPLISOIN */  
-
-   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
-    /* Incomplete Isochrous OUT tranfer error interrupt */
-#ifdef INTR_INCOMPLISOOUT
-    if (gintr_status.b.outepintr)
-    {
-      retval |= OTGD_FS_Handle_IncomplIsoOut_ISR();
-    }
-#endif /* INTR_INCOMPLISOOUT */  
-  
-  }
-  return retval;
-}
-
-#endif /* STM32F10X_CL */
-
-/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
diff --git a/USBCDC/usb_istr.h b/USBCDC/usb_istr.h
deleted file mode 100644 (file)
index 77698f6..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
-* File Name          : usb_istr.h
-* Author             : MCD Application Team
-* Version            : V3.1.1
-* Date               : 04/07/2010
-* Description        : This file includes the peripherals header files in the
-*                      user application.
-********************************************************************************
-* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_ISTR_H
-#define __USB_ISTR_H
-
-/* Includes ------------------------------------------------------------------*/
-#include "usb_conf.h"
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-
-#ifndef STM32F10X_CL
- void USB_Istr(void);
-#else /* STM32F10X_CL */
- u32 STM32_PCD_OTG_ISR_Handler(void);
-#endif /* STM32F10X_CL */
-
-
-#ifndef STM32F10X_CL
-
-#ifdef CTR_CALLBACK
-void CTR_Callback(void);
-#endif
-
-#ifdef DOVR_CALLBACK
-void DOVR_Callback(void);
-#endif
-
-#ifdef ERR_CALLBACK
-void ERR_Callback(void);
-#endif
-
-#ifdef WKUP_CALLBACK
-void WKUP_Callback(void);
-#endif
-
-#ifdef SUSP_CALLBACK
-void SUSP_Callback(void);
-#endif
-
-#ifdef RESET_CALLBACK
-void RESET_Callback(void);
-#endif
-
-#ifdef SOF_CALLBACK
-void SOF_Callback(void);
-#endif
-
-#ifdef ESOF_CALLBACK
-void ESOF_Callback(void);
-#endif
-
-#else /* STM32F10X_CL */
-
-/* Interrupt subroutines user callbacks prototypes.
-   These callbacks are called into the respective interrupt sunroutine functinos
-   and can be tailored for various user application purposes.
-     Note: Make sure that the correspondant interrupt is enabled through the 
-     definition in usb_conf.h file */ 
-void INTR_MODEMISMATCH_Callback(void);
-void INTR_SOFINTR_Callback(void);
-void INTR_RXSTSQLVL_Callback(void);
-void INTR_NPTXFEMPTY_Callback(void);
-void INTR_GINNAKEFF_Callback(void);
-void INTR_GOUTNAKEFF_Callback(void);
-void INTR_ERLYSUSPEND_Callback(void);
-void INTR_USBSUSPEND_Callback(void);
-void INTR_USBRESET_Callback(void);
-void INTR_ENUMDONE_Callback(void);
-void INTR_ISOOUTDROP_Callback(void);
-void INTR_EOPFRAME_Callback(void);
-void INTR_EPMISMATCH_Callback(void);
-void INTR_INEPINTR_Callback(void);
-void INTR_OUTEPINTR_Callback(void);
-void INTR_INCOMPLISOIN_Callback(void);
-void INTR_INCOMPLISOOUT_Callback(void);
-void INTR_WKUPINTR_Callback(void);
-
-/* Isochronous data update */
-void INTR_RXSTSQLVL_ISODU_Callback(void); 
-
-#endif /* STM32F10X_CL */
-
-
-#endif /*__USB_ISTR_H*/
-
-/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
diff --git a/USBCDC/usb_prop.c b/USBCDC/usb_prop.c
deleted file mode 100644 (file)
index 0f6d85b..0000000
+++ /dev/null
@@ -1,419 +0,0 @@
-/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
-* File Name          : usb_prop.c
-* Author             : MCD Application Team
-* Version            : V3.1.1
-* Date               : 04/07/2010
-* Description        : All processing related to Virtual Com Port Demo
-********************************************************************************
-* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-
-/* Includes ------------------------------------------------------------------*/
-#include "usb_lib.h"
-#include "usb_conf.h"
-#include "usb_prop.h"
-#include "usb_desc.h"
-#include "usb_pwr.h"
-#include "hw_config.h"
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-uint8_t Request = 0;
-
-LINE_CODING linecoding =
-  {
-    115200, /* baud rate*/
-    0x00,   /* stop bits-1*/
-    0x00,   /* parity - none*/
-    0x08    /* no. of bits 8*/
-  };
-
-/* -------------------------------------------------------------------------- */
-/*  Structures initializations */
-/* -------------------------------------------------------------------------- */
-
-DEVICE Device_Table =
-  {
-    EP_NUM,
-    1
-  };
-
-DEVICE_PROP Device_Property =
-  {
-    Virtual_Com_Port_init,
-    Virtual_Com_Port_Reset,
-    Virtual_Com_Port_Status_In,
-    Virtual_Com_Port_Status_Out,
-    Virtual_Com_Port_Data_Setup,
-    Virtual_Com_Port_NoData_Setup,
-    Virtual_Com_Port_Get_Interface_Setting,
-    Virtual_Com_Port_GetDeviceDescriptor,
-    Virtual_Com_Port_GetConfigDescriptor,
-    Virtual_Com_Port_GetStringDescriptor,
-    0,
-    0x40 /*MAX PACKET SIZE*/
-  };
-
-USER_STANDARD_REQUESTS User_Standard_Requests =
-  {
-    Virtual_Com_Port_GetConfiguration,
-    Virtual_Com_Port_SetConfiguration,
-    Virtual_Com_Port_GetInterface,
-    Virtual_Com_Port_SetInterface,
-    Virtual_Com_Port_GetStatus,
-    Virtual_Com_Port_ClearFeature,
-    Virtual_Com_Port_SetEndPointFeature,
-    Virtual_Com_Port_SetDeviceFeature,
-    Virtual_Com_Port_SetDeviceAddress
-  };
-
-ONE_DESCRIPTOR Device_Descriptor =
-  {
-    (uint8_t*)Virtual_Com_Port_DeviceDescriptor,
-    VIRTUAL_COM_PORT_SIZ_DEVICE_DESC
-  };
-
-ONE_DESCRIPTOR Config_Descriptor =
-  {
-    (uint8_t*)Virtual_Com_Port_ConfigDescriptor,
-    VIRTUAL_COM_PORT_SIZ_CONFIG_DESC
-  };
-
-ONE_DESCRIPTOR String_Descriptor[4] =
-  {
-    {(uint8_t*)Virtual_Com_Port_StringLangID, VIRTUAL_COM_PORT_SIZ_STRING_LANGID},
-    {(uint8_t*)Virtual_Com_Port_StringVendor, VIRTUAL_COM_PORT_SIZ_STRING_VENDOR},
-    {(uint8_t*)Virtual_Com_Port_StringProduct, VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT},
-    {(uint8_t*)Virtual_Com_Port_StringSerial, VIRTUAL_COM_PORT_SIZ_STRING_SERIAL}
-  };
-
-/* Extern variables ----------------------------------------------------------*/
-/* Private function prototypes -----------------------------------------------*/
-/* Extern function prototypes ------------------------------------------------*/
-/* Private functions ---------------------------------------------------------*/
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_init.
-* Description    : Virtual COM Port Mouse init routine.
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-void Virtual_Com_Port_init(void)
-{
-
-  /* Update the serial number string descriptor with the data from the unique
-  ID*/
-  Get_SerialNum();
-
-  pInformation->Current_Configuration = 0;
-
-  /* Connect the device */
-  PowerOn();
-
-  /* Perform basic device initialization operations */
-  USB_SIL_Init();
-
-  /* configure the USART to the default settings */
-  //USART_Config_Default();
-
-  bDeviceState = UNCONNECTED;
-}
-
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_Reset
-* Description    : Virtual_Com_Port Mouse reset routine
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-void Virtual_Com_Port_Reset(void)
-{
-  /* Set Virtual_Com_Port DEVICE as not configured */
-  pInformation->Current_Configuration = 0;
-
-  /* Current Feature initialization */
-  pInformation->Current_Feature = Virtual_Com_Port_ConfigDescriptor[7];
-
-  /* Set Virtual_Com_Port DEVICE with the default Interface*/
-  pInformation->Current_Interface = 0;
-
-#ifdef STM32F10X_CL     
-  /* EP0 is already configured by USB_SIL_Init() function */
-  
-  /* Init EP1 IN as Bulk endpoint */
-  OTG_DEV_EP_Init(EP1_IN, OTG_DEV_EP_TYPE_BULK, VIRTUAL_COM_PORT_DATA_SIZE);
-  
-  /* Init EP2 IN as Interrupt endpoint */
-  OTG_DEV_EP_Init(EP2_IN, OTG_DEV_EP_TYPE_INT, VIRTUAL_COM_PORT_INT_SIZE);
-
-  /* Init EP3 OUT as Bulk endpoint */
-  OTG_DEV_EP_Init(EP3_OUT, OTG_DEV_EP_TYPE_BULK, VIRTUAL_COM_PORT_DATA_SIZE);  
-#else 
-
-  SetBTABLE(BTABLE_ADDRESS);
-
-  /* Initialize Endpoint 0 */
-  SetEPType(ENDP0, EP_CONTROL);
-  SetEPTxStatus(ENDP0, EP_TX_STALL);
-  SetEPRxAddr(ENDP0, ENDP0_RXADDR);
-  SetEPTxAddr(ENDP0, ENDP0_TXADDR);
-  Clear_Status_Out(ENDP0);
-  SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
-  SetEPRxValid(ENDP0);
-
-  /* Initialize Endpoint 1 */
-  SetEPType(ENDP1, EP_BULK);
-  SetEPTxAddr(ENDP1, ENDP1_TXADDR);
-  SetEPTxStatus(ENDP1, EP_TX_NAK);
-  SetEPRxStatus(ENDP1, EP_RX_DIS);
-
-  /* Initialize Endpoint 2 */
-  SetEPType(ENDP2, EP_INTERRUPT);
-  SetEPTxAddr(ENDP2, ENDP2_TXADDR);
-  SetEPRxStatus(ENDP2, EP_RX_DIS);
-  SetEPTxStatus(ENDP2, EP_TX_NAK);
-
-  /* Initialize Endpoint 3 */
-  SetEPType(ENDP3, EP_BULK);
-  SetEPRxAddr(ENDP3, ENDP3_RXADDR);
-  SetEPRxCount(ENDP3, VIRTUAL_COM_PORT_DATA_SIZE);
-  SetEPRxStatus(ENDP3, EP_RX_VALID);
-  SetEPTxStatus(ENDP3, EP_TX_DIS);
-
-  /* Set this device to response on default address */
-  SetDeviceAddress(0);
-#endif /* STM32F10X_CL */
-
-  bDeviceState = ATTACHED;
-}
-
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_SetConfiguration.
-* Description    : Udpade the device state to configured.
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-void Virtual_Com_Port_SetConfiguration(void)
-{
-  DEVICE_INFO *pInfo = &Device_Info;
-
-  if (pInfo->Current_Configuration != 0)
-  {
-    /* Device configured */
-    bDeviceState = CONFIGURED;
-  }
-}
-
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_SetConfiguration.
-* Description    : Udpade the device state to addressed.
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-void Virtual_Com_Port_SetDeviceAddress (void)
-{
-  bDeviceState = ADDRESSED;
-}
-
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_Status_In.
-* Description    : Virtual COM Port Status In Routine.
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-void Virtual_Com_Port_Status_In(void)
-{
-  if (Request == SET_LINE_CODING)
-  {
-    //USART_Config();
-    Request = 0;
-  }
-}
-
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_Status_Out
-* Description    : Virtual COM Port Status OUT Routine.
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-void Virtual_Com_Port_Status_Out(void)
-{}
-
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_Data_Setup
-* Description    : handle the data class specific requests
-* Input          : Request Nb.
-* Output         : None.
-* Return         : USB_UNSUPPORT or USB_SUCCESS.
-*******************************************************************************/
-RESULT Virtual_Com_Port_Data_Setup(uint8_t RequestNo)
-{
-  uint8_t    *(*CopyRoutine)(uint16_t);
-
-  CopyRoutine = NULL;
-
-  if (RequestNo == GET_LINE_CODING)
-  {
-    if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
-    {
-      CopyRoutine = Virtual_Com_Port_GetLineCoding;
-    }
-  }
-  else if (RequestNo == SET_LINE_CODING)
-  {
-    if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
-    {
-      CopyRoutine = Virtual_Com_Port_SetLineCoding;
-    }
-    Request = SET_LINE_CODING;
-  }
-
-  if (CopyRoutine == NULL)
-  {
-    return USB_UNSUPPORT;
-  }
-
-  pInformation->Ctrl_Info.CopyData = CopyRoutine;
-  pInformation->Ctrl_Info.Usb_wOffset = 0;
-  (*CopyRoutine)(0);
-  return USB_SUCCESS;
-}
-
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_NoData_Setup.
-* Description    : handle the no data class specific requests.
-* Input          : Request Nb.
-* Output         : None.
-* Return         : USB_UNSUPPORT or USB_SUCCESS.
-*******************************************************************************/
-RESULT Virtual_Com_Port_NoData_Setup(uint8_t RequestNo)
-{
-
-  if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
-  {
-    if (RequestNo == SET_COMM_FEATURE)
-    {
-      return USB_SUCCESS;
-    }
-    else if (RequestNo == SET_CONTROL_LINE_STATE)
-    {
-      return USB_SUCCESS;
-    }
-  }
-
-  return USB_UNSUPPORT;
-}
-
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_GetDeviceDescriptor.
-* Description    : Gets the device descriptor.
-* Input          : Length.
-* Output         : None.
-* Return         : The address of the device descriptor.
-*******************************************************************************/
-uint8_t *Virtual_Com_Port_GetDeviceDescriptor(uint16_t Length)
-{
-  return Standard_GetDescriptorData(Length, &Device_Descriptor);
-}
-
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_GetConfigDescriptor.
-* Description    : get the configuration descriptor.
-* Input          : Length.
-* Output         : None.
-* Return         : The address of the configuration descriptor.
-*******************************************************************************/
-uint8_t *Virtual_Com_Port_GetConfigDescriptor(uint16_t Length)
-{
-  return Standard_GetDescriptorData(Length, &Config_Descriptor);
-}
-
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_GetStringDescriptor
-* Description    : Gets the string descriptors according to the needed index
-* Input          : Length.
-* Output         : None.
-* Return         : The address of the string descriptors.
-*******************************************************************************/
-uint8_t *Virtual_Com_Port_GetStringDescriptor(uint16_t Length)
-{
-  uint8_t wValue0 = pInformation->USBwValue0;
-  if (wValue0 > 4)
-  {
-    return NULL;
-  }
-  else
-  {
-    return Standard_GetDescriptorData(Length, &String_Descriptor[wValue0]);
-  }
-}
-
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_Get_Interface_Setting.
-* Description    : test the interface and the alternate setting according to the
-*                  supported one.
-* Input1         : uint8_t: Interface : interface number.
-* Input2         : uint8_t: AlternateSetting : Alternate Setting number.
-* Output         : None.
-* Return         : The address of the string descriptors.
-*******************************************************************************/
-RESULT Virtual_Com_Port_Get_Interface_Setting(uint8_t Interface, uint8_t AlternateSetting)
-{
-  if (AlternateSetting > 0)
-  {
-    return USB_UNSUPPORT;
-  }
-  else if (Interface > 1)
-  {
-    return USB_UNSUPPORT;
-  }
-  return USB_SUCCESS;
-}
-
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_GetLineCoding.
-* Description    : send the linecoding structure to the PC host.
-* Input          : Length.
-* Output         : None.
-* Return         : Inecoding structure base address.
-*******************************************************************************/
-uint8_t *Virtual_Com_Port_GetLineCoding(uint16_t Length)
-{
-  if (Length == 0)
-  {
-    pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
-    return NULL;
-  }
-  return(uint8_t *)&linecoding;
-}
-
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_SetLineCoding.
-* Description    : Set the linecoding structure fields.
-* Input          : Length.
-* Output         : None.
-* Return         : Linecoding structure base address.
-*******************************************************************************/
-uint8_t *Virtual_Com_Port_SetLineCoding(uint16_t Length)
-{
-  if (Length == 0)
-  {
-    pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
-    return NULL;
-  }
-  return(uint8_t *)&linecoding;
-}
-
-/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
-
diff --git a/USBCDC/usb_prop.h b/USBCDC/usb_prop.h
deleted file mode 100644 (file)
index 3adf76b..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
-* File Name          : usb_prop.h
-* Author             : MCD Application Team
-* Version            : V3.1.1
-* Date               : 04/07/2010
-* Description        : All processing related to Virtual COM Port Demo (Endpoint 0)
-********************************************************************************
-* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __usb_prop_H
-#define __usb_prop_H
-
-/* Includes ------------------------------------------------------------------*/
-/* Exported types ------------------------------------------------------------*/
-typedef struct
-{
-  uint32_t bitrate;
-  uint8_t format;
-  uint8_t paritytype;
-  uint8_t datatype;
-}LINE_CODING;
-
-/* Exported constants --------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-/* Exported define -----------------------------------------------------------*/
-
-#define Virtual_Com_Port_GetConfiguration          NOP_Process
-//#define Virtual_Com_Port_SetConfiguration          NOP_Process
-#define Virtual_Com_Port_GetInterface              NOP_Process
-#define Virtual_Com_Port_SetInterface              NOP_Process
-#define Virtual_Com_Port_GetStatus                 NOP_Process
-#define Virtual_Com_Port_ClearFeature              NOP_Process
-#define Virtual_Com_Port_SetEndPointFeature        NOP_Process
-#define Virtual_Com_Port_SetDeviceFeature          NOP_Process
-//#define Virtual_Com_Port_SetDeviceAddress          NOP_Process
-
-#define SEND_ENCAPSULATED_COMMAND   0x00
-#define GET_ENCAPSULATED_RESPONSE   0x01
-#define SET_COMM_FEATURE            0x02
-#define GET_COMM_FEATURE            0x03
-#define CLEAR_COMM_FEATURE          0x04
-#define SET_LINE_CODING             0x20
-#define GET_LINE_CODING             0x21
-#define SET_CONTROL_LINE_STATE      0x22
-#define SEND_BREAK                  0x23
-
-/* Exported functions ------------------------------------------------------- */
-void Virtual_Com_Port_init(void);
-void Virtual_Com_Port_Reset(void);
-void Virtual_Com_Port_SetConfiguration(void);
-void Virtual_Com_Port_SetDeviceAddress (void);
-void Virtual_Com_Port_Status_In (void);
-void Virtual_Com_Port_Status_Out (void);
-RESULT Virtual_Com_Port_Data_Setup(uint8_t);
-RESULT Virtual_Com_Port_NoData_Setup(uint8_t);
-RESULT Virtual_Com_Port_Get_Interface_Setting(uint8_t Interface, uint8_t AlternateSetting);
-uint8_t *Virtual_Com_Port_GetDeviceDescriptor(uint16_t );
-uint8_t *Virtual_Com_Port_GetConfigDescriptor(uint16_t);
-uint8_t *Virtual_Com_Port_GetStringDescriptor(uint16_t);
-
-uint8_t *Virtual_Com_Port_GetLineCoding(uint16_t Length);
-uint8_t *Virtual_Com_Port_SetLineCoding(uint16_t Length);
-
-#endif /* __usb_prop_H */
-
-/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
-
diff --git a/USBCDC/usb_pwr.c b/USBCDC/usb_pwr.c
deleted file mode 100644 (file)
index 1346779..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
-* File Name          : usb_pwr.c
-* Author             : MCD Application Team
-* Version            : V3.1.1
-* Date               : 04/07/2010
-* Description        : Connection/disconnection & power management
-********************************************************************************
-* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32f10x.h"
-#include "usb_lib.h"
-#include "usb_conf.h"
-#include "usb_pwr.h"
-#include "hw_config.h"
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-__IO uint32_t bDeviceState = UNCONNECTED; /* USB device status */
-__IO bool fSuspendEnabled = TRUE;  /* true when suspend is possible */
-
-struct
-{
-  __IO RESUME_STATE eState;
-  __IO uint8_t bESOFcnt;
-}ResumeS;
-
-/* Extern variables ----------------------------------------------------------*/
-/* Private function prototypes -----------------------------------------------*/
-/* Extern function prototypes ------------------------------------------------*/
-/* Private functions ---------------------------------------------------------*/
-
-/*******************************************************************************
-* Function Name  : PowerOn
-* Description    :
-* Input          : None.
-* Output         : None.
-* Return         : USB_SUCCESS.
-*******************************************************************************/
-RESULT PowerOn(void)
-{
-#ifndef STM32F10X_CL
-  uint16_t wRegVal;
-
-  /*** cable plugged-in ? ***/
-  USB_Cable_Config(ENABLE);
-
-  /*** CNTR_PWDN = 0 ***/
-  wRegVal = CNTR_FRES;
-  _SetCNTR(wRegVal);
-
-  /*** CNTR_FRES = 0 ***/
-  wInterrupt_Mask = 0;
-  _SetCNTR(wInterrupt_Mask);
-  /*** Clear pending interrupts ***/
-  _SetISTR(0);
-  /*** Set interrupt mask ***/
-  wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM;
-  _SetCNTR(wInterrupt_Mask);
-#endif /* STM32F10X_CL */
-
-  return USB_SUCCESS;
-}
-
-/*******************************************************************************
-* Function Name  : PowerOff
-* Description    : handles switch-off conditions
-* Input          : None.
-* Output         : None.
-* Return         : USB_SUCCESS.
-*******************************************************************************/
-RESULT PowerOff()
-{
-#ifndef STM32F10X_CL
-  /* disable all ints and force USB reset */
-  _SetCNTR(CNTR_FRES);
-  /* clear interrupt status register */
-  _SetISTR(0);
-  /* Disable the Pull-Up*/
-  USB_Cable_Config(DISABLE);
-  /* switch-off device */
-  _SetCNTR(CNTR_FRES + CNTR_PDWN);
-#endif /* STM32F10X_CL */
-
-  /* sw variables reset */
-  /* ... */
-
-  return USB_SUCCESS;
-}
-
-/*******************************************************************************
-* Function Name  : Suspend
-* Description    : sets suspend mode operating conditions
-* Input          : None.
-* Output         : None.
-* Return         : USB_SUCCESS.
-*******************************************************************************/
-void Suspend(void)
-{
-#ifndef STM32F10X_CL
-  uint16_t wCNTR;
-  /* suspend preparation */
-  /* ... */
-
-  /* macrocell enters suspend mode */
-  wCNTR = _GetCNTR();
-  wCNTR |= CNTR_FSUSP;
-  _SetCNTR(wCNTR);
-#endif /* STM32F10X_CL */
-
-  /* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
-  /* power reduction */
-  /* ... on connected devices */
-
-#ifndef STM32F10X_CL
-  /* force low-power mode in the macrocell */
-  wCNTR = _GetCNTR();
-  wCNTR |= CNTR_LPMODE;
-  _SetCNTR(wCNTR);
-#endif /* STM32F10X_CL */
-
-  /* switch-off the clocks */
-  /* ... */
-  Enter_LowPowerMode();
-
-}
-
-/*******************************************************************************
-* Function Name  : Resume_Init
-* Description    : Handles wake-up restoring normal operations
-* Input          : None.
-* Output         : None.
-* Return         : USB_SUCCESS.
-*******************************************************************************/
-void Resume_Init(void)
-{
-#ifndef STM32F10X_CL
-  uint16_t wCNTR;
-#endif /* STM32F10X_CL */ 
-
-  /* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
-  /* restart the clocks */
-  /* ...  */
-
-#ifndef STM32F10X_CL
-  /* CNTR_LPMODE = 0 */
-  wCNTR = _GetCNTR();
-  wCNTR &= (~CNTR_LPMODE);
-  _SetCNTR(wCNTR);
-#endif /* STM32F10X_CL */ 
-
-  /* restore full power */
-  /* ... on connected devices */
-  Leave_LowPowerMode();
-
-#ifndef STM32F10X_CL
-  /* reset FSUSP bit */
-  _SetCNTR(IMR_MSK);
-#endif /* STM32F10X_CL */
-
-  /* reverse suspend preparation */
-  /* ... */
-
-}
-
-/*******************************************************************************
-* Function Name  : Resume
-* Description    : This is the state machine handling resume operations and
-*                 timing sequence. The control is based on the Resume structure
-*                 variables and on the ESOF interrupt calling this subroutine
-*                 without changing machine state.
-* Input          : a state machine value (RESUME_STATE)
-*                  RESUME_ESOF doesn't change ResumeS.eState allowing
-*                  decrementing of the ESOF counter in different states.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-void Resume(RESUME_STATE eResumeSetVal)
-{
-#ifndef STM32F10X_CL
-  uint16_t wCNTR;
-#endif /* STM32F10X_CL */
-
-  if (eResumeSetVal != RESUME_ESOF)
-    ResumeS.eState = eResumeSetVal;
-
-  switch (ResumeS.eState)
-  {
-    case RESUME_EXTERNAL:
-      Resume_Init();
-      ResumeS.eState = RESUME_OFF;
-      break;
-    case RESUME_INTERNAL:
-      Resume_Init();
-      ResumeS.eState = RESUME_START;
-      break;
-    case RESUME_LATER:
-      ResumeS.bESOFcnt = 2;
-      ResumeS.eState = RESUME_WAIT;
-      break;
-    case RESUME_WAIT:
-      ResumeS.bESOFcnt--;
-      if (ResumeS.bESOFcnt == 0)
-        ResumeS.eState = RESUME_START;
-      break;
-    case RESUME_START:
-     #ifdef STM32F10X_CL
-      OTGD_FS_Dev_SetRemoteWakeup();
-     #else 
-      wCNTR = _GetCNTR();
-      wCNTR |= CNTR_RESUME;
-      _SetCNTR(wCNTR);
-     #endif /* STM32F10X_CL */
-      ResumeS.eState = RESUME_ON;
-      ResumeS.bESOFcnt = 10;
-      break;
-    case RESUME_ON:
-    #ifndef STM32F10X_CL      
-      ResumeS.bESOFcnt--;
-      if (ResumeS.bESOFcnt == 0)
-      {
-     #endif /* STM32F10X_CL */    
-       #ifdef STM32F10X_CL
-        OTGD_FS_Dev_ResetRemoteWakeup();
-       #else
-        wCNTR = _GetCNTR();
-        wCNTR &= (~CNTR_RESUME);
-        _SetCNTR(wCNTR);
-       #endif /* STM32F10X_CL */
-        ResumeS.eState = RESUME_OFF;
-     #ifndef STM32F10X_CL
-      }
-     #endif /* STM32F10X_CL */
-      break;
-    case RESUME_OFF:
-    case RESUME_ESOF:
-    default:
-      ResumeS.eState = RESUME_OFF;
-      break;
-  }
-}
-
-/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
diff --git a/USBCDC/usb_pwr.h b/USBCDC/usb_pwr.h
deleted file mode 100644 (file)
index 21a9927..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
-* File Name          : usb_pwr.h
-* Author             : MCD Application Team
-* Version            : V3.1.1
-* Date               : 04/07/2010
-* Description        : Connection/disconnection & power management header
-********************************************************************************
-* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
-* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
-* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
-* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
-* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
-* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
-*******************************************************************************/
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_PWR_H
-#define __USB_PWR_H
-
-/* Includes ------------------------------------------------------------------*/
-/* Exported types ------------------------------------------------------------*/
-typedef enum _RESUME_STATE
-{
-  RESUME_EXTERNAL,
-  RESUME_INTERNAL,
-  RESUME_LATER,
-  RESUME_WAIT,
-  RESUME_START,
-  RESUME_ON,
-  RESUME_OFF,
-  RESUME_ESOF
-} RESUME_STATE;
-
-typedef enum _DEVICE_STATE
-{
-  UNCONNECTED,
-  ATTACHED,
-  POWERED,
-  SUSPENDED,
-  ADDRESSED,
-  CONFIGURED
-} DEVICE_STATE;
-
-/* Exported constants --------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-void Suspend(void);
-void Resume_Init(void);
-void Resume(RESUME_STATE eResumeSetVal);
-RESULT PowerOn(void);
-RESULT PowerOff(void);
-
-/* External variables --------------------------------------------------------*/
-extern  __IO uint32_t bDeviceState; /* USB device status */
-extern __IO bool fSuspendEnabled;  /* true when suspend is possible */
-
-#endif  /*__USB_PWR_H*/
-
-/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
diff --git a/Virtual_COM_Port/hw_config.c b/Virtual_COM_Port/hw_config.c
new file mode 100644 (file)
index 0000000..3f822c0
--- /dev/null
@@ -0,0 +1,113 @@
+/******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
+* File Name          : hw_config.c
+* Author             : MCD Application Team
+* Version            : V3.0.1
+* Date               : 04/27/2009
+* Description        : Hardware Configuration & Setup
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_lib.h"
+#include "usb_prop.h"
+#include "usb_desc.h"
+#include "hw_config.h"
+#include "platform_config.h"
+#include "usb_pwr.h"
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+
+/* Extern variables ----------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+/* Private functions ---------------------------------------------------------*/
+
+/*******************************************************************************
+* Function Name  : Enter_LowPowerMode
+* Description    : Power-off system clocks and power while entering suspend mode
+* Input          : None.
+* Return         : None.
+*******************************************************************************/
+void Enter_LowPowerMode(void)
+{
+       /* Set the device state to suspend */
+       bDeviceState = SUSPENDED;
+}
+
+/*******************************************************************************
+* Function Name  : Leave_LowPowerMode
+* Description    : Restores system clocks and power while exiting suspend mode
+* Input          : None.
+* Return         : None.
+*******************************************************************************/
+void Leave_LowPowerMode(void)
+{
+       DEVICE_INFO *pInfo = &Device_Info;
+
+       /* Set the device state to the correct state */
+       if (pInfo->Current_Configuration != 0) {
+               /* Device configured */
+               bDeviceState = CONFIGURED;
+       } else {
+               bDeviceState = ATTACHED;
+       }
+}
+
+/*******************************************************************************
+* Function Name  : USB_Cable_Config
+* Description    : Software Connection/Disconnection of USB Cable
+* Input          : None.
+* Return         : Status
+*******************************************************************************/
+void USB_Cable_Config (FunctionalState NewState)
+{
+       if (NewState != DISABLE) {
+               GPIO_ResetBits(GPIOC, GPIO_Pin_11);
+       } else {
+               GPIO_SetBits(GPIOC, GPIO_Pin_11);
+       }
+}
+
+/*******************************************************************************
+* Function Name  : Get_SerialNum.
+* Description    : Create the serial number string descriptor.
+* Input          : None.
+* Output         : None.
+* Return         : None.
+*******************************************************************************/
+void Get_SerialNum(void)
+{
+       uint32_t Device_Serial0, Device_Serial1, Device_Serial2;
+/*
+  Device_Serial0 = *(__IO uint32_t*)(0x1FFFF7E8);
+  Device_Serial1 = *(__IO uint32_t*)(0x1FFFF7EC);
+  Device_Serial2 = *(__IO uint32_t*)(0x1FFFF7F0);
+
+  if (Device_Serial0 != 0)
+  {
+    Virtual_Com_Port_StringSerial[2] = (uint8_t)(Device_Serial0 & 0x000000FF);
+    Virtual_Com_Port_StringSerial[4] = (uint8_t)((Device_Serial0 & 0x0000FF00) >> 8);
+    Virtual_Com_Port_StringSerial[6] = (uint8_t)((Device_Serial0 & 0x00FF0000) >> 16);
+    Virtual_Com_Port_StringSerial[8] = (uint8_t)((Device_Serial0 & 0xFF000000) >> 24);
+
+    Virtual_Com_Port_StringSerial[10] = (uint8_t)(Device_Serial1 & 0x000000FF);
+    Virtual_Com_Port_StringSerial[12] = (uint8_t)((Device_Serial1 & 0x0000FF00) >> 8);
+    Virtual_Com_Port_StringSerial[14] = (uint8_t)((Device_Serial1 & 0x00FF0000) >> 16);
+    Virtual_Com_Port_StringSerial[16] = (uint8_t)((Device_Serial1 & 0xFF000000) >> 24);
+
+    Virtual_Com_Port_StringSerial[18] = (uint8_t)(Device_Serial2 & 0x000000FF);
+    Virtual_Com_Port_StringSerial[20] = (uint8_t)((Device_Serial2 & 0x0000FF00) >> 8);
+    Virtual_Com_Port_StringSerial[22] = (uint8_t)((Device_Serial2 & 0x00FF0000) >> 16);
+    Virtual_Com_Port_StringSerial[24] = (uint8_t)((Device_Serial2 & 0xFF000000) >> 24);
+  }*/
+}
+
+/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
diff --git a/Virtual_COM_Port/hw_config.h b/Virtual_COM_Port/hw_config.h
new file mode 100644 (file)
index 0000000..e646777
--- /dev/null
@@ -0,0 +1,41 @@
+/******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
+* File Name          : hw_config.h
+* Author             : MCD Application Team
+* Version            : V3.0.1
+* Date               : 04/27/2009
+* Description        : Hardware Configuration & Setup
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __HW_CONFIG_H
+#define __HW_CONFIG_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_type.h"
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+/* Exported macro ------------------------------------------------------------*/
+/* Exported define -----------------------------------------------------------*/
+#define MASS_MEMORY_START     0x04002000
+#define BULK_MAX_PACKET_SIZE  0x00000040
+#define LED_ON                0xF0
+#define LED_OFF               0xFF
+
+/* Exported functions ------------------------------------------------------- */
+void Enter_LowPowerMode(void);
+void Leave_LowPowerMode(void);
+void USB_Cable_Config (FunctionalState NewState);
+void Get_SerialNum(void);
+
+/* External variables --------------------------------------------------------*/
+
+#endif  /*__HW_CONFIG_H*/
+/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
diff --git a/Virtual_COM_Port/platform.h b/Virtual_COM_Port/platform.h
new file mode 100644 (file)
index 0000000..b7cd226
--- /dev/null
@@ -0,0 +1,57 @@
+#ifndef PLATFORM_H_
+#define PLATFORM_H_
+
+#define LED_PIN            GPIO_Pin_12
+#define LED_GPIO           GPIOC
+
+#define LCD_E_PIN          GPIO_Pin_10
+#define LCD_E_GPIO         GPIOC
+
+#define LCD_RESET_PIN      GPIO_Pin_7
+#define LCD_RESET_GPIO     GPIOC
+
+#define LCD_DC_PIN         GPIO_Pin_2
+#define LCD_DC_GPIO        GPIOB
+
+#define TAMP_PIN           GPIO_Pin_13
+#define TAMP_GPIO          GPIOC
+
+#define WAKE_PIN           GPIO_Pin_0
+#define WAKE_GPIO          GPIOA
+
+#define JOY_CENTER_PIN     GPIO_Pin_6
+#define JOY_CENTER_GPIO    GPIOC
+
+#define NRF_CS_PIN         GPIO_Pin_4
+#define NRF_CS_GPIO        GPIOA
+
+#define NRF_CE_PIN         GPIO_Pin_8
+#define NRF_CE_GPIO        GPIOC
+
+#define NRF_IRQ_PIN        GPIO_Pin_9
+#define NRF_IRQ_GPIO       GPIOC
+
+#define ADIS_CS_PIN        GPIO_Pin_10
+#define ADIS_CS_GPIO       GPIOB
+
+#define ADIS_RESET_PIN     GPIO_Pin_3
+#define ADIS_RESET_GPIO    GPIOA
+
+#define LED_WRITE(x)       GPIO_WriteBit(LED_GPIO, LED_PIN, x)
+
+#define LCD_DC_WRITE(x)    GPIO_WriteBit(LCD_DC_GPIO, LCD_DC_PIN, x)
+#define LCD_E_WRITE(x)     GPIO_WriteBit(LCD_E_GPIO, LCD_E_PIN, x)
+#define LCD_RESET_WRITE(x) GPIO_WriteBit(LCD_RESET_GPIO, LCD_RESET_PIN, x)
+
+#define TAMP_READ          GPIO_ReadInputDataBit(TAMP_GPIO, TAMP_PIN)
+#define WAKE_READ          GPIO_ReadInputDataBit(WAKE_GPIO, WAKE_PIN)
+#define JOY_CENTER_READ    GPIO_ReadInputDataBit(JOY_CENTER_GPIO, JOY_CENTER_PIN)
+
+#define NRF_CE_WRITE(x)    GPIO_WriteBit(NRF_CE_GPIO, NRF_CE_PIN, x)
+#define NRF_CS_WRITE(x)    GPIO_WriteBit(NRF_CS_GPIO, NRF_CS_PIN, x)
+#define NRF_IRQ_READ       GPIO_ReadInputDataBit(MRF_IRQ_GPIO, NRF_IRQ_PIN)
+
+#define ADIS_CS_WRITE(x)   GPIO_WriteBit(ADIS_CS_GPIO, ADIS_CS_PIN, x)
+#define ADIS_RESET_WRITE(x) GPIO_WriteBit(ADIS_RESET_GPIO, ADIS_RESET_PIN, x)
+#endif
+
diff --git a/Virtual_COM_Port/platform_config.h b/Virtual_COM_Port/platform_config.h
new file mode 100644 (file)
index 0000000..f1fd83f
--- /dev/null
@@ -0,0 +1,52 @@
+/******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
+* File Name          : platform_config.h
+* Author             : MCD Application Team
+* Version            : V3.0.1
+* Date               : 04/27/2009
+* Description        : Evaluation board specific configuration file.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __PLATFORM_CONFIG_H
+#define __PLATFORM_CONFIG_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f10x.h"
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+/* Uncomment the line corresponding to the STMicroelectronics evaluation board
+   used to run the example */
+#if !defined (USE_STM3210B_EVAL) &&  !defined (USE_STM3210E_EVAL)
+ //#define USE_STM3210B_EVAL
+ #define USE_STM3210E_EVAL
+#endif
+
+/* Define the STM32F10x hardware depending on the used evaluation board */
+#ifdef USE_STM3210B_EVAL
+
+  #define USB_DISCONNECT            GPIOD  
+  #define USB_DISCONNECT_PIN        GPIO_Pin_9
+  #define RCC_APB2Periph_GPIO_DISCONNECT      RCC_APB2Periph_GPIOD
+
+#else /* USE_STM3210E_EVAL */
+
+  #define USB_DISCONNECT            GPIOB  
+  #define USB_DISCONNECT_PIN        GPIO_Pin_14
+  #define RCC_APB2Periph_GPIO_DISCONNECT      RCC_APB2Periph_GPIOB
+
+#endif /* USE_STM3210B_EVAL */
+
+/* Exported macro ------------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */
+
+#endif /* __PLATFORM_CONFIG_H */
+
+/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
diff --git a/Virtual_COM_Port/usb_conf.h b/Virtual_COM_Port/usb_conf.h
new file mode 100644 (file)
index 0000000..ecbe241
--- /dev/null
@@ -0,0 +1,197 @@
+/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
+* File Name          : usb_conf.h
+* Author             : MCD Application Team
+* Version            : V3.1.1
+* Date               : 04/07/2010
+* Description        : Virtual COM Port Demo configuration  header
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USB_CONF_H
+#define __USB_CONF_H
+
+/* Includes ------------------------------------------------------------------*/
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+/* Exported macro ------------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */
+/* External variables --------------------------------------------------------*/
+
+/*-------------------------------------------------------------*/
+/* EP_NUM */
+/* defines how many endpoints are used by the device */
+/*-------------------------------------------------------------*/
+
+#define EP_NUM                          (4)
+
+
+#ifndef STM32F10X_CL
+/*-------------------------------------------------------------*/
+/* --------------   Buffer Description Table  -----------------*/
+/*-------------------------------------------------------------*/
+/* buffer table base address */
+/* buffer table base address */
+#define BTABLE_ADDRESS      (0x00)
+
+/* EP0  */
+/* rx/tx buffer base address */
+#define ENDP0_RXADDR        (0x40)
+#define ENDP0_TXADDR        (0x80)
+
+/* EP1  */
+/* tx buffer base address */
+#define ENDP1_TXADDR        (0xC0)
+#define ENDP2_TXADDR        (0x100)
+#define ENDP3_RXADDR        (0x110)
+
+
+/*-------------------------------------------------------------*/
+/* -------------------   ISTR events  -------------------------*/
+/*-------------------------------------------------------------*/
+/* IMR_MSK */
+/* mask defining which events has to be handled */
+/* by the device application software */
+#define IMR_MSK (CNTR_CTRM  | CNTR_SOFM  | CNTR_RESETM )
+
+/*#define CTR_CALLBACK*/
+/*#define DOVR_CALLBACK*/
+/*#define ERR_CALLBACK*/
+/*#define WKUP_CALLBACK*/
+/*#define SUSP_CALLBACK*/
+/*#define RESET_CALLBACK*/
+/*#define SOF_CALLBACK*/
+/*#define ESOF_CALLBACK*/
+#endif /* STM32F10X_CL */
+
+#ifdef STM32F10X_CL
+/*******************************************************************************
+*                              FIFO Size Configuration
+*  
+*  (i) Dedicated data FIFO SPRAM of 1.25 Kbytes = 1280 bytes = 320 32-bits words
+*      available for the endpoints IN and OUT.
+*      Device mode features:
+*      -1 bidirectional CTRL EP 0
+*      -3 IN EPs to support any kind of Bulk, Interrupt or Isochronous transfer
+*      -3 OUT EPs to support any kind of Bulk, Interrupt or Isochronous transfer
+*
+*  ii) Receive data FIFO size = RAM for setup packets + 
+*                   OUT endpoint control information +
+*                   data OUT packets + miscellaneous
+*      Space = ONE 32-bits words
+*     --> RAM for setup packets = 4 * n + 6 space
+*        (n is the nbr of CTRL EPs the device core supports) 
+*     --> OUT EP CTRL info      = 1 space
+*        (one space for status information written to the FIFO along with each 
+*        received packet)
+*     --> data OUT packets      = (Largest Packet Size / 4) + 1 spaces 
+*        (MINIMUM to receive packets)
+*     --> OR data OUT packets  = at least 2*(Largest Packet Size / 4) + 1 spaces 
+*        (if high-bandwidth EP is enabled or multiple isochronous EPs)
+*     --> miscellaneous = 1 space per OUT EP
+*        (one space for transfer complete status information also pushed to the 
+*        FIFO with each endpoint's last packet)
+*
+*  (iii)MINIMUM RAM space required for each IN EP Tx FIFO = MAX packet size for 
+*       that particular IN EP. More space allocated in the IN EP Tx FIFO results
+*       in a better performance on the USB and can hide latencies on the AHB.
+*
+*  (iv) TXn min size = 16 words. (n  : Transmit FIFO index)
+*   (v) When a TxFIFO is not used, the Configuration should be as follows: 
+*       case 1 :  n > m    and Txn is not used    (n,m  : Transmit FIFO indexes)
+*       --> Txm can use the space allocated for Txn.
+*       case2  :  n < m    and Txn is not used    (n,m  : Transmit FIFO indexes)
+*       --> Txn should be configured with the minimum space of 16 words
+*  (vi) The FIFO is used optimally when used TxFIFOs are allocated in the top 
+*       of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
+*******************************************************************************/
+
+#define RX_FIFO_SIZE                          128
+#define TX0_FIFO_SIZE                          64
+#define TX1_FIFO_SIZE                          64
+#define TX2_FIFO_SIZE                          16
+#define TX3_FIFO_SIZE                          16
+
+/* OTGD-FS-DEVICE IP interrupts Enable definitions */
+/* Uncomment the define to enable the selected interrupt */
+//#define INTR_MODEMISMATCH
+#define INTR_SOFINTR
+#define INTR_RXSTSQLVL           /* Mandatory */
+//#define INTR_NPTXFEMPTY
+//#define INTR_GINNAKEFF
+//#define INTR_GOUTNAKEFF
+//#define INTR_ERLYSUSPEND
+#define INTR_USBSUSPEND          /* Mandatory */
+#define INTR_USBRESET            /* Mandatory */
+#define INTR_ENUMDONE            /* Mandatory */
+//#define INTR_ISOOUTDROP
+//#define INTR_EOPFRAME
+//#define INTR_EPMISMATCH
+#define INTR_INEPINTR            /* Mandatory */
+#define INTR_OUTEPINTR           /* Mandatory */
+//#define INTR_INCOMPLISOIN
+//#define INTR_INCOMPLISOOUT
+#define INTR_WKUPINTR            /* Mandatory */
+
+/* OTGD-FS-DEVICE IP interrupts subroutines */
+/* Comment the define to enable the selected interrupt subroutine and replace it
+   by user code */
+#define  INTR_MODEMISMATCH_Callback      NOP_Process
+#define  INTR_SOFINTR_Callback           NOP_Process
+#define  INTR_RXSTSQLVL_Callback         NOP_Process
+#define  INTR_NPTXFEMPTY_Callback        NOP_Process
+#define  INTR_NPTXFEMPTY_Callback        NOP_Process
+#define  INTR_GINNAKEFF_Callback         NOP_Process
+#define  INTR_GOUTNAKEFF_Callback        NOP_Process
+#define  INTR_ERLYSUSPEND_Callback       NOP_Process
+#define  INTR_USBSUSPEND_Callback        NOP_Process
+#define  INTR_USBRESET_Callback          NOP_Process
+#define  INTR_ENUMDONE_Callback          NOP_Process
+#define  INTR_ISOOUTDROP_Callback        NOP_Process
+#define  INTR_EOPFRAME_Callback          NOP_Process
+#define  INTR_EPMISMATCH_Callback        NOP_Process
+#define  INTR_INEPINTR_Callback          NOP_Process
+#define  INTR_OUTEPINTR_Callback         NOP_Process
+#define  INTR_INCOMPLISOIN_Callback      NOP_Process
+#define  INTR_INCOMPLISOOUT_Callback     NOP_Process
+#define  INTR_WKUPINTR_Callback          NOP_Process
+
+/* Isochronous data update */
+#define  INTR_RXSTSQLVL_ISODU_Callback   NOP_Process  
+
+/* Isochronous transfer parameters */
+/* Size of a single Isochronous buffer (size of a single transfer) */
+#define ISOC_BUFFER_SZE                  1
+/* Number of sub-buffers (number of single buffers/transfers), should be even */
+#define NUM_SUB_BUFFERS                  2
+
+#endif /* STM32F10X_CL */
+
+
+/* CTR service routines */
+/* associated to defined endpoints */
+/*#define  EP1_IN_Callback   NOP_Process
+#define  EP2_IN_Callback   NOP_Process
+#define  EP3_IN_Callback   NOP_Process
+#define  EP4_IN_Callback   NOP_Process
+#define  EP5_IN_Callback   NOP_Process
+#define  EP6_IN_Callback   NOP_Process
+#define  EP7_IN_Callback   NOP_Process
+
+#define  EP1_OUT_Callback   NOP_Process
+#define  EP2_OUT_Callback   NOP_Process
+#define  EP3_OUT_Callback   NOP_Process
+#define  EP4_OUT_Callback   NOP_Process
+#define  EP5_OUT_Callback   NOP_Process
+#define  EP6_OUT_Callback   NOP_Process
+#define  EP7_OUT_Callback   NOP_Process*/
+
+#endif /* __USB_CONF_H */
+
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
diff --git a/Virtual_COM_Port/usb_desc.c b/Virtual_COM_Port/usb_desc.c
new file mode 100644 (file)
index 0000000..80f5d52
--- /dev/null
@@ -0,0 +1,161 @@
+/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
+* File Name          : usb_desc.c
+* Author             : MCD Application Team
+* Version            : V3.1.1
+* Date               : 04/07/2010
+* Description        : Descriptors for Virtual Com Port Demo
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_lib.h"
+#include "usb_desc.h"
+
+/* USB Standard Device Descriptor */
+const uint8_t Virtual_Com_Port_DeviceDescriptor[] =
+  {
+    0x12,   /* bLength */
+    USB_DEVICE_DESCRIPTOR_TYPE,     /* bDescriptorType */
+    0x00,
+    0x02,   /* bcdUSB = 2.00 */
+    0x02,   /* bDeviceClass: CDC */
+    0x00,   /* bDeviceSubClass */
+    0x00,   /* bDeviceProtocol */
+    0x40,   /* bMaxPacketSize0 */
+    0x83,
+    0x04,   /* idVendor = 0x0483 */
+    0x40,
+    0x57,   /* idProduct = 0x7540 */
+    0x00,
+    0x02,   /* bcdDevice = 2.00 */
+    1,              /* Index of string descriptor describing manufacturer */
+    2,              /* Index of string descriptor describing product */
+    3,              /* Index of string descriptor describing the device's serial number */
+    0x01    /* bNumConfigurations */
+  };
+
+const uint8_t Virtual_Com_Port_ConfigDescriptor[] =
+  {
+    /*Configuation Descriptor*/
+    0x09,   /* bLength: Configuation Descriptor size */
+    USB_CONFIGURATION_DESCRIPTOR_TYPE,      /* bDescriptorType: Configuration */
+    VIRTUAL_COM_PORT_SIZ_CONFIG_DESC,       /* wTotalLength:no of returned bytes */
+    0x00,
+    0x02,   /* bNumInterfaces: 2 interface */
+    0x01,   /* bConfigurationValue: Configuration value */
+    0x00,   /* iConfiguration: Index of string descriptor describing the configuration */
+    0xC0,   /* bmAttributes: self powered */
+    0x32,   /* MaxPower 0 mA */
+    /*Interface Descriptor*/
+    0x09,   /* bLength: Interface Descriptor size */
+    USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: Interface */
+    /* Interface descriptor type */
+    0x00,   /* bInterfaceNumber: Number of Interface */
+    0x00,   /* bAlternateSetting: Alternate setting */
+    0x01,   /* bNumEndpoints: One endpoints used */
+    0x02,   /* bInterfaceClass: Communication Interface Class */
+    0x02,   /* bInterfaceSubClass: Abstract Control Model */
+    0x01,   /* bInterfaceProtocol: Common AT commands */
+    0x00,   /* iInterface: */
+    /*Header Functional Descriptor*/
+    0x05,   /* bLength: Endpoint Descriptor size */
+    0x24,   /* bDescriptorType: CS_INTERFACE */
+    0x00,   /* bDescriptorSubtype: Header Func Desc */
+    0x10,   /* bcdCDC: spec release number */
+    0x01,
+    /*Call Managment Functional Descriptor*/
+    0x05,   /* bFunctionLength */
+    0x24,   /* bDescriptorType: CS_INTERFACE */
+    0x01,   /* bDescriptorSubtype: Call Management Func Desc */
+    0x00,   /* bmCapabilities: D0+D1 */
+    0x01,   /* bDataInterface: 1 */
+    /*ACM Functional Descriptor*/
+    0x04,   /* bFunctionLength */
+    0x24,   /* bDescriptorType: CS_INTERFACE */
+    0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
+    0x02,   /* bmCapabilities */
+    /*Union Functional Descriptor*/
+    0x05,   /* bFunctionLength */
+    0x24,   /* bDescriptorType: CS_INTERFACE */
+    0x06,   /* bDescriptorSubtype: Union func desc */
+    0x00,   /* bMasterInterface: Communication class interface */
+    0x01,   /* bSlaveInterface0: Data Class Interface */
+    /*Endpoint 2 Descriptor*/
+    0x07,   /* bLength: Endpoint Descriptor size */
+    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
+    0x82,   /* bEndpointAddress: (IN2) */
+    0x03,   /* bmAttributes: Interrupt */
+    VIRTUAL_COM_PORT_INT_SIZE,      /* wMaxPacketSize: */
+    0x00,
+    0xFF,   /* bInterval: */
+    /*Data class interface descriptor*/
+    0x09,   /* bLength: Endpoint Descriptor size */
+    USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: */
+    0x01,   /* bInterfaceNumber: Number of Interface */
+    0x00,   /* bAlternateSetting: Alternate setting */
+    0x02,   /* bNumEndpoints: Two endpoints used */
+    0x0A,   /* bInterfaceClass: CDC */
+    0x00,   /* bInterfaceSubClass: */
+    0x00,   /* bInterfaceProtocol: */
+    0x00,   /* iInterface: */
+    /*Endpoint 3 Descriptor*/
+    0x07,   /* bLength: Endpoint Descriptor size */
+    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
+    0x03,   /* bEndpointAddress: (OUT3) */
+    0x02,   /* bmAttributes: Bulk */
+    VIRTUAL_COM_PORT_DATA_SIZE,             /* wMaxPacketSize: */
+    0x00,
+    0x00,   /* bInterval: ignore for Bulk transfer */
+    /*Endpoint 1 Descriptor*/
+    0x07,   /* bLength: Endpoint Descriptor size */
+    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
+    0x81,   /* bEndpointAddress: (IN1) */
+    0x02,   /* bmAttributes: Bulk */
+    VIRTUAL_COM_PORT_DATA_SIZE,             /* wMaxPacketSize: */
+    0x00,
+    0x00    /* bInterval */
+  };
+
+/* USB String Descriptors */
+const uint8_t Virtual_Com_Port_StringLangID[VIRTUAL_COM_PORT_SIZ_STRING_LANGID] =
+  {
+    VIRTUAL_COM_PORT_SIZ_STRING_LANGID,
+    USB_STRING_DESCRIPTOR_TYPE,
+    0x09,
+    0x04 /* LangID = 0x0409: U.S. English */
+  };
+
+const uint8_t Virtual_Com_Port_StringVendor[VIRTUAL_COM_PORT_SIZ_STRING_VENDOR] =
+  {
+    VIRTUAL_COM_PORT_SIZ_STRING_VENDOR,     /* Size of Vendor string */
+    USB_STRING_DESCRIPTOR_TYPE,             /* bDescriptorType*/
+    /* Manufacturer: "STMicroelectronics" */
+    'S', 0, 'T', 0, 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'e', 0,
+    'l', 0, 'e', 0, 'c', 0, 't', 0, 'r', 0, 'o', 0, 'n', 0, 'i', 0,
+    'c', 0, 's', 0
+  };
+
+const uint8_t Virtual_Com_Port_StringProduct[VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT] =
+  {
+    VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT,          /* bLength */
+    USB_STRING_DESCRIPTOR_TYPE,        /* bDescriptorType */
+    /* Product name: "STM32 Virtual COM Port" */
+    'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, ' ', 0, 'V', 0, 'i', 0,
+    'r', 0, 't', 0, 'u', 0, 'a', 0, 'l', 0, ' ', 0, 'C', 0, 'O', 0,
+    'M', 0, ' ', 0, 'P', 0, 'o', 0, 'r', 0, 't', 0, ' ', 0, ' ', 0
+  };
+
+uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL] =
+  {
+    VIRTUAL_COM_PORT_SIZ_STRING_SERIAL,           /* bLength */
+    USB_STRING_DESCRIPTOR_TYPE,                   /* bDescriptorType */
+    'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, '1', 0, '0', 0
+  };
+
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
diff --git a/Virtual_COM_Port/usb_desc.h b/Virtual_COM_Port/usb_desc.h
new file mode 100644 (file)
index 0000000..df0476a
--- /dev/null
@@ -0,0 +1,53 @@
+/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
+* File Name          : usb_desc.h
+* Author             : MCD Application Team
+* Version            : V3.1.1
+* Date               : 04/07/2010
+* Description        : Descriptor Header for Virtual COM Port Device
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USB_DESC_H
+#define __USB_DESC_H
+
+/* Includes ------------------------------------------------------------------*/
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+/* Exported macro ------------------------------------------------------------*/
+/* Exported define -----------------------------------------------------------*/
+#define USB_DEVICE_DESCRIPTOR_TYPE              0x01
+#define USB_CONFIGURATION_DESCRIPTOR_TYPE       0x02
+#define USB_STRING_DESCRIPTOR_TYPE              0x03
+#define USB_INTERFACE_DESCRIPTOR_TYPE           0x04
+#define USB_ENDPOINT_DESCRIPTOR_TYPE            0x05
+
+#define VIRTUAL_COM_PORT_DATA_SIZE              64
+#define VIRTUAL_COM_PORT_INT_SIZE               8
+
+#define VIRTUAL_COM_PORT_SIZ_DEVICE_DESC        18
+#define VIRTUAL_COM_PORT_SIZ_CONFIG_DESC        67
+#define VIRTUAL_COM_PORT_SIZ_STRING_LANGID      4
+#define VIRTUAL_COM_PORT_SIZ_STRING_VENDOR      38
+#define VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT     50
+#define VIRTUAL_COM_PORT_SIZ_STRING_SERIAL      26
+
+#define STANDARD_ENDPOINT_DESC_SIZE             0x09
+
+/* Exported functions ------------------------------------------------------- */
+extern const uint8_t Virtual_Com_Port_DeviceDescriptor[VIRTUAL_COM_PORT_SIZ_DEVICE_DESC];
+extern const uint8_t Virtual_Com_Port_ConfigDescriptor[VIRTUAL_COM_PORT_SIZ_CONFIG_DESC];
+
+extern const uint8_t Virtual_Com_Port_StringLangID[VIRTUAL_COM_PORT_SIZ_STRING_LANGID];
+extern const uint8_t Virtual_Com_Port_StringVendor[VIRTUAL_COM_PORT_SIZ_STRING_VENDOR];
+extern const uint8_t Virtual_Com_Port_StringProduct[VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT];
+extern uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL];
+
+#endif /* __USB_DESC_H */
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
diff --git a/Virtual_COM_Port/usb_endp.c b/Virtual_COM_Port/usb_endp.c
new file mode 100644 (file)
index 0000000..c6642b8
--- /dev/null
@@ -0,0 +1,67 @@
+/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
+* File Name          : usb_endp.c
+* Author             : MCD Application Team
+* Version            : V3.1.1
+* Date               : 04/07/2010
+* Description        : Endpoint routines
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_lib.h"
+#include "usb_desc.h"
+#include "usb_mem.h"
+#include "hw_config.h"
+#include "usb_istr.h"
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+uint8_t buffer_out[VIRTUAL_COM_PORT_DATA_SIZE];
+uint8_t buffer_in[VIRTUAL_COM_PORT_DATA_SIZE];
+
+__IO uint32_t count_out = 0;
+uint32_t count_in = 0;
+
+/* Private function prototypes -----------------------------------------------*/
+/* Private functions ---------------------------------------------------------*/
+
+/*******************************************************************************
+* Function Name  : EP1_IN_Callback
+* Description    :
+* Input          : None.
+* Output         : None.
+* Return         : None.
+*******************************************************************************/
+void EP1_IN_Callback(void)
+{
+  count_in = 0;
+}
+
+/*******************************************************************************
+* Function Name  : EP3_IN_Callback
+* Description    :
+* Input          : None.
+* Output         : None.
+* Return         : None.
+*******************************************************************************/
+void EP3_OUT_Callback(void)
+{
+  /* Get the received data buffer and update the counter */
+  count_out = USB_SIL_Read(EP3_OUT, buffer_out);
+    
+#ifndef STM32F10X_CL
+  /* Enable the receive of data on EP3 */
+  SetEPRxValid(ENDP3);
+#endif /* STM32F10X_CL */
+}
+
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
+
diff --git a/Virtual_COM_Port/usb_istr.c b/Virtual_COM_Port/usb_istr.c
new file mode 100644 (file)
index 0000000..a2396cb
--- /dev/null
@@ -0,0 +1,419 @@
+/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
+* File Name          : usb_istr.c
+* Author             : MCD Application Team
+* Version            : V3.1.1
+* Date               : 04/07/2010
+* Description        : ISTR events interrupt service routines
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_lib.h"
+#include "usb_prop.h"
+#include "usb_pwr.h"
+#include "usb_istr.h"
+
+/* function prototypes Automatically built defining related macros */
+void NOP_Proc(void) {
+}
+
+#define WEAK __attribute__ ((weak))
+void WEAK EP1_IN_Callback(void);
+void WEAK EP2_IN_Callback(void);
+void WEAK EP3_IN_Callback(void);
+void WEAK EP4_IN_Callback(void);
+void WEAK EP5_IN_Callback(void);
+void WEAK EP6_IN_Callback(void);
+void WEAK EP7_IN_Callback(void);
+
+void WEAK EP1_OUT_Callback(void);
+void WEAK EP2_OUT_Callback(void);
+void WEAK EP3_OUT_Callback(void);
+void WEAK EP4_OUT_Callback(void);
+void WEAK EP5_OUT_Callback(void);
+void WEAK EP6_OUT_Callback(void);
+void WEAK EP7_OUT_Callback(void);
+
+#pragma weak EP1_IN_Callback = NOP_Proc
+#pragma weak EP2_IN_Callback = NOP_Proc
+#pragma weak EP3_IN_Callback = NOP_Proc
+#pragma weak EP4_IN_Callback = NOP_Proc
+#pragma weak EP5_IN_Callback = NOP_Proc
+#pragma weak EP6_IN_Callback = NOP_Proc
+#pragma weak EP7_IN_Callback = NOP_Proc
+
+#pragma weak EP1_OUT_Callback = NOP_Proc
+#pragma weak EP2_OUT_Callback = NOP_Proc
+#pragma weak EP3_OUT_Callback = NOP_Proc
+#pragma weak EP4_OUT_Callback = NOP_Proc
+#pragma weak EP5_OUT_Callback = NOP_Proc
+#pragma weak EP6_OUT_Callback = NOP_Proc
+#pragma weak EP7_OUT_Callback = NOP_Proc
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+__IO uint16_t wIstr;  /* ISTR register last read value */
+__IO uint8_t bIntPackSOF = 0;  /* SOFs received between 2 consecutive packets */
+
+/* Extern variables ----------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+/* Private functions ---------------------------------------------------------*/
+/* function pointers to non-control endpoints service routines */
+void (*pEpInt_IN[7])(void) =
+  {
+    EP1_IN_Callback,
+    EP2_IN_Callback,
+    EP3_IN_Callback,
+    EP4_IN_Callback,
+    EP5_IN_Callback,
+    EP6_IN_Callback,
+    EP7_IN_Callback,
+  };
+
+void (*pEpInt_OUT[7])(void) =
+  {
+    EP1_OUT_Callback,
+    EP2_OUT_Callback,
+    EP3_OUT_Callback,
+    EP4_OUT_Callback,
+    EP5_OUT_Callback,
+    EP6_OUT_Callback,
+    EP7_OUT_Callback,
+  };
+
+#ifndef STM32F10X_CL
+
+/*******************************************************************************
+* Function Name  : USB_Istr
+* Description    : STR events interrupt service routine
+* Input          :
+* Output         :
+* Return         :
+*******************************************************************************/
+void USB_Istr(void)
+{
+
+  wIstr = _GetISTR();
+
+#if (IMR_MSK & ISTR_CTR)
+  if (wIstr & ISTR_CTR & wInterrupt_Mask)
+  {
+    /* servicing of the endpoint correct transfer interrupt */
+    /* clear of the CTR flag into the sub */
+    CTR_LP();
+#ifdef CTR_CALLBACK
+    CTR_Callback();
+#endif
+  }
+#endif
+  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/  
+#if (IMR_MSK & ISTR_RESET)
+  if (wIstr & ISTR_RESET & wInterrupt_Mask)
+  {
+    _SetISTR((uint16_t)CLR_RESET);
+    Device_Property.Reset();
+#ifdef RESET_CALLBACK
+    RESET_Callback();
+#endif
+  }
+#endif
+  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+#if (IMR_MSK & ISTR_DOVR)
+  if (wIstr & ISTR_DOVR & wInterrupt_Mask)
+  {
+    _SetISTR((uint16_t)CLR_DOVR);
+#ifdef DOVR_CALLBACK
+    DOVR_Callback();
+#endif
+  }
+#endif
+  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+#if (IMR_MSK & ISTR_ERR)
+  if (wIstr & ISTR_ERR & wInterrupt_Mask)
+  {
+    _SetISTR((uint16_t)CLR_ERR);
+#ifdef ERR_CALLBACK
+    ERR_Callback();
+#endif
+  }
+#endif
+  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+#if (IMR_MSK & ISTR_WKUP)
+  if (wIstr & ISTR_WKUP & wInterrupt_Mask)
+  {
+    _SetISTR((uint16_t)CLR_WKUP);
+    Resume(RESUME_EXTERNAL);
+#ifdef WKUP_CALLBACK
+    WKUP_Callback();
+#endif
+  }
+#endif
+  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+#if (IMR_MSK & ISTR_SUSP)
+  if (wIstr & ISTR_SUSP & wInterrupt_Mask)
+  {
+
+    /* check if SUSPEND is possible */
+    if (fSuspendEnabled)
+    {
+      Suspend();
+    }
+    else
+    {
+      /* if not possible then resume after xx ms */
+      Resume(RESUME_LATER);
+    }
+    /* clear of the ISTR bit must be done after setting of CNTR_FSUSP */
+    _SetISTR((uint16_t)CLR_SUSP);
+#ifdef SUSP_CALLBACK
+    SUSP_Callback();
+#endif
+  }
+#endif
+  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+#if (IMR_MSK & ISTR_SOF)
+  if (wIstr & ISTR_SOF & wInterrupt_Mask)
+  {
+    _SetISTR((uint16_t)CLR_SOF);
+    bIntPackSOF++;
+
+#ifdef SOF_CALLBACK
+    SOF_Callback();
+#endif
+  }
+#endif
+  /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+#if (IMR_MSK & ISTR_ESOF)
+  if (wIstr & ISTR_ESOF & wInterrupt_Mask)
+  {
+    _SetISTR((uint16_t)CLR_ESOF);
+    /* resume handling timing is made with ESOFs */
+    Resume(RESUME_ESOF); /* request without change of the machine state */
+
+#ifdef ESOF_CALLBACK
+    ESOF_Callback();
+#endif
+  }
+#endif
+} /* USB_Istr */
+
+/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+#else /* STM32F10X_CL */
+
+
+/*******************************************************************************
+* Function Name  : STM32_PCD_OTG_ISR_Handler
+* Description    : Handles all USB Device Interrupts
+* Input          : None
+* Output         : None
+* Return         : status
+*******************************************************************************/
+u32 STM32_PCD_OTG_ISR_Handler (void)
+{
+  USB_OTG_int_sts_data gintr_status;
+  u32 retval = 0;
+
+  if (IsDeviceMode()) /* ensure that we are in device mode */
+  {
+    gintr_status.d32 = OTGD_FS_ReadCoreItr();
+
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+    
+    /* If there is no interrupt pending exit the interrupt routine */
+    if (!gintr_status.d32)
+    {
+      return 0;
+    }
+
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
+    /* Early Suspend interrupt */ 
+#ifdef INTR_ERLYSUSPEND
+    if (gintr_status.b.erlysuspend)
+    {
+      retval |= OTGD_FS_Handle_EarlySuspend_ISR();
+    }
+#endif /* INTR_ERLYSUSPEND */
+    
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+    /* End of Periodic Frame interrupt */
+#ifdef INTR_EOPFRAME    
+    if (gintr_status.b.eopframe)
+    {
+      retval |= OTGD_FS_Handle_EOPF_ISR();
+    }
+#endif /* INTR_EOPFRAME */
+    
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+    /* Non Periodic Tx FIFO Emty interrupt */
+#ifdef INTR_NPTXFEMPTY    
+    if (gintr_status.b.nptxfempty)
+    {
+      retval |= OTGD_FS_Handle_NPTxFE_ISR();
+    }
+#endif /* INTR_NPTXFEMPTY */
+    
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
+    /* Wakeup or RemoteWakeup interrupt */
+#ifdef INTR_WKUPINTR    
+    if (gintr_status.b.wkupintr)
+    {   
+      retval |= OTGD_FS_Handle_Wakeup_ISR();
+    }
+#endif /* INTR_WKUPINTR */   
+    
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+    /* Suspend interrupt */
+#ifdef INTR_USBSUSPEND
+    if (gintr_status.b.usbsuspend)
+    { 
+      /* check if SUSPEND is possible */
+      if (fSuspendEnabled)
+      {
+        Suspend();
+      }
+      else
+      {
+        /* if not possible then resume after xx ms */
+        Resume(RESUME_LATER); /* This case shouldn't happen in OTG Device mode because 
+        there's no ESOF interrupt to increment the ResumeS.bESOFcnt in the Resume state machine */
+      }
+            
+      retval |= OTGD_FS_Handle_USBSuspend_ISR();
+    }
+#endif /* INTR_USBSUSPEND */
+
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+    /* Start of Frame interrupt */
+#ifdef INTR_SOFINTR    
+    if (gintr_status.b.sofintr)
+    {
+      /* Update the frame number variable */
+      bIntPackSOF++;
+      
+      retval |= OTGD_FS_Handle_Sof_ISR();
+    }
+#endif /* INTR_SOFINTR */
+    
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+    /* Receive FIFO Queue Status Level interrupt */
+#ifdef INTR_RXSTSQLVL
+    if (gintr_status.b.rxstsqlvl)
+    {
+      retval |= OTGD_FS_Handle_RxStatusQueueLevel_ISR();
+    }
+#endif /* INTR_RXSTSQLVL */
+    
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+    /* Enumeration Done interrupt */
+#ifdef INTR_ENUMDONE
+    if (gintr_status.b.enumdone)
+    {
+      retval |= OTGD_FS_Handle_EnumDone_ISR();
+    }
+#endif /* INTR_ENUMDONE */
+    
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+    /* Reset interrutp */
+#ifdef INTR_USBRESET
+    if (gintr_status.b.usbreset)
+    {
+      retval |= OTGD_FS_Handle_UsbReset_ISR();
+    }    
+#endif /* INTR_USBRESET */
+    
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
+    /* IN Endpoint interrupt */
+#ifdef INTR_INEPINTR
+    if (gintr_status.b.inepint)
+    {
+      retval |= OTGD_FS_Handle_InEP_ISR();
+    }
+#endif /* INTR_INEPINTR */
+    
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
+    /* OUT Endpoint interrupt */
+#ifdef INTR_OUTEPINTR
+    if (gintr_status.b.outepintr)
+    {
+      retval |= OTGD_FS_Handle_OutEP_ISR();
+    }
+#endif /* INTR_OUTEPINTR */    
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
+    /* Mode Mismatch interrupt */
+#ifdef INTR_MODEMISMATCH
+    if (gintr_status.b.modemismatch)
+    {
+      retval |= OTGD_FS_Handle_ModeMismatch_ISR();
+    }
+#endif /* INTR_MODEMISMATCH */  
+
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
+    /* Global IN Endpoints NAK Effective interrupt */
+#ifdef INTR_GINNAKEFF
+    if (gintr_status.b.ginnakeff)
+    {
+      retval |= OTGD_FS_Handle_GInNakEff_ISR();
+    }
+#endif /* INTR_GINNAKEFF */  
+
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
+    /* Global OUT Endpoints NAK effective interrupt */
+#ifdef INTR_GOUTNAKEFF
+    if (gintr_status.b.goutnakeff)
+    {
+      retval |= OTGD_FS_Handle_GOutNakEff_ISR();
+    }
+#endif /* INTR_GOUTNAKEFF */  
+
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
+    /* Isochrounous Out packet Dropped interrupt */
+#ifdef INTR_ISOOUTDROP
+    if (gintr_status.b.isooutdrop)
+    {
+      retval |= OTGD_FS_Handle_IsoOutDrop_ISR();
+    }
+#endif /* INTR_ISOOUTDROP */  
+
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
+    /* Endpoint Mismatch error interrupt */
+#ifdef INTR_EPMISMATCH
+    if (gintr_status.b.epmismatch)
+    {
+      retval |= OTGD_FS_Handle_EPMismatch_ISR();
+    }
+#endif /* INTR_EPMISMATCH */  
+
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
+    /* Incomplete Isochrous IN tranfer error interrupt */
+#ifdef INTR_INCOMPLISOIN
+    if (gintr_status.b.incomplisoin)
+    {
+      retval |= OTGD_FS_Handle_IncomplIsoIn_ISR();
+    }
+#endif /* INTR_INCOMPLISOIN */  
+
+   /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/    
+    /* Incomplete Isochrous OUT tranfer error interrupt */
+#ifdef INTR_INCOMPLISOOUT
+    if (gintr_status.b.outepintr)
+    {
+      retval |= OTGD_FS_Handle_IncomplIsoOut_ISR();
+    }
+#endif /* INTR_INCOMPLISOOUT */  
+  
+  }
+  return retval;
+}
+
+#endif /* STM32F10X_CL */
+
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
diff --git a/Virtual_COM_Port/usb_istr.h b/Virtual_COM_Port/usb_istr.h
new file mode 100644 (file)
index 0000000..77698f6
--- /dev/null
@@ -0,0 +1,104 @@
+/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
+* File Name          : usb_istr.h
+* Author             : MCD Application Team
+* Version            : V3.1.1
+* Date               : 04/07/2010
+* Description        : This file includes the peripherals header files in the
+*                      user application.
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USB_ISTR_H
+#define __USB_ISTR_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_conf.h"
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+/* Exported macro ------------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */
+
+#ifndef STM32F10X_CL
+ void USB_Istr(void);
+#else /* STM32F10X_CL */
+ u32 STM32_PCD_OTG_ISR_Handler(void);
+#endif /* STM32F10X_CL */
+
+
+#ifndef STM32F10X_CL
+
+#ifdef CTR_CALLBACK
+void CTR_Callback(void);
+#endif
+
+#ifdef DOVR_CALLBACK
+void DOVR_Callback(void);
+#endif
+
+#ifdef ERR_CALLBACK
+void ERR_Callback(void);
+#endif
+
+#ifdef WKUP_CALLBACK
+void WKUP_Callback(void);
+#endif
+
+#ifdef SUSP_CALLBACK
+void SUSP_Callback(void);
+#endif
+
+#ifdef RESET_CALLBACK
+void RESET_Callback(void);
+#endif
+
+#ifdef SOF_CALLBACK
+void SOF_Callback(void);
+#endif
+
+#ifdef ESOF_CALLBACK
+void ESOF_Callback(void);
+#endif
+
+#else /* STM32F10X_CL */
+
+/* Interrupt subroutines user callbacks prototypes.
+   These callbacks are called into the respective interrupt sunroutine functinos
+   and can be tailored for various user application purposes.
+     Note: Make sure that the correspondant interrupt is enabled through the 
+     definition in usb_conf.h file */ 
+void INTR_MODEMISMATCH_Callback(void);
+void INTR_SOFINTR_Callback(void);
+void INTR_RXSTSQLVL_Callback(void);
+void INTR_NPTXFEMPTY_Callback(void);
+void INTR_GINNAKEFF_Callback(void);
+void INTR_GOUTNAKEFF_Callback(void);
+void INTR_ERLYSUSPEND_Callback(void);
+void INTR_USBSUSPEND_Callback(void);
+void INTR_USBRESET_Callback(void);
+void INTR_ENUMDONE_Callback(void);
+void INTR_ISOOUTDROP_Callback(void);
+void INTR_EOPFRAME_Callback(void);
+void INTR_EPMISMATCH_Callback(void);
+void INTR_INEPINTR_Callback(void);
+void INTR_OUTEPINTR_Callback(void);
+void INTR_INCOMPLISOIN_Callback(void);
+void INTR_INCOMPLISOOUT_Callback(void);
+void INTR_WKUPINTR_Callback(void);
+
+/* Isochronous data update */
+void INTR_RXSTSQLVL_ISODU_Callback(void); 
+
+#endif /* STM32F10X_CL */
+
+
+#endif /*__USB_ISTR_H*/
+
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
diff --git a/Virtual_COM_Port/usb_prop.c b/Virtual_COM_Port/usb_prop.c
new file mode 100644 (file)
index 0000000..0f6d85b
--- /dev/null
@@ -0,0 +1,419 @@
+/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
+* File Name          : usb_prop.c
+* Author             : MCD Application Team
+* Version            : V3.1.1
+* Date               : 04/07/2010
+* Description        : All processing related to Virtual Com Port Demo
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_lib.h"
+#include "usb_conf.h"
+#include "usb_prop.h"
+#include "usb_desc.h"
+#include "usb_pwr.h"
+#include "hw_config.h"
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+uint8_t Request = 0;
+
+LINE_CODING linecoding =
+  {
+    115200, /* baud rate*/
+    0x00,   /* stop bits-1*/
+    0x00,   /* parity - none*/
+    0x08    /* no. of bits 8*/
+  };
+
+/* -------------------------------------------------------------------------- */
+/*  Structures initializations */
+/* -------------------------------------------------------------------------- */
+
+DEVICE Device_Table =
+  {
+    EP_NUM,
+    1
+  };
+
+DEVICE_PROP Device_Property =
+  {
+    Virtual_Com_Port_init,
+    Virtual_Com_Port_Reset,
+    Virtual_Com_Port_Status_In,
+    Virtual_Com_Port_Status_Out,
+    Virtual_Com_Port_Data_Setup,
+    Virtual_Com_Port_NoData_Setup,
+    Virtual_Com_Port_Get_Interface_Setting,
+    Virtual_Com_Port_GetDeviceDescriptor,
+    Virtual_Com_Port_GetConfigDescriptor,
+    Virtual_Com_Port_GetStringDescriptor,
+    0,
+    0x40 /*MAX PACKET SIZE*/
+  };
+
+USER_STANDARD_REQUESTS User_Standard_Requests =
+  {
+    Virtual_Com_Port_GetConfiguration,
+    Virtual_Com_Port_SetConfiguration,
+    Virtual_Com_Port_GetInterface,
+    Virtual_Com_Port_SetInterface,
+    Virtual_Com_Port_GetStatus,
+    Virtual_Com_Port_ClearFeature,
+    Virtual_Com_Port_SetEndPointFeature,
+    Virtual_Com_Port_SetDeviceFeature,
+    Virtual_Com_Port_SetDeviceAddress
+  };
+
+ONE_DESCRIPTOR Device_Descriptor =
+  {
+    (uint8_t*)Virtual_Com_Port_DeviceDescriptor,
+    VIRTUAL_COM_PORT_SIZ_DEVICE_DESC
+  };
+
+ONE_DESCRIPTOR Config_Descriptor =
+  {
+    (uint8_t*)Virtual_Com_Port_ConfigDescriptor,
+    VIRTUAL_COM_PORT_SIZ_CONFIG_DESC
+  };
+
+ONE_DESCRIPTOR String_Descriptor[4] =
+  {
+    {(uint8_t*)Virtual_Com_Port_StringLangID, VIRTUAL_COM_PORT_SIZ_STRING_LANGID},
+    {(uint8_t*)Virtual_Com_Port_StringVendor, VIRTUAL_COM_PORT_SIZ_STRING_VENDOR},
+    {(uint8_t*)Virtual_Com_Port_StringProduct, VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT},
+    {(uint8_t*)Virtual_Com_Port_StringSerial, VIRTUAL_COM_PORT_SIZ_STRING_SERIAL}
+  };
+
+/* Extern variables ----------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+/* Extern function prototypes ------------------------------------------------*/
+/* Private functions ---------------------------------------------------------*/
+/*******************************************************************************
+* Function Name  : Virtual_Com_Port_init.
+* Description    : Virtual COM Port Mouse init routine.
+* Input          : None.
+* Output         : None.
+* Return         : None.
+*******************************************************************************/
+void Virtual_Com_Port_init(void)
+{
+
+  /* Update the serial number string descriptor with the data from the unique
+  ID*/
+  Get_SerialNum();
+
+  pInformation->Current_Configuration = 0;
+
+  /* Connect the device */
+  PowerOn();
+
+  /* Perform basic device initialization operations */
+  USB_SIL_Init();
+
+  /* configure the USART to the default settings */
+  //USART_Config_Default();
+
+  bDeviceState = UNCONNECTED;
+}
+
+/*******************************************************************************
+* Function Name  : Virtual_Com_Port_Reset
+* Description    : Virtual_Com_Port Mouse reset routine
+* Input          : None.
+* Output         : None.
+* Return         : None.
+*******************************************************************************/
+void Virtual_Com_Port_Reset(void)
+{
+  /* Set Virtual_Com_Port DEVICE as not configured */
+  pInformation->Current_Configuration = 0;
+
+  /* Current Feature initialization */
+  pInformation->Current_Feature = Virtual_Com_Port_ConfigDescriptor[7];
+
+  /* Set Virtual_Com_Port DEVICE with the default Interface*/
+  pInformation->Current_Interface = 0;
+
+#ifdef STM32F10X_CL     
+  /* EP0 is already configured by USB_SIL_Init() function */
+  
+  /* Init EP1 IN as Bulk endpoint */
+  OTG_DEV_EP_Init(EP1_IN, OTG_DEV_EP_TYPE_BULK, VIRTUAL_COM_PORT_DATA_SIZE);
+  
+  /* Init EP2 IN as Interrupt endpoint */
+  OTG_DEV_EP_Init(EP2_IN, OTG_DEV_EP_TYPE_INT, VIRTUAL_COM_PORT_INT_SIZE);
+
+  /* Init EP3 OUT as Bulk endpoint */
+  OTG_DEV_EP_Init(EP3_OUT, OTG_DEV_EP_TYPE_BULK, VIRTUAL_COM_PORT_DATA_SIZE);  
+#else 
+
+  SetBTABLE(BTABLE_ADDRESS);
+
+  /* Initialize Endpoint 0 */
+  SetEPType(ENDP0, EP_CONTROL);
+  SetEPTxStatus(ENDP0, EP_TX_STALL);
+  SetEPRxAddr(ENDP0, ENDP0_RXADDR);
+  SetEPTxAddr(ENDP0, ENDP0_TXADDR);
+  Clear_Status_Out(ENDP0);
+  SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
+  SetEPRxValid(ENDP0);
+
+  /* Initialize Endpoint 1 */
+  SetEPType(ENDP1, EP_BULK);
+  SetEPTxAddr(ENDP1, ENDP1_TXADDR);
+  SetEPTxStatus(ENDP1, EP_TX_NAK);
+  SetEPRxStatus(ENDP1, EP_RX_DIS);
+
+  /* Initialize Endpoint 2 */
+  SetEPType(ENDP2, EP_INTERRUPT);
+  SetEPTxAddr(ENDP2, ENDP2_TXADDR);
+  SetEPRxStatus(ENDP2, EP_RX_DIS);
+  SetEPTxStatus(ENDP2, EP_TX_NAK);
+
+  /* Initialize Endpoint 3 */
+  SetEPType(ENDP3, EP_BULK);
+  SetEPRxAddr(ENDP3, ENDP3_RXADDR);
+  SetEPRxCount(ENDP3, VIRTUAL_COM_PORT_DATA_SIZE);
+  SetEPRxStatus(ENDP3, EP_RX_VALID);
+  SetEPTxStatus(ENDP3, EP_TX_DIS);
+
+  /* Set this device to response on default address */
+  SetDeviceAddress(0);
+#endif /* STM32F10X_CL */
+
+  bDeviceState = ATTACHED;
+}
+
+/*******************************************************************************
+* Function Name  : Virtual_Com_Port_SetConfiguration.
+* Description    : Udpade the device state to configured.
+* Input          : None.
+* Output         : None.
+* Return         : None.
+*******************************************************************************/
+void Virtual_Com_Port_SetConfiguration(void)
+{
+  DEVICE_INFO *pInfo = &Device_Info;
+
+  if (pInfo->Current_Configuration != 0)
+  {
+    /* Device configured */
+    bDeviceState = CONFIGURED;
+  }
+}
+
+/*******************************************************************************
+* Function Name  : Virtual_Com_Port_SetConfiguration.
+* Description    : Udpade the device state to addressed.
+* Input          : None.
+* Output         : None.
+* Return         : None.
+*******************************************************************************/
+void Virtual_Com_Port_SetDeviceAddress (void)
+{
+  bDeviceState = ADDRESSED;
+}
+
+/*******************************************************************************
+* Function Name  : Virtual_Com_Port_Status_In.
+* Description    : Virtual COM Port Status In Routine.
+* Input          : None.
+* Output         : None.
+* Return         : None.
+*******************************************************************************/
+void Virtual_Com_Port_Status_In(void)
+{
+  if (Request == SET_LINE_CODING)
+  {
+    //USART_Config();
+    Request = 0;
+  }
+}
+
+/*******************************************************************************
+* Function Name  : Virtual_Com_Port_Status_Out
+* Description    : Virtual COM Port Status OUT Routine.
+* Input          : None.
+* Output         : None.
+* Return         : None.
+*******************************************************************************/
+void Virtual_Com_Port_Status_Out(void)
+{}
+
+/*******************************************************************************
+* Function Name  : Virtual_Com_Port_Data_Setup
+* Description    : handle the data class specific requests
+* Input          : Request Nb.
+* Output         : None.
+* Return         : USB_UNSUPPORT or USB_SUCCESS.
+*******************************************************************************/
+RESULT Virtual_Com_Port_Data_Setup(uint8_t RequestNo)
+{
+  uint8_t    *(*CopyRoutine)(uint16_t);
+
+  CopyRoutine = NULL;
+
+  if (RequestNo == GET_LINE_CODING)
+  {
+    if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
+    {
+      CopyRoutine = Virtual_Com_Port_GetLineCoding;
+    }
+  }
+  else if (RequestNo == SET_LINE_CODING)
+  {
+    if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
+    {
+      CopyRoutine = Virtual_Com_Port_SetLineCoding;
+    }
+    Request = SET_LINE_CODING;
+  }
+
+  if (CopyRoutine == NULL)
+  {
+    return USB_UNSUPPORT;
+  }
+
+  pInformation->Ctrl_Info.CopyData = CopyRoutine;
+  pInformation->Ctrl_Info.Usb_wOffset = 0;
+  (*CopyRoutine)(0);
+  return USB_SUCCESS;
+}
+
+/*******************************************************************************
+* Function Name  : Virtual_Com_Port_NoData_Setup.
+* Description    : handle the no data class specific requests.
+* Input          : Request Nb.
+* Output         : None.
+* Return         : USB_UNSUPPORT or USB_SUCCESS.
+*******************************************************************************/
+RESULT Virtual_Com_Port_NoData_Setup(uint8_t RequestNo)
+{
+
+  if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
+  {
+    if (RequestNo == SET_COMM_FEATURE)
+    {
+      return USB_SUCCESS;
+    }
+    else if (RequestNo == SET_CONTROL_LINE_STATE)
+    {
+      return USB_SUCCESS;
+    }
+  }
+
+  return USB_UNSUPPORT;
+}
+
+/*******************************************************************************
+* Function Name  : Virtual_Com_Port_GetDeviceDescriptor.
+* Description    : Gets the device descriptor.
+* Input          : Length.
+* Output         : None.
+* Return         : The address of the device descriptor.
+*******************************************************************************/
+uint8_t *Virtual_Com_Port_GetDeviceDescriptor(uint16_t Length)
+{
+  return Standard_GetDescriptorData(Length, &Device_Descriptor);
+}
+
+/*******************************************************************************
+* Function Name  : Virtual_Com_Port_GetConfigDescriptor.
+* Description    : get the configuration descriptor.
+* Input          : Length.
+* Output         : None.
+* Return         : The address of the configuration descriptor.
+*******************************************************************************/
+uint8_t *Virtual_Com_Port_GetConfigDescriptor(uint16_t Length)
+{
+  return Standard_GetDescriptorData(Length, &Config_Descriptor);
+}
+
+/*******************************************************************************
+* Function Name  : Virtual_Com_Port_GetStringDescriptor
+* Description    : Gets the string descriptors according to the needed index
+* Input          : Length.
+* Output         : None.
+* Return         : The address of the string descriptors.
+*******************************************************************************/
+uint8_t *Virtual_Com_Port_GetStringDescriptor(uint16_t Length)
+{
+  uint8_t wValue0 = pInformation->USBwValue0;
+  if (wValue0 > 4)
+  {
+    return NULL;
+  }
+  else
+  {
+    return Standard_GetDescriptorData(Length, &String_Descriptor[wValue0]);
+  }
+}
+
+/*******************************************************************************
+* Function Name  : Virtual_Com_Port_Get_Interface_Setting.
+* Description    : test the interface and the alternate setting according to the
+*                  supported one.
+* Input1         : uint8_t: Interface : interface number.
+* Input2         : uint8_t: AlternateSetting : Alternate Setting number.
+* Output         : None.
+* Return         : The address of the string descriptors.
+*******************************************************************************/
+RESULT Virtual_Com_Port_Get_Interface_Setting(uint8_t Interface, uint8_t AlternateSetting)
+{
+  if (AlternateSetting > 0)
+  {
+    return USB_UNSUPPORT;
+  }
+  else if (Interface > 1)
+  {
+    return USB_UNSUPPORT;
+  }
+  return USB_SUCCESS;
+}
+
+/*******************************************************************************
+* Function Name  : Virtual_Com_Port_GetLineCoding.
+* Description    : send the linecoding structure to the PC host.
+* Input          : Length.
+* Output         : None.
+* Return         : Inecoding structure base address.
+*******************************************************************************/
+uint8_t *Virtual_Com_Port_GetLineCoding(uint16_t Length)
+{
+  if (Length == 0)
+  {
+    pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
+    return NULL;
+  }
+  return(uint8_t *)&linecoding;
+}
+
+/*******************************************************************************
+* Function Name  : Virtual_Com_Port_SetLineCoding.
+* Description    : Set the linecoding structure fields.
+* Input          : Length.
+* Output         : None.
+* Return         : Linecoding structure base address.
+*******************************************************************************/
+uint8_t *Virtual_Com_Port_SetLineCoding(uint16_t Length)
+{
+  if (Length == 0)
+  {
+    pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
+    return NULL;
+  }
+  return(uint8_t *)&linecoding;
+}
+
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
+
diff --git a/Virtual_COM_Port/usb_prop.h b/Virtual_COM_Port/usb_prop.h
new file mode 100644 (file)
index 0000000..3adf76b
--- /dev/null
@@ -0,0 +1,74 @@
+/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
+* File Name          : usb_prop.h
+* Author             : MCD Application Team
+* Version            : V3.1.1
+* Date               : 04/07/2010
+* Description        : All processing related to Virtual COM Port Demo (Endpoint 0)
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __usb_prop_H
+#define __usb_prop_H
+
+/* Includes ------------------------------------------------------------------*/
+/* Exported types ------------------------------------------------------------*/
+typedef struct
+{
+  uint32_t bitrate;
+  uint8_t format;
+  uint8_t paritytype;
+  uint8_t datatype;
+}LINE_CODING;
+
+/* Exported constants --------------------------------------------------------*/
+/* Exported macro ------------------------------------------------------------*/
+/* Exported define -----------------------------------------------------------*/
+
+#define Virtual_Com_Port_GetConfiguration          NOP_Process
+//#define Virtual_Com_Port_SetConfiguration          NOP_Process
+#define Virtual_Com_Port_GetInterface              NOP_Process
+#define Virtual_Com_Port_SetInterface              NOP_Process
+#define Virtual_Com_Port_GetStatus                 NOP_Process
+#define Virtual_Com_Port_ClearFeature              NOP_Process
+#define Virtual_Com_Port_SetEndPointFeature        NOP_Process
+#define Virtual_Com_Port_SetDeviceFeature          NOP_Process
+//#define Virtual_Com_Port_SetDeviceAddress          NOP_Process
+
+#define SEND_ENCAPSULATED_COMMAND   0x00
+#define GET_ENCAPSULATED_RESPONSE   0x01
+#define SET_COMM_FEATURE            0x02
+#define GET_COMM_FEATURE            0x03
+#define CLEAR_COMM_FEATURE          0x04
+#define SET_LINE_CODING             0x20
+#define GET_LINE_CODING             0x21
+#define SET_CONTROL_LINE_STATE      0x22
+#define SEND_BREAK                  0x23
+
+/* Exported functions ------------------------------------------------------- */
+void Virtual_Com_Port_init(void);
+void Virtual_Com_Port_Reset(void);
+void Virtual_Com_Port_SetConfiguration(void);
+void Virtual_Com_Port_SetDeviceAddress (void);
+void Virtual_Com_Port_Status_In (void);
+void Virtual_Com_Port_Status_Out (void);
+RESULT Virtual_Com_Port_Data_Setup(uint8_t);
+RESULT Virtual_Com_Port_NoData_Setup(uint8_t);
+RESULT Virtual_Com_Port_Get_Interface_Setting(uint8_t Interface, uint8_t AlternateSetting);
+uint8_t *Virtual_Com_Port_GetDeviceDescriptor(uint16_t );
+uint8_t *Virtual_Com_Port_GetConfigDescriptor(uint16_t);
+uint8_t *Virtual_Com_Port_GetStringDescriptor(uint16_t);
+
+uint8_t *Virtual_Com_Port_GetLineCoding(uint16_t Length);
+uint8_t *Virtual_Com_Port_SetLineCoding(uint16_t Length);
+
+#endif /* __usb_prop_H */
+
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
+
diff --git a/Virtual_COM_Port/usb_pwr.c b/Virtual_COM_Port/usb_pwr.c
new file mode 100644 (file)
index 0000000..1346779
--- /dev/null
@@ -0,0 +1,251 @@
+/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
+* File Name          : usb_pwr.c
+* Author             : MCD Application Team
+* Version            : V3.1.1
+* Date               : 04/07/2010
+* Description        : Connection/disconnection & power management
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f10x.h"
+#include "usb_lib.h"
+#include "usb_conf.h"
+#include "usb_pwr.h"
+#include "hw_config.h"
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+__IO uint32_t bDeviceState = UNCONNECTED; /* USB device status */
+__IO bool fSuspendEnabled = TRUE;  /* true when suspend is possible */
+
+struct
+{
+  __IO RESUME_STATE eState;
+  __IO uint8_t bESOFcnt;
+}ResumeS;
+
+/* Extern variables ----------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+/* Extern function prototypes ------------------------------------------------*/
+/* Private functions ---------------------------------------------------------*/
+
+/*******************************************************************************
+* Function Name  : PowerOn
+* Description    :
+* Input          : None.
+* Output         : None.
+* Return         : USB_SUCCESS.
+*******************************************************************************/
+RESULT PowerOn(void)
+{
+#ifndef STM32F10X_CL
+  uint16_t wRegVal;
+
+  /*** cable plugged-in ? ***/
+  USB_Cable_Config(ENABLE);
+
+  /*** CNTR_PWDN = 0 ***/
+  wRegVal = CNTR_FRES;
+  _SetCNTR(wRegVal);
+
+  /*** CNTR_FRES = 0 ***/
+  wInterrupt_Mask = 0;
+  _SetCNTR(wInterrupt_Mask);
+  /*** Clear pending interrupts ***/
+  _SetISTR(0);
+  /*** Set interrupt mask ***/
+  wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM;
+  _SetCNTR(wInterrupt_Mask);
+#endif /* STM32F10X_CL */
+
+  return USB_SUCCESS;
+}
+
+/*******************************************************************************
+* Function Name  : PowerOff
+* Description    : handles switch-off conditions
+* Input          : None.
+* Output         : None.
+* Return         : USB_SUCCESS.
+*******************************************************************************/
+RESULT PowerOff()
+{
+#ifndef STM32F10X_CL
+  /* disable all ints and force USB reset */
+  _SetCNTR(CNTR_FRES);
+  /* clear interrupt status register */
+  _SetISTR(0);
+  /* Disable the Pull-Up*/
+  USB_Cable_Config(DISABLE);
+  /* switch-off device */
+  _SetCNTR(CNTR_FRES + CNTR_PDWN);
+#endif /* STM32F10X_CL */
+
+  /* sw variables reset */
+  /* ... */
+
+  return USB_SUCCESS;
+}
+
+/*******************************************************************************
+* Function Name  : Suspend
+* Description    : sets suspend mode operating conditions
+* Input          : None.
+* Output         : None.
+* Return         : USB_SUCCESS.
+*******************************************************************************/
+void Suspend(void)
+{
+#ifndef STM32F10X_CL
+  uint16_t wCNTR;
+  /* suspend preparation */
+  /* ... */
+
+  /* macrocell enters suspend mode */
+  wCNTR = _GetCNTR();
+  wCNTR |= CNTR_FSUSP;
+  _SetCNTR(wCNTR);
+#endif /* STM32F10X_CL */
+
+  /* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
+  /* power reduction */
+  /* ... on connected devices */
+
+#ifndef STM32F10X_CL
+  /* force low-power mode in the macrocell */
+  wCNTR = _GetCNTR();
+  wCNTR |= CNTR_LPMODE;
+  _SetCNTR(wCNTR);
+#endif /* STM32F10X_CL */
+
+  /* switch-off the clocks */
+  /* ... */
+  Enter_LowPowerMode();
+
+}
+
+/*******************************************************************************
+* Function Name  : Resume_Init
+* Description    : Handles wake-up restoring normal operations
+* Input          : None.
+* Output         : None.
+* Return         : USB_SUCCESS.
+*******************************************************************************/
+void Resume_Init(void)
+{
+#ifndef STM32F10X_CL
+  uint16_t wCNTR;
+#endif /* STM32F10X_CL */ 
+
+  /* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
+  /* restart the clocks */
+  /* ...  */
+
+#ifndef STM32F10X_CL
+  /* CNTR_LPMODE = 0 */
+  wCNTR = _GetCNTR();
+  wCNTR &= (~CNTR_LPMODE);
+  _SetCNTR(wCNTR);
+#endif /* STM32F10X_CL */ 
+
+  /* restore full power */
+  /* ... on connected devices */
+  Leave_LowPowerMode();
+
+#ifndef STM32F10X_CL
+  /* reset FSUSP bit */
+  _SetCNTR(IMR_MSK);
+#endif /* STM32F10X_CL */
+
+  /* reverse suspend preparation */
+  /* ... */
+
+}
+
+/*******************************************************************************
+* Function Name  : Resume
+* Description    : This is the state machine handling resume operations and
+*                 timing sequence. The control is based on the Resume structure
+*                 variables and on the ESOF interrupt calling this subroutine
+*                 without changing machine state.
+* Input          : a state machine value (RESUME_STATE)
+*                  RESUME_ESOF doesn't change ResumeS.eState allowing
+*                  decrementing of the ESOF counter in different states.
+* Output         : None.
+* Return         : None.
+*******************************************************************************/
+void Resume(RESUME_STATE eResumeSetVal)
+{
+#ifndef STM32F10X_CL
+  uint16_t wCNTR;
+#endif /* STM32F10X_CL */
+
+  if (eResumeSetVal != RESUME_ESOF)
+    ResumeS.eState = eResumeSetVal;
+
+  switch (ResumeS.eState)
+  {
+    case RESUME_EXTERNAL:
+      Resume_Init();
+      ResumeS.eState = RESUME_OFF;
+      break;
+    case RESUME_INTERNAL:
+      Resume_Init();
+      ResumeS.eState = RESUME_START;
+      break;
+    case RESUME_LATER:
+      ResumeS.bESOFcnt = 2;
+      ResumeS.eState = RESUME_WAIT;
+      break;
+    case RESUME_WAIT:
+      ResumeS.bESOFcnt--;
+      if (ResumeS.bESOFcnt == 0)
+        ResumeS.eState = RESUME_START;
+      break;
+    case RESUME_START:
+     #ifdef STM32F10X_CL
+      OTGD_FS_Dev_SetRemoteWakeup();
+     #else 
+      wCNTR = _GetCNTR();
+      wCNTR |= CNTR_RESUME;
+      _SetCNTR(wCNTR);
+     #endif /* STM32F10X_CL */
+      ResumeS.eState = RESUME_ON;
+      ResumeS.bESOFcnt = 10;
+      break;
+    case RESUME_ON:
+    #ifndef STM32F10X_CL      
+      ResumeS.bESOFcnt--;
+      if (ResumeS.bESOFcnt == 0)
+      {
+     #endif /* STM32F10X_CL */    
+       #ifdef STM32F10X_CL
+        OTGD_FS_Dev_ResetRemoteWakeup();
+       #else
+        wCNTR = _GetCNTR();
+        wCNTR &= (~CNTR_RESUME);
+        _SetCNTR(wCNTR);
+       #endif /* STM32F10X_CL */
+        ResumeS.eState = RESUME_OFF;
+     #ifndef STM32F10X_CL
+      }
+     #endif /* STM32F10X_CL */
+      break;
+    case RESUME_OFF:
+    case RESUME_ESOF:
+    default:
+      ResumeS.eState = RESUME_OFF;
+      break;
+  }
+}
+
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
diff --git a/Virtual_COM_Port/usb_pwr.h b/Virtual_COM_Port/usb_pwr.h
new file mode 100644 (file)
index 0000000..21a9927
--- /dev/null
@@ -0,0 +1,59 @@
+/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
+* File Name          : usb_pwr.h
+* Author             : MCD Application Team
+* Version            : V3.1.1
+* Date               : 04/07/2010
+* Description        : Connection/disconnection & power management header
+********************************************************************************
+* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USB_PWR_H
+#define __USB_PWR_H
+
+/* Includes ------------------------------------------------------------------*/
+/* Exported types ------------------------------------------------------------*/
+typedef enum _RESUME_STATE
+{
+  RESUME_EXTERNAL,
+  RESUME_INTERNAL,
+  RESUME_LATER,
+  RESUME_WAIT,
+  RESUME_START,
+  RESUME_ON,
+  RESUME_OFF,
+  RESUME_ESOF
+} RESUME_STATE;
+
+typedef enum _DEVICE_STATE
+{
+  UNCONNECTED,
+  ATTACHED,
+  POWERED,
+  SUSPENDED,
+  ADDRESSED,
+  CONFIGURED
+} DEVICE_STATE;
+
+/* Exported constants --------------------------------------------------------*/
+/* Exported macro ------------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */
+void Suspend(void);
+void Resume_Init(void);
+void Resume(RESUME_STATE eResumeSetVal);
+RESULT PowerOn(void);
+RESULT PowerOff(void);
+
+/* External variables --------------------------------------------------------*/
+extern  __IO uint32_t bDeviceState; /* USB device status */
+extern __IO bool fSuspendEnabled;  /* true when suspend is possible */
+
+#endif  /*__USB_PWR_H*/
+
+/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
index d40ec2e..729b32b 100644 (file)
@@ -1,3 +1,6 @@
+# Makefile for Gnuk
+
+
 ##############################################################################
 # Build global options
 # NOTE: Can be overridden externally.
@@ -62,7 +65,7 @@ include $(CHIBIOS)/os/hal/hal.mk
 include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/port.mk
 include $(CHIBIOS)/os/kernel/kernel.mk
 include stmusb.mk
-include usbcdc.mk
+include vcomport.mk
 include rsa.mk
 include ../boards/OLIMEX_STM32_H103/board.mk
 
@@ -76,15 +79,16 @@ CSRC = $(PORTSRC) \
        $(CHIBIOS)/os/various/evtimer.c \
        $(CHIBIOS)/os/various/syscalls.c \
        $(STMUSBSRC) \
-       $(USBCDCSRC) \
+       $(VCOMSRC) \
        $(RSASRC) \
-       main.c hw_config.c usb_lld.c usb_desc.c usb_prop.c usb-icc.c gpg.c ac.c gpg-do.c
+       main.c hw_config.c usb_lld.c usb_desc.c usb_prop.c \
+       usb-icc.c gpg.c ac.c openpgp-do.c flash.c
 
 # List ASM source files here
 ASMSRC = $(PORTASM) \
          $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/vectors.s gpg-data.s
 
-INCDIR = $(RSAINCDIR) $(STMUSBINCDIR) $(USBCDCDIR) \
+INCDIR = $(RSAINCDIR) $(STMUSBINCDIR) $(VCOMDIR) \
         $(PORTINC) $(KERNINC) $(TESTINC) \
          $(HALINC) $(PLATFORMINC) $(BOARDINC) \
          $(CHIBIOS)/os/various
index 65b9045..543634b 100644 (file)
-/*
-    ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio.
-
-    This file is part of ChibiOS/RT.
-
-    ChibiOS/RT 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.
-
-    ChibiOS/RT 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 <http://www.gnu.org/licenses/>.
-
-                                      ---
-
-    A special exception to the GPL can be applied should you wish to distribute
-    a combined work that includes ChibiOS/RT, without being obliged to provide
-    the source code for any proprietary components. See the file exception.txt
-    for full details of how and when the exception can be applied.
-*/
-
-/**
- * @file    templates/chconf.h
- * @brief   Configuration file template.
- * @details A copy of this file must be placed in each project directory, it
- *          contains the application specific kernel settings.
- *
- * @addtogroup config
- * @details Kernel related settings and hooks.
- * @{
- */
+/* ChibiOS/RT configuration file */
 
 #ifndef _CHCONF_H_
 #define _CHCONF_H_
 
-/*===========================================================================*/
-/* Kernel parameters.                                                        */
-/*===========================================================================*/
-
-/**
- * @brief   System tick frequency.
- * @details Frequency of the system timer that drives the system ticks. This
- *          setting also defines the system tick time unit.
- */
-#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
 #define CH_FREQUENCY                    1000
-#endif
-
-/**
- * @brief   Round robin interval.
- * @details This constant is the number of system ticks allowed for the
- *          threads before preemption occurs. Setting this value to zero
- *          disables the preemption for threads with equal priority and the
- *          round robin becomes cooperative. Note that higher priority
- *          threads can still preempt, the kernel is always preemptive.
- *
- * @note    Disabling the round robin preemption makes the kernel more compact
- *          and generally faster.
- */
-#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
 #define CH_TIME_QUANTUM                 20
-#endif
-
-/**
- * @brief   Nested locks.
- * @details If enabled then the use of nested @p chSysLock() / @p chSysUnlock()
- *          operations is allowed.<br>
- *          For performance and code size reasons the recommended setting
- *          is to leave this option disabled.<br>
- *          You may use this option if you need to merge ChibiOS/RT with
- *          external libraries that require nested lock/unlock operations.
- *
- * @note T  he default is @p FALSE.
- */
-#if !defined(CH_USE_NESTED_LOCKS) || defined(__DOXYGEN__)
 #define CH_USE_NESTED_LOCKS             FALSE
-#endif
-
-/**
- * @brief   Managed RAM size.
- * @details Size of the RAM area to be managed by the OS. If set to zero
- *          then the whole available RAM is used. The core memory is made
- *          available to the heap allocator and/or can be used directly through
- *          the simplified core memory allocator.
- *
- * @note    In order to let the OS manage the whole RAM the linker script must
- *          provide the @p __heap_base__ and @p __heap_end__ symbols.
- * @note    Requires @p CH_USE_COREMEM.
- */
-#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
-#define CH_MEMCORE_SIZE                 0
-#endif
-
-/*===========================================================================*/
-/* Performance options.                                                      */
-/*===========================================================================*/
-
-/**
- * @brief   OS optimization.
- * @details If enabled then time efficient rather than space efficient code
- *          is used when two possible implementations exist.
- *
- * @note    This is not related to the compiler optimization options.
- * @note    The default is @p TRUE.
- */
-#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
+#define CH_MEMCORE_SIZE                 0 /* Whole RAM */
 #define CH_OPTIMIZE_SPEED               TRUE
-#endif
-
-/**
- * @brief   Exotic optimization.
- * @details If defined then a CPU register is used as storage for the global
- *          @p currp variable. Caching this variable in a register greatly
- *          improves both space and time OS efficiency. A side effect is that
- *          one less register has to be saved during the context switch
- *          resulting in lower RAM usage and faster context switch.
- *
- * @note    This option is only usable with the GCC compiler and is only useful
- *          on processors with many registers like ARM cores.
- * @note    If this option is enabled then ALL the libraries linked to the
- *          ChibiOS/RT code <b>must</b> be recompiled with the GCC option @p
- *          -ffixed-@<reg@>.
- * @note    This option must be enabled in the Makefile, it is listed here for
- *          documentation only.
- */
-#if defined(__DOXYGEN__)
-#define CH_CURRP_REGISTER_CACHE         "reg"
-#endif
-
-/*===========================================================================*/
-/* Subsystem options.                                                        */
-/*===========================================================================*/
-
-/**
- * @brief   Threads registry APIs.
- * @details If enabled then the registry APIs are included in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
 #define CH_USE_REGISTRY                 TRUE
-#endif
-
-/**
- * @brief   Threads synchronization APIs.
- * @details If enabled then the @p chThdWait() function is included in
- *          the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
 #define CH_USE_WAITEXIT                 TRUE
-#endif
-
-/**
- * @brief   Semaphores APIs.
- * @details If enabled then the Semaphores APIs are included in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
-#define CH_USE_SEMAPHORES               TRUE
-#endif
-
-/**
- * @brief   Semaphores queuing mode.
- * @details If enabled then the threads are enqueued on semaphores by
- *          priority rather than in FIFO order.
- *
- * @note    The default is @p FALSE. Enable this if you have special requirements.
- * @note    Requires @p CH_USE_SEMAPHORES.
- */
-#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
+#define CH_USE_SEMAPHORES               FALSE
 #define CH_USE_SEMAPHORES_PRIORITY      FALSE
-#endif
-
-/**
- * @brief   Atomic semaphore API.
- * @details If enabled then the semaphores the @p chSemSignalWait() API
- *          is included in the kernel.
- *
- * @note    The default is @p TRUE.
- * @note    Requires @p CH_USE_SEMAPHORES.
- */
-#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
-#define CH_USE_SEMSW                    TRUE
-#endif
-
-/**
- * @brief   Mutexes APIs.
- * @details If enabled then the mutexes APIs are included in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
+#define CH_USE_SEMSW                    FALSE
 #define CH_USE_MUTEXES                  TRUE
-#endif
-
-/**
- * @brief   Conditional Variables APIs.
- * @details If enabled then the conditional variables APIs are included
- *          in the kernel.
- *
- * @note    The default is @p TRUE.
- * @note    Requires @p CH_USE_MUTEXES.
- */
-#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
 #define CH_USE_CONDVARS                 TRUE
-#endif
-
-/**
- * @brief   Conditional Variables APIs with timeout.
- * @details If enabled then the conditional variables APIs with timeout
- *          specification are included in the kernel.
- *
- * @note    The default is @p TRUE.
- * @note    Requires @p CH_USE_CONDVARS.
- */
-#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
 #define CH_USE_CONDVARS_TIMEOUT         TRUE
-#endif
-
-/**
- * @brief   Events Flags APIs.
- * @details If enabled then the event flags APIs are included in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
-#define CH_USE_EVENTS                   TRUE
-#endif
-
-/**
- * @brief   Events Flags APIs with timeout.
- * @details If enabled then the events APIs with timeout specification
- *          are included in the kernel.
- *
- * @note    The default is @p TRUE.
- * @note    Requires @p CH_USE_EVENTS.
- */
-#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
-#define CH_USE_EVENTS_TIMEOUT           TRUE
-#endif
-
-/**
- * @brief   Synchronous Messages APIs.
- * @details If enabled then the synchronous messages APIs are included
- *          in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
+#define CH_USE_EVENTS                   TRUE /* We use this! */
+#define CH_USE_EVENTS_TIMEOUT           TRUE /* We use this! */
 #define CH_USE_MESSAGES                 TRUE
-#endif
-
-/**
- * @brief   Synchronous Messages queuing mode.
- * @details If enabled then messages are served by priority rather than in
- *          FIFO order.
- *
- * @note    The default is @p FALSE. Enable this if you have special requirements.
- * @note    Requires @p CH_USE_MESSAGES.
- */
-#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
 #define CH_USE_MESSAGES_PRIORITY        FALSE
-#endif
-
-/**
- * @brief   Mailboxes APIs.
- * @details If enabled then the asynchronous messages (mailboxes) APIs are
- *          included in the kernel.
- *
- * @note    The default is @p TRUE.
- * @note    Requires @p CH_USE_SEMAPHORES.
- */
-#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
-#define CH_USE_MAILBOXES                TRUE
-#endif
-
-/**
- * @brief   I/O Queues APIs.
- * @details If enabled then the I/O queues APIs are included in the kernel.
- *
- * @note    The default is @p TRUE.
- * @note    Requires @p CH_USE_SEMAPHORES.
- */
-#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
-#define CH_USE_QUEUES                   TRUE
-#endif
-
-/**
- * @brief   Core Memory Manager APIs.
- * @details If enabled then the core memory manager APIs are included
- *          in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
+#define CH_USE_MAILBOXES                FALSE
+#define CH_USE_QUEUES                   FALSE
 #define CH_USE_MEMCORE                  TRUE
-#endif
-
-/**
- * @brief   Heap Allocator APIs.
- * @details If enabled then the memory heap allocator APIs are included
- *          in the kernel.
- *
- * @note    The default is @p TRUE.
- * @note    Requires @p CH_USE_COREMEM and either @p CH_USE_MUTEXES or
- *          @p CH_USE_SEMAPHORES.
- * @note    Mutexes are recommended.
- */
-#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
 #define CH_USE_HEAP                     TRUE
-#endif
-
-/**
- * @brief   C-runtime allocator.
- * @details If enabled the the heap allocator APIs just wrap the C-runtime
- *          @p malloc() and @p free() functions.
- *
- * @note    The default is @p FALSE.
- * @note    Requires @p CH_USE_HEAP.
- * @note    The C-runtime may or may not require @p CH_USE_COREMEM, see the
- *          appropriate documentation.
- */
-#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
 #define CH_USE_MALLOC_HEAP              FALSE
-#endif
-
-/**
- * @brief   Memory Pools Allocator APIs.
- * @details If enabled then the memory pools allocator APIs are included
- *          in the kernel.
- *
- * @note    The default is @p TRUE.
- */
-#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
 #define CH_USE_MEMPOOLS                 TRUE
-#endif
+#define CH_USE_DYNAMIC                  FALSE
 
-/**
- * @brief   Dynamic Threads APIs.
- * @details If enabled then the dynamic threads creation APIs are included
- *          in the kernel.
- *
- * @note    The default is @p TRUE.
- * @note    Requires @p CH_USE_WAITEXIT.
- * @note    Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
- */
-#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
-#define CH_USE_DYNAMIC                  TRUE
-#endif
-
-/*===========================================================================*/
-/* Debug options.                                                            */
-/*===========================================================================*/
-
-/**
- * @brief   Debug option, parameters checks.
- * @details If enabled then the checks on the API functions input
- *          parameters are activated.
- *
- * @note    The default is @p FALSE.
- */
-#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
+/* Debug options */
 #define CH_DBG_ENABLE_CHECKS            FALSE
-#endif
-
-/**
- * @brief   Debug option, consistency checks.
- * @details If enabled then all the assertions in the kernel code are
- *          activated. This includes consistency checks inside the kernel,
- *          runtime anomalies and port-defined checks.
- *
- * @note    The default is @p FALSE.
- */
-#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
 #define CH_DBG_ENABLE_ASSERTS           FALSE
-#endif
-
-/**
- * @brief   Debug option, trace buffer.
- * @details If enabled then the context switch circular trace buffer is
- *          activated.
- *
- * @note    The default is @p FALSE.
- */
-#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
 #define CH_DBG_ENABLE_TRACE             FALSE
-#endif
-
-/**
- * @brief   Debug option, stack checks.
- * @details If enabled then a runtime stack check is performed.
- *
- * @note    The default is @p FALSE.
- * @note    The stack check is performed in a architecture/port dependent way.
- *          It may not be implemented or some ports.
- * @note    The default failure mode is to halt the system with the global
- *          @p panic_msg variable set to @p NULL.
- */
-#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
 #define CH_DBG_ENABLE_STACK_CHECK       FALSE
-#endif
-
-/**
- * @brief   Debug option, stacks initialization.
- * @details If enabled then the threads working area is filled with a byte
- *          value when a thread is created. This can be useful for the
- *          runtime measurement of the used stack.
- *
- * @note    The default is @p FALSE.
- */
-#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
 #define CH_DBG_FILL_THREADS             FALSE
-#endif
-
-/**
- * @brief   Debug option, threads profiling.
- * @details If enabled then a field is added to the @p Thread structure that
- *          counts the system ticks occurred while executing the thread.
- *
- * @note    The default is @p TRUE.
- * @note    This debug option is defaulted to TRUE because it is required by
- *          some test cases into the test suite.
- */
-#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
 #define CH_DBG_THREADS_PROFILING        TRUE
-#endif
-
-/*===========================================================================*/
-/* Kernel hooks.                                                             */
-/*===========================================================================*/
 
-/**
- * @brief   Threads descriptor structure hook.
- * @details User fields added to the end of the @p Thread structure.
- */
-#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
 #define THREAD_EXT_FIELDS                                               \
 struct {                                                                \
   /* Add threads custom fields here.*/                                  \
 };
-#endif
 
-/**
- * @brief   Threads initialization hook.
- * @details User initialization code added to the @p chThdInit() API.
- *
- * @note    It is invoked from within @p chThdInit() and implicitily from all
- *          the threads creation APIs.
- */
-#if !defined(THREAD_EXT_INIT) || defined(__DOXYGEN__)
 #define THREAD_EXT_INIT(tp) {                                           \
   /* Add threads initialization code here.*/                            \
 }
-#endif
 
-/**
- * @brief   Threads finalization hook.
- * @details User finalization code added to the @p chThdExit() API.
- *
- * @note    It is inserted into lock zone.
- * @note    It is also invoked when the threads simply return in order to
- *          terminate.
- */
-#if !defined(THREAD_EXT_EXIT) || defined(__DOXYGEN__)
 #define THREAD_EXT_EXIT(tp) {                                           \
   /* Add threads finalization code here.*/                              \
 }
-#endif
 
-/**
- * @brief   Idle Loop hook.
- * @details This hook is continuously invoked by the idle thread loop.
- */
-#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
 #define IDLE_LOOP_HOOK() {                                              \
   /* Idle loop code here.*/                                             \
 }
-#endif
-
-/*===========================================================================*/
-/* Port-specific settings (override port settings defaulted in chcore.h).    */
-/*===========================================================================*/
 
 #endif  /* _CHCONF_H_ */
-
-/** @} */
index 2acbbff..cc4c1fe 100644 (file)
@@ -44,8 +44,9 @@ extern int verify_pso_admin (uint8_t *pw, int pw_len);
 
 extern void write_res_apdu (const uint8_t *p, int len,
                            uint8_t sw1, uint8_t sw2);
-#define DEBUG 1
 
 extern int gpg_do_table_init (void);
 extern void gpg_do_get_data (uint16_t tag);
 extern void gpg_do_put_data (uint16_t tag, uint8_t *data, int len);
+
+extern uint8_t * flash_do_write (uint16_t tag, uint8_t *data, int len);
diff --git a/src/gpg-do.c b/src/gpg-do.c
deleted file mode 100644 (file)
index 16e661c..0000000
+++ /dev/null
@@ -1,729 +0,0 @@
-/*
- * gpg-do.c -- OpenPGP card Data Objects (DO) handling
- *
- * Copyright (C) 2010 Free Software Initiative of Japan
- * Author: NIIBE Yutaka <gniibe@fsij.org>
- *
- * This file is a part of Gnuk, a GnuPG USB Token implementation.
- *
- * Gnuk 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.
- *
- * Gnuk 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 <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "ch.h"
-#include "gnuk.h"
-
-/*
- * Compile time vars:
- *   AID, Historical Bytes (template), Extended Capabilities,
- *   and Algorithm Attributes
- */
-
-/* AID */
-static const uint8_t const aid[] __attribute__ ((aligned (1))) = {
-  16,
-  0xd2, 0x76, 0x00, 0x01, 0x24, 0x01,
-  0x02, 0x00,                  /* Version 2.0 */
-  0xf5, 0x17,                  /* Manufacturer (FSIJ) */
-  0x00, 0x00, 0x00, 0x01,      /* Serial */
-  0x00, 0x00
-};
-
-/* Historical Bytes (template) */
-static const uint8_t const historical_bytes[] __attribute__ ((aligned (1))) = {
-  10,
-  0x00,
-  0x31, 0x80,                  /* Full DF name */
-  0x73,
-  0x80, 0x01, 0x40,            /* Full DF name */
-                               /* 1-byte */
-                               /* No command chaining */
-                               /* Extended Lc and Le */
-  0x00, 0x90, 0x00             /* Status info (no life cycle management) */
-};
-
-/* Extended Capabilities */
-static const uint8_t const extended_capabilities[] __attribute__ ((aligned (1))) = {
-  10,
-  0x30,                                /*
-                                * No SM, No get challenge,
-                                * Key import supported,
-                                * PW status byte can be put,
-                                * No private_use_DO,
-                                * No algo change allowed
-                                */
-  0,             /* Secure Messaging Algorithm: N/A (TDES=0, AES=1) */
-  0x00, 0x00,    /* Max get challenge */
-  0x00, 0x00,    /* max. length of cardholder certificate */
-  (MAX_CMD_APDU_SIZE>>8), (MAX_CMD_APDU_SIZE&0xff), /* Max. length of command data */
-  (MAX_RES_APDU_SIZE>>8), (MAX_RES_APDU_SIZE&0xff), /* Max. length of response data */
-};
-
-/* Algorithm Attributes */
-static const uint8_t const algorithm_attr[] __attribute__ ((aligned (1))) = {
-  6,
-  0x01, /* RSA */
-  0x08, 0x00,        /* Length modulus (in bit): 2048 */
-  0x00, 0x20,        /* Length exponent (in bit): 32  */
-  0x00               /* 0: p&q , 3: CRT with N (not yet supported) */
-};
-
-
-
-#define SIZE_PW_STATUS_BYTES 7
-#if 0
-{
-  1,                           /* PW1 valid for several PSO:CDS commands */
-  127, 127, 127,               /* max length of PW1, RC, and PW3 */
-  3, 0, 3                      /* Error counter of PW1, RC, and PW3 */
-};
-#endif
-
-#define SIZE_DIGITAL_SIGNATURE_COUNTER 3
-#if 0
-{
-  0, 0, 0                      /* 3-byte binary */
-};
-#endif
-
-#define SIZE_FINGER_PRINT 20
-#define SIZE_KEYGEN_TIME 4     /* RFC4880 */
-
-/* Runtime vars: PSO */
-
-struct key_store {
-  uint8_t p[128];
-  uint8_t q[128];
-};
-
-static struct key_store key_sig, key_dec, key_aut;
-
-#define HASH_SIZE 20
-static uint8_t pw3_hash[HASH_SIZE];
-
-enum do_type {
-  DO_FIXED,
-  DO_VAR,
-  DO_CN_READ,
-  DO_PROC_READ,
-  DO_PROC_WRITE,
-  DO_HASH,
-  DO_KEYPTR
-};
-
-struct do_table_entry {
-  uint16_t tag;
-  enum do_type do_type;
-  uint8_t ac_read;
-  uint8_t ac_write;
-  const void *obj;
-};
-
-static uint8_t *res_p;
-static int with_tag;
-
-static void copy_do_1 (uint16_t tag, const uint8_t *do_data);
-static struct do_table_entry *get_do_entry (uint16_t tag);
-
-#define GNUK_DO_KEYPTR_SIG 0xff01
-#define GNUK_DO_KEYPTR_DEC 0xff02
-#define GNUK_DO_KEYPTR_AUT 0xff03
-#define GNUK_DO_HASH_PW3   0xff04
-
-#define GPG_DO_AID             0x004f
-#define GPG_DO_NAME            0x005b
-#define GPG_DO_LOGIN_DATA      0x005e
-#define GPG_DO_CH_DATA         0x0065
-#define GPG_DO_APP_DATA                0x006e
-/* XXX: 0x0073 ??? */
-#define GPG_DO_SS_TEMP         0x007a
-#define GPG_DO_DS_COUNT                0x0093
-#define GPG_DO_EXTCAP          0x00c0
-#define GPG_DO_ALG_SIG         0x00c1
-#define GPG_DO_ALG_DEC         0x00c2
-#define GPG_DO_ALG_AUT         0x00c3
-#define GPG_DO_PW_STATUS       0x00c4
-#define GPG_DO_FP_ALL          0x00c5
-#define GPG_DO_CAFP_ALL                0x00c6
-#define GPG_DO_FP_SIG          0x00c7
-#define GPG_DO_FP_DEC          0x00c8
-#define GPG_DO_FP_AUT          0x00c9
-#define GPG_DO_CAFP_1          0x00ca
-#define GPG_DO_CAFP_2          0x00cb
-#define GPG_DO_CAFP_3          0x00cc
-#define GPG_DO_KGTIME_ALL      0x00cd
-#define GPG_DO_KGTIME_SIG      0x00ce
-#define GPG_DO_KGTIME_DEC      0x00cf
-#define GPG_DO_KGTIME_AUT      0x00d0
-#define GPG_DO_RESETTING_CODE  0x00d3
-#define GPG_DO_KEY_IMPORT      0x3fff
-#define GPG_DO_LANGUAGE                0x5f2d
-#define GPG_DO_SEX             0x5f35
-#define GPG_DO_URL             0x5f50
-#define GPG_DO_HIST_BYTES      0x5f52
-#define GPG_DO_CH_CERTIFICATE  0x7f21
-
-static void
-copy_tag (uint16_t tag)
-{
-  if (tag < 0x0100)
-    *res_p++ = (tag & 0xff);
-  else
-    {
-      *res_p++ = (tag >> 8);
-      *res_p++ = (tag & 0xff);
-    }
-}
-
-static void
-do_hist_bytes (uint16_t tag)
-{
-  /* XXX: For now, no life cycle management, just return template as is. */
-  /* XXX: Supporing TERMINATE DF / ACTIVATE FILE, we need to fix here */
-  copy_do_1 (tag, historical_bytes);
-}
-
-#define SIZE_FP 20
-#define SIZE_KGTIME 4
-
-static void
-do_fp_all (uint16_t tag)
-{
-  struct do_table_entry *do_p;
-  const uint8_t *do_data;
-
-  if (with_tag)
-    {
-      copy_tag (tag);
-      *res_p++ = SIZE_FP*3;
-    }
-
-  do_p = get_do_entry (GPG_DO_FP_SIG);
-  do_data = (const uint8_t *)do_p->obj;
-  if (do_data)
-    memcpy (res_p, &do_data[1], SIZE_FP);
-  else
-    memset (res_p, 0, SIZE_FP);
-  res_p += SIZE_FP;
-
-  do_p = get_do_entry (GPG_DO_FP_DEC);
-  do_data = (const uint8_t *)do_p->obj;
-  if (do_data)
-    memcpy (res_p, &do_data[1], SIZE_FP);
-  else
-    memset (res_p, 0, SIZE_FP);
-  res_p += SIZE_FP;
-
-  do_p = get_do_entry (GPG_DO_FP_AUT);
-  do_data = (const uint8_t *)do_p->obj;
-  if (do_data)
-    memcpy (res_p, &do_data[1], SIZE_FP);
-  else
-    memset (res_p, 0, SIZE_FP);
-  res_p += SIZE_FP;
-}
-
-static void
-do_cafp_all (uint16_t tag)
-{
-  struct do_table_entry *do_p;
-  const uint8_t *do_data;
-
-  if (with_tag)
-    {
-      copy_tag (tag);
-      *res_p++ = SIZE_FP*3;
-    }
-
-  do_p = get_do_entry (GPG_DO_CAFP_1);
-  do_data = (const uint8_t *)do_p->obj;
-  if (do_data)
-    memcpy (res_p, &do_data[1], SIZE_FP);
-  else
-    memset (res_p, 0, SIZE_FP);
-  res_p += SIZE_FP;
-
-  do_p = get_do_entry (GPG_DO_CAFP_2);
-  do_data = (const uint8_t *)do_p->obj;
-  if (do_data)
-    memcpy (res_p, &do_data[1], SIZE_FP);
-  else
-    memset (res_p, 0, SIZE_FP);
-  res_p += SIZE_FP;
-
-  do_p = get_do_entry (GPG_DO_CAFP_3);
-  do_data = (const uint8_t *)do_p->obj;
-  if (do_data)
-    memcpy (res_p, &do_data[1], SIZE_FP);
-  else
-    memset (res_p, 0, SIZE_FP);
-  res_p += SIZE_FP;
-}
-
-static void
-do_kgtime_all (uint16_t tag)
-{
-  struct do_table_entry *do_p;
-  const uint8_t *do_data;
-
-  if (with_tag)
-    {
-      copy_tag (tag);
-      *res_p++ = SIZE_KGTIME*3;
-    }
-
-  do_p = get_do_entry (GPG_DO_KGTIME_SIG);
-  do_data = (const uint8_t *)do_p->obj;
-  if (do_data)
-    memcpy (res_p, &do_data[1], SIZE_KGTIME);
-  else
-    memset (res_p, 0, SIZE_KGTIME);
-  res_p += SIZE_KGTIME;
-
-  do_p = get_do_entry (GPG_DO_KGTIME_DEC);
-  do_data = (const uint8_t *)do_p->obj;
-  if (do_data)
-    memcpy (res_p, &do_data[1], SIZE_KGTIME);
-  else
-    memset (res_p, 0, SIZE_KGTIME);
-  res_p += SIZE_KGTIME;
-
-  do_p = get_do_entry (GPG_DO_KGTIME_AUT);
-  do_data = (const uint8_t *)do_p->obj;
-  if (do_data)
-    memcpy (res_p, &do_data[1], SIZE_KGTIME);
-  else
-    memset (res_p, 0, SIZE_KGTIME);
-  res_p += SIZE_KGTIME;
-}
-
-static void
-put_hex (uint8_t nibble)
-{
-  uint8_t c;
-
-  if (nibble < 0x0a)
-    c = '0' + nibble;
-  else
-    c = 'a' + nibble - 0x0a;
-
-  _write (&c, 1);
-}
-
-static void
-o_put_byte (uint8_t b)
-{
-  _write (" ", 1);
-  put_hex (b >> 4);
-  put_hex (b &0x0f);
-}
-
-/*
- * 4d, xx, xx:    Extended Header List
- *   b6 00 (SIG) / b8 00 (DEC) / a4 00 (AUT)
- *   7f48, xx: cardholder private key template
- *       91 xx
- *       92 xx
- *       93 xx
- *   5f48, xx: cardholder privatge key
- */
-static void
-proc_key_import (uint16_t tag, uint8_t *data, int len)
-{
-  int i;
-
-  for (i = 0; i < len; i++)
-    {
-      o_put_byte (data[i]);
-      if ((i & 0x0f) == 0x0f)
-       _write ("\r\n", 2);
-    }
-  _write ("\r\n", 2);
-
-  write_res_apdu (NULL, 0, 0x65, 0x81); /* memory failure */
-}
-
-static const uint16_t const cn_ch_data[] = {
-  3,
-  GPG_DO_NAME,
-  GPG_DO_LANGUAGE,
-  GPG_DO_SEX,
-};
-
-static const uint16_t const cn_app_data[] = {
-  10,
-  GPG_DO_AID,
-  GPG_DO_HIST_BYTES,
-  /* XXX Discretionary data objects 0x0073 ??? */
-  GPG_DO_EXTCAP,
-  GPG_DO_ALG_SIG, GPG_DO_ALG_DEC, GPG_DO_ALG_AUT,
-  GPG_DO_PW_STATUS,
-  GPG_DO_FP_ALL, GPG_DO_CAFP_ALL, GPG_DO_KGTIME_ALL
-};
-
-static const uint16_t const cn_ss_temp[] = { 1, GPG_DO_DS_COUNT };
-
-static struct do_table_entry
-gpg_do_table[] = {
-  /* Pseudo DO (private): not user accessible */
-  { GNUK_DO_KEYPTR_SIG, DO_KEYPTR, AC_NEVER, AC_NEVER, NULL },
-  { GNUK_DO_KEYPTR_DEC, DO_KEYPTR, AC_NEVER, AC_NEVER, NULL },
-  { GNUK_DO_KEYPTR_AUT, DO_KEYPTR, AC_NEVER, AC_NEVER, NULL },
-  { GNUK_DO_HASH_PW3, DO_HASH, AC_NEVER, AC_NEVER, NULL },
-  /* Pseudo DO: calculated */
-  { GPG_DO_HIST_BYTES, DO_PROC_READ, AC_ALWAYS, AC_NEVER, do_hist_bytes },
-  { GPG_DO_FP_ALL, DO_PROC_READ, AC_ALWAYS, AC_NEVER, do_fp_all },
-  { GPG_DO_CAFP_ALL, DO_PROC_READ, AC_ALWAYS, AC_NEVER, do_cafp_all },
-  { GPG_DO_KGTIME_ALL, DO_PROC_READ, AC_ALWAYS, AC_NEVER, do_kgtime_all },
-  /* Fixed data */
-  { GPG_DO_AID, DO_FIXED, AC_ALWAYS, AC_NEVER, aid },
-  { GPG_DO_EXTCAP, DO_FIXED, AC_ALWAYS, AC_NEVER, extended_capabilities },
-  { GPG_DO_ALG_SIG, DO_FIXED, AC_ALWAYS, AC_NEVER, algorithm_attr },
-  { GPG_DO_ALG_DEC, DO_FIXED, AC_ALWAYS, AC_NEVER, algorithm_attr },
-  { GPG_DO_ALG_AUT, DO_FIXED, AC_ALWAYS, AC_NEVER, algorithm_attr },
-  /* Variable(s): Fixed size, not changeable by user */
-  { GPG_DO_DS_COUNT, DO_VAR, AC_ALWAYS, AC_NEVER, NULL },
-  /* Variables: Fixed size */
-  { GPG_DO_PW_STATUS, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  { GPG_DO_SEX, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  { GPG_DO_FP_SIG, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  { GPG_DO_FP_DEC, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  { GPG_DO_FP_AUT, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  { GPG_DO_CAFP_1, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  { GPG_DO_CAFP_2, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  { GPG_DO_CAFP_3, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  { GPG_DO_KGTIME_SIG, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  { GPG_DO_KGTIME_DEC, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  { GPG_DO_KGTIME_AUT, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  /* Variables: Variable size */
-  { GPG_DO_LOGIN_DATA, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  { GPG_DO_URL, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  { GPG_DO_NAME, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  { GPG_DO_LANGUAGE, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  { GPG_DO_CH_CERTIFICATE, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
-  /* Variable(s): Variable size, write only by user */
-  { GPG_DO_RESETTING_CODE, DO_VAR, AC_NEVER, AC_ADMIN_AUTHORIZED, NULL },
-  /* Compound data: Read access only */
-  { GPG_DO_CH_DATA, DO_CN_READ, AC_ALWAYS, AC_NEVER, cn_ch_data },
-  { GPG_DO_APP_DATA, DO_CN_READ, AC_ALWAYS, AC_NEVER, cn_app_data },
-  { GPG_DO_SS_TEMP, DO_CN_READ, AC_ALWAYS, AC_NEVER, cn_ss_temp },
-  /* Compound data: Write access only*/
-  { GPG_DO_KEY_IMPORT, DO_PROC_WRITE, AC_NEVER, AC_ADMIN_AUTHORIZED,
-    proc_key_import },
-};
-
-#define NUM_DO_ENTRIES (int)(sizeof (gpg_do_table) / sizeof (struct do_table_entry))
-
-extern const uint8_t const do_5e[];
-extern const uint8_t const do_c4[];
-extern const uint8_t const do_c7[];
-extern const uint8_t const do_ca[];
-extern const uint8_t const do_ce[];
-extern const uint8_t const do_5b[];
-extern const uint8_t const do_5f2d[];
-extern const uint8_t const do_5f35[];
-extern const uint8_t const do_93[];
-extern const uint8_t const do_5f50[];
-
-/*
- * Initialize GPG_DO_TABLE reading from Flash ROM
- */
-int
-gpg_do_table_init (void)
-{
-  struct do_table_entry *do_p;
-
-  do_p = get_do_entry (GPG_DO_LOGIN_DATA);
-  do_p->obj = do_5e;
-  do_p = get_do_entry (GPG_DO_PW_STATUS);
-  do_p->obj = do_c4;
-#if 0
-  do_p = get_do_entry (GPG_DO_FP_SIG);
-  do_p->obj = do_c7;
-  do_p = get_do_entry (GPG_DO_CAFP_1);
-  do_p->obj = do_ca;
-  do_p = get_do_entry (GPG_DO_KGTIME_SIG);
-  do_p->obj = do_ce;
-#endif
-  do_p = get_do_entry (GPG_DO_NAME);
-  do_p->obj = do_5b;
-  do_p = get_do_entry (GPG_DO_LANGUAGE);
-  do_p->obj = do_5f2d;
-  do_p = get_do_entry (GPG_DO_SEX);
-  do_p->obj = do_5f35;
-  do_p = get_do_entry (GPG_DO_DS_COUNT);
-  do_p->obj = do_93;
-  do_p = get_do_entry (GPG_DO_URL);
-  do_p->obj = do_5f50;
-
-  return 0;
-}
-
-static struct do_table_entry *
-get_do_entry (uint16_t tag)
-{
-  int i;
-
-  for (i = 0; i < NUM_DO_ENTRIES; i++)
-    if (gpg_do_table[i].tag == tag)
-      return &gpg_do_table[i];
-
-  return NULL;
-}
-
-static void
-copy_do_1 (uint16_t tag, const uint8_t *do_data)
-{
-  int len;
-
-  if (with_tag)
-    {
-      copy_tag (tag);
-
-      if (do_data[0] < 127)
-       len = do_data[0] + 1;
-      else if (do_data[1] == 0x81)
-       len = do_data[1] + 2;
-      else                             /* 0x82 */
-       len = ((do_data[1] << 8) | do_data[2]) + 3;
-    }
-  else
-    {
-      if (do_data[0] < 127)
-       {
-         len = do_data[0];
-         do_data++;
-       }
-      else if (do_data[1] == 0x81)
-       {
-         len = do_data[1];
-         do_data += 2;
-       }
-      else                             /* 0x82 */
-       {
-         len = ((do_data[1] << 8) | do_data[2]);
-         do_data += 3;
-       }
-    }
-
-  memcpy (res_p, do_data, len);
-  res_p += len;
-}
-
-static int
-copy_do (struct do_table_entry *do_p)
-{
-  if (do_p == NULL)
-    return 0;
-
-  if (ac_check_status (do_p->ac_read) == 0)
-    return -1;
-
-  switch (do_p->do_type)
-    {
-    case DO_FIXED:
-    case DO_VAR:
-      {
-       const uint8_t *do_data = (const uint8_t *)do_p->obj;
-       if (do_data == NULL)
-         return 0;
-       else
-         copy_do_1 (do_p->tag, do_data);
-       break;
-      }
-    case DO_CN_READ:
-      {
-       int i;
-       const uint16_t *cn_data = (const uint16_t *)do_p->obj;
-       int num_components = cn_data[0];
-       uint8_t *len_p;
-
-       copy_tag (do_p->tag);
-       *res_p++ = 0x81;
-       len_p = res_p;
-       *res_p++ = 0;           /* for now */
-       with_tag = 1;
-
-       for (i = 0; i < num_components; i++)
-         {
-           uint16_t tag0;
-           struct do_table_entry *do0_p;
-
-           tag0 = cn_data[i+1];
-           do0_p = get_do_entry (tag0);
-           if (copy_do (do0_p) < 0)
-             return -1;
-         }
-
-       *len_p = (res_p - len_p);
-       break;
-      }
-    case DO_PROC_READ:
-      {
-       void (*do_func)(uint16_t) = (void (*)(uint16_t))do_p->obj;
-
-       do_func (do_p->tag);
-       break;
-      }
-    case DO_PROC_WRITE:
-    case DO_HASH:
-    case DO_KEYPTR:
-      return -1;
-    }
-
-  return 1;
-}
-
-/*
- * Process GET_DATA request on Data Object specified by TAG
- *   Call write_res_adpu to fill data returned
- */
-void
-gpg_do_get_data (uint16_t tag)
-{
-  struct do_table_entry *do_p = get_do_entry (tag);
-
-  res_p = res_APDU;
-  with_tag = 0;
-
-#ifdef DEBUG
-  put_string ("   ");
-  put_short (tag);
-#endif
-
-  if (do_p)
-    {
-      if (copy_do (do_p) < 0)
-       /* Overwrite partially written result  */
-       write_res_apdu (NULL, 0, 0x69, 0x82);
-      else
-       {
-         *res_p++ = 0x90;
-         *res_p++ = 0x00;
-         res_APDU_size = res_p - res_APDU;
-       }
-    }
-  else
-    /* No record */
-      write_res_apdu (NULL, 0, 0x6a, 0x88);
-}
-
-uint8_t *
-flash_do_write (uint16_t tag, uint8_t *data, int len)
-{
-  static uint8_t do_pool[1024];
-  static uint8_t *last_p = do_pool;
-  uint8_t *p = last_p;
-
-  if (last_p - do_pool + len + 2 + 3 > 1024)
-    return NULL;
-
-  *last_p++ = (tag >> 8);
-  *last_p++ = (tag & 0xff);
-  if (len < 128)
-    *last_p++ = len;
-  else if (len < 256)
-    {
-      *last_p++ = 0x81;
-      *last_p++ = len;
-    }
-  else
-    {
-      *last_p++ = 0x82;
-      *last_p++ = (len >> 8);
-      *last_p++ = (len & 0xff);
-    }
-  memcpy (last_p, data, len);
-  last_p += len;
-
-  return p + 2;
-}
-
-void
-gpg_do_put_data (uint16_t tag, uint8_t *data, int len)
-{
-  struct do_table_entry *do_p = get_do_entry (tag);
-
-#ifdef DEBUG
-  put_string ("   ");
-  put_short (tag);
-#endif
-
-  if (do_p)
-    {
-      if (ac_check_status (do_p->ac_write) == 0)
-       {
-         write_res_apdu (NULL, 0, 0x69, 0x82);
-         return;
-       }
-
-      switch (do_p->do_type)
-       {
-       case DO_FIXED:
-       case DO_CN_READ:
-       case DO_PROC_READ:
-       case DO_HASH:
-       case DO_KEYPTR:
-         write_res_apdu (NULL, 0, 0x69, 0x82);
-         break;
-       case DO_VAR:
-         {
-#if 0
-           const uint8_t *do_data = (const uint8_t *)do_p->obj;
-
-           flash_do_release (do_data);
-#endif
-           if (tag == GPG_DO_PW_STATUS)
-             {
-               /* XXX: only the first byte can be changed */
-             }
-           else
-             {
-               if (len == 0)
-                 /* make DO empty */
-                 do_p->obj = NULL;
-               else
-                 {
-                   do_p->obj = flash_do_write (tag, data, len);
-                   if (do_p->obj)
-                     write_res_apdu (NULL, 0, 0x90, 0x00); /* success */
-                   else
-                     write_res_apdu (NULL, 0, 0x65, 0x81); /* memory failure */
-                 }
-             }
-
-           /*
-            *
-            */
-           if (tag == GPG_DO_RESETTING_CODE)
-             {
-               /* XXX: Changing Resetting code,
-                * we need to reset RC counter in GPG_DO_PW_STATUS */
-             }
-           break;
-         }
-       case DO_PROC_WRITE:
-         {
-           void (*proc_func)(uint16_t, uint8_t *, int)
-             = (void (*)(uint16_t, uint8_t *, int))do_p->obj;
-
-           proc_func (tag, data, len);
-           break;
-         }
-       }
-    }
-  else
-    /* No record */
-    write_res_apdu (NULL, 0, 0x6a, 0x88);
-}
index 40b1798..58f7cd1 100644 (file)
-/*
-    ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio.
-
-    This file is part of ChibiOS/RT.
-
-    ChibiOS/RT 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.
-
-    ChibiOS/RT 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 <http://www.gnu.org/licenses/>.
-
-                                      ---
-
-    A special exception to the GPL can be applied should you wish to distribute
-    a combined work that includes ChibiOS/RT, without being obliged to provide
-    the source code for any proprietary components. See the file exception.txt
-    for full details of how and when the exception can be applied.
-*/
-
-/**
- * @file templates/halconf.h
- * @brief HAL configuration header.
- * @addtogroup HAL_CONF
- * @{
- */
-
-/*
- * HAL configuration file, this file allows to enable or disable the various
- * device drivers from your application. You may also use this file in order
- * to override the device drivers default settings.
- */
+/* HAL configuration file for ChibiOS/RT */
 
 #ifndef _HALCONF_H_
 #define _HALCONF_H_
 
-/*
- * Uncomment the following line in order to include a mcu-related
- * settings file. This file can be used to include platform specific
- * header files or to override the low level drivers settings.
- */
 #include "mcuconf.h"
 
-/*===========================================================================*/
-/* PAL driver related settings.                                              */
-/*===========================================================================*/
-
-/**
- * @brief Enables the PAL subsystem.
- */
-#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__)
 #define CH_HAL_USE_PAL              TRUE
-#endif
-
-/*===========================================================================*/
-/* ADC driver related settings.                                              */
-/*===========================================================================*/
-
-/**
- * @brief Enables the ADC subsystem.
- */
-#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__)
 #define CH_HAL_USE_ADC              FALSE
-#endif
-
-/*===========================================================================*/
-/* CAN driver related settings.                                              */
-/*===========================================================================*/
-
-/**
- * @brief Enables the CAN subsystem.
- */
-#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__)
 #define CH_HAL_USE_CAN              FALSE
-#endif
-
-/*===========================================================================*/
-/* MAC driver related settings.                                              */
-/*===========================================================================*/
-
-/**
- * @brief Enables the MAC subsystem.
- */
-#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__)
 #define CH_HAL_USE_MAC              FALSE
-#endif
-
-/*===========================================================================*/
-/* PWM driver related settings.                                              */
-/*===========================================================================*/
-
-/**
- * @brief Enables the PWM subsystem.
- */
-#if !defined(CH_HAL_USE_PWM) || defined(__DOXYGEN__)
 #define CH_HAL_USE_PWM              FALSE
-#endif
-
-/*===========================================================================*/
-/* SERIAL driver related settings.                                           */
-/*===========================================================================*/
-
-/**
- * @brief Enables the SERIAL subsystem.
- */
-#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__)
-#define CH_HAL_USE_SERIAL           TRUE
-#endif
-
-/*
- * Default SERIAL settings overrides (uncomment to override).
- */
-/*#define SERIAL_DEFAULT_BITRATE      38400*/
-/*#define SERIAL_BUFFERS_SIZE         64*/
-
-/*===========================================================================*/
-/* SPI driver related settings.                                              */
-/*===========================================================================*/
-
-/**
- * @brief Enables the SPI subsystem.
- */
-#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__)
+#define CH_HAL_USE_SERIAL           FALSE
 #define CH_HAL_USE_SPI              FALSE
-#endif
-
-/*
- * Default SPI settings overrides (uncomment to override).
- */
-/*#define SPI_USE_MUTUAL_EXCLUSION    TRUE*/
-
-/*===========================================================================*/
-/* MMC_SPI driver related settings.                                          */
-/*===========================================================================*/
-
-/**
- * @brief Enables the MMC_SPI subsystem.
- */
-#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
 #define CH_HAL_USE_MMC_SPI          FALSE
-#endif
-
-/*
- * Default MMC_SPI settings overrides (uncomment to override).
- */
-/*#define MMC_SECTOR_SIZE             512*/
-/*#define MMC_NICE_WAITING            TRUE*/
-/*#define MMC_POLLING_INTERVAL        10*/
-/*#define MMC_POLLING_DELAY           10*/
 
 #endif /* _HALCONF_H_ */
-
-/** @} */
index c0153c0..8b762f9 100644 (file)
@@ -1,3 +1,10 @@
+/* Hardware specific USB functions */
+/*
+ * For detail, please see the documentation of 
+ * STM32F10x USB Full Speed Device Library (USB-FS-Device_Lib)
+ * by STMicroelectronics' MCD Application Team
+ */
+
 #include "ch.h"
 #include "hal.h"
 
index 0e823de..c39d324 100644 (file)
@@ -1,28 +1,25 @@
 /*
-    ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio.
-
-    This file is part of ChibiOS/RT.
-
-    ChibiOS/RT 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.
-
-    ChibiOS/RT 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 <http://www.gnu.org/licenses/>.
-
-                                      ---
-
-    A special exception to the GPL can be applied should you wish to distribute
-    a combined work that includes ChibiOS/RT, without being obliged to provide
-    the source code for any proprietary components. See the file exception.txt
-    for full details of how and when the exception can be applied.
-*/
+ * main.c - main routine of Gnuk
+ *
+ * Copyright (C) 2010 Free Software Initiative of Japan
+ * Author: NIIBE Yutaka <gniibe@fsij.org>
+ *
+ * This file is a part of Gnuk, a GnuPG USB Token implementation.
+ *
+ * Gnuk 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.
+ *
+ * Gnuk 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 <http://www.gnu.org/licenses/>.
+ *
+ */
 
 #include "ch.h"
 #include "hal.h"
@@ -174,7 +171,8 @@ extern msg_t GPGthread (void *arg);
  * Entry point, note, the main() function is already a thread in the system
  * on entry.
  */
-int main(int argc, char **argv)
+int
+main (int argc, char **argv)
 {
   int count = 0;
 
diff --git a/src/openpgp-do.c b/src/openpgp-do.c
new file mode 100644 (file)
index 0000000..61d3504
--- /dev/null
@@ -0,0 +1,700 @@
+/*
+ * openpgp-do.c -- OpenPGP card Data Objects (DO) handling
+ *
+ * Copyright (C) 2010 Free Software Initiative of Japan
+ * Author: NIIBE Yutaka <gniibe@fsij.org>
+ *
+ * This file is a part of Gnuk, a GnuPG USB Token implementation.
+ *
+ * Gnuk 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.
+ *
+ * Gnuk 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 <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "config.h"
+
+#include "ch.h"
+#include "gnuk.h"
+
+/*
+ * Compile time vars:
+ *   AID, Historical Bytes (template), Extended Capabilities,
+ *   and Algorithm Attributes
+ */
+
+/* AID */
+static const uint8_t const aid[] __attribute__ ((aligned (1))) = {
+  16,
+  0xd2, 0x76, 0x00, 0x01, 0x24, 0x01,
+  0x02, 0x00,                  /* Version 2.0 */
+  0xf5, 0x17,                  /* Manufacturer (FSIJ) */
+  0x00, 0x00, 0x00, 0x01,      /* Serial */
+  0x00, 0x00
+};
+
+/* Historical Bytes (template) */
+static const uint8_t const historical_bytes[] __attribute__ ((aligned (1))) = {
+  10,
+  0x00,
+  0x31, 0x80,                  /* Full DF name */
+  0x73,
+  0x80, 0x01, 0x40,            /* Full DF name */
+                               /* 1-byte */
+                               /* No command chaining */
+                               /* Extended Lc and Le */
+  0x00, 0x90, 0x00             /* Status info (no life cycle management) */
+};
+
+/* Extended Capabilities */
+static const uint8_t const extended_capabilities[] __attribute__ ((aligned (1))) = {
+  10,
+  0x30,                                /*
+                                * No SM, No get challenge,
+                                * Key import supported,
+                                * PW status byte can be put,
+                                * No private_use_DO,
+                                * No algo change allowed
+                                */
+  0,             /* Secure Messaging Algorithm: N/A (TDES=0, AES=1) */
+  0x00, 0x00,    /* Max get challenge */
+  0x00, 0x00,    /* max. length of cardholder certificate */
+  (MAX_CMD_APDU_SIZE>>8), (MAX_CMD_APDU_SIZE&0xff), /* Max. length of command data */
+  (MAX_RES_APDU_SIZE>>8), (MAX_RES_APDU_SIZE&0xff), /* Max. length of response data */
+};
+
+/* Algorithm Attributes */
+static const uint8_t const algorithm_attr[] __attribute__ ((aligned (1))) = {
+  6,
+  0x01, /* RSA */
+  0x08, 0x00,        /* Length modulus (in bit): 2048 */
+  0x00, 0x20,        /* Length exponent (in bit): 32  */
+  0x00               /* 0: p&q , 3: CRT with N (not yet supported) */
+};
+
+
+
+#define SIZE_PW_STATUS_BYTES 7
+#if 0
+{
+  1,                           /* PW1 valid for several PSO:CDS commands */
+  127, 127, 127,               /* max length of PW1, RC, and PW3 */
+  3, 0, 3                      /* Error counter of PW1, RC, and PW3 */
+};
+#endif
+
+#define SIZE_DIGITAL_SIGNATURE_COUNTER 3
+#if 0
+{
+  0, 0, 0                      /* 3-byte binary */
+};
+#endif
+
+#define SIZE_FINGER_PRINT 20
+#define SIZE_KEYGEN_TIME 4     /* RFC4880 */
+
+/* Runtime vars: PSO */
+
+struct key_store {
+  uint8_t p[128];
+  uint8_t q[128];
+};
+
+static struct key_store key_sig, key_dec, key_aut;
+
+#define HASH_SIZE 20
+static uint8_t pw3_hash[HASH_SIZE];
+
+enum do_type {
+  DO_FIXED,
+  DO_VAR,
+  DO_CN_READ,
+  DO_PROC_READ,
+  DO_PROC_WRITE,
+  DO_HASH,
+  DO_KEYPTR
+};
+
+struct do_table_entry {
+  uint16_t tag;
+  enum do_type do_type;
+  uint8_t ac_read;
+  uint8_t ac_write;
+  const void *obj;
+};
+
+static uint8_t *res_p;
+static int with_tag;
+
+static void copy_do_1 (uint16_t tag, const uint8_t *do_data);
+static struct do_table_entry *get_do_entry (uint16_t tag);
+
+#define GNUK_DO_KEYPTR_SIG 0xff01
+#define GNUK_DO_KEYPTR_DEC 0xff02
+#define GNUK_DO_KEYPTR_AUT 0xff03
+#define GNUK_DO_HASH_PW3   0xff04
+
+#define GPG_DO_AID             0x004f
+#define GPG_DO_NAME            0x005b
+#define GPG_DO_LOGIN_DATA      0x005e
+#define GPG_DO_CH_DATA         0x0065
+#define GPG_DO_APP_DATA                0x006e
+/* XXX: 0x0073 ??? */
+#define GPG_DO_SS_TEMP         0x007a
+#define GPG_DO_DS_COUNT                0x0093
+#define GPG_DO_EXTCAP          0x00c0
+#define GPG_DO_ALG_SIG         0x00c1
+#define GPG_DO_ALG_DEC         0x00c2
+#define GPG_DO_ALG_AUT         0x00c3
+#define GPG_DO_PW_STATUS       0x00c4
+#define GPG_DO_FP_ALL          0x00c5
+#define GPG_DO_CAFP_ALL                0x00c6
+#define GPG_DO_FP_SIG          0x00c7
+#define GPG_DO_FP_DEC          0x00c8
+#define GPG_DO_FP_AUT          0x00c9
+#define GPG_DO_CAFP_1          0x00ca
+#define GPG_DO_CAFP_2          0x00cb
+#define GPG_DO_CAFP_3          0x00cc
+#define GPG_DO_KGTIME_ALL      0x00cd
+#define GPG_DO_KGTIME_SIG      0x00ce
+#define GPG_DO_KGTIME_DEC      0x00cf
+#define GPG_DO_KGTIME_AUT      0x00d0
+#define GPG_DO_RESETTING_CODE  0x00d3
+#define GPG_DO_KEY_IMPORT      0x3fff
+#define GPG_DO_LANGUAGE                0x5f2d
+#define GPG_DO_SEX             0x5f35
+#define GPG_DO_URL             0x5f50
+#define GPG_DO_HIST_BYTES      0x5f52
+#define GPG_DO_CH_CERTIFICATE  0x7f21
+
+static void
+copy_tag (uint16_t tag)
+{
+  if (tag < 0x0100)
+    *res_p++ = (tag & 0xff);
+  else
+    {
+      *res_p++ = (tag >> 8);
+      *res_p++ = (tag & 0xff);
+    }
+}
+
+static void
+do_hist_bytes (uint16_t tag)
+{
+  /* XXX: For now, no life cycle management, just return template as is. */
+  /* XXX: Supporing TERMINATE DF / ACTIVATE FILE, we need to fix here */
+  copy_do_1 (tag, historical_bytes);
+}
+
+#define SIZE_FP 20
+#define SIZE_KGTIME 4
+
+static void
+do_fp_all (uint16_t tag)
+{
+  struct do_table_entry *do_p;
+  const uint8_t *do_data;
+
+  if (with_tag)
+    {
+      copy_tag (tag);
+      *res_p++ = SIZE_FP*3;
+    }
+
+  do_p = get_do_entry (GPG_DO_FP_SIG);
+  do_data = (const uint8_t *)do_p->obj;
+  if (do_data)
+    memcpy (res_p, &do_data[1], SIZE_FP);
+  else
+    memset (res_p, 0, SIZE_FP);
+  res_p += SIZE_FP;
+
+  do_p = get_do_entry (GPG_DO_FP_DEC);
+  do_data = (const uint8_t *)do_p->obj;
+  if (do_data)
+    memcpy (res_p, &do_data[1], SIZE_FP);
+  else
+    memset (res_p, 0, SIZE_FP);
+  res_p += SIZE_FP;
+
+  do_p = get_do_entry (GPG_DO_FP_AUT);
+  do_data = (const uint8_t *)do_p->obj;
+  if (do_data)
+    memcpy (res_p, &do_data[1], SIZE_FP);
+  else
+    memset (res_p, 0, SIZE_FP);
+  res_p += SIZE_FP;
+}
+
+static void
+do_cafp_all (uint16_t tag)
+{
+  struct do_table_entry *do_p;
+  const uint8_t *do_data;
+
+  if (with_tag)
+    {
+      copy_tag (tag);
+      *res_p++ = SIZE_FP*3;
+    }
+
+  do_p = get_do_entry (GPG_DO_CAFP_1);
+  do_data = (const uint8_t *)do_p->obj;
+  if (do_data)
+    memcpy (res_p, &do_data[1], SIZE_FP);
+  else
+    memset (res_p, 0, SIZE_FP);
+  res_p += SIZE_FP;
+
+  do_p = get_do_entry (GPG_DO_CAFP_2);
+  do_data = (const uint8_t *)do_p->obj;
+  if (do_data)
+    memcpy (res_p, &do_data[1], SIZE_FP);
+  else
+    memset (res_p, 0, SIZE_FP);
+  res_p += SIZE_FP;
+
+  do_p = get_do_entry (GPG_DO_CAFP_3);
+  do_data = (const uint8_t *)do_p->obj;
+  if (do_data)
+    memcpy (res_p, &do_data[1], SIZE_FP);
+  else
+    memset (res_p, 0, SIZE_FP);
+  res_p += SIZE_FP;
+}
+
+static void
+do_kgtime_all (uint16_t tag)
+{
+  struct do_table_entry *do_p;
+  const uint8_t *do_data;
+
+  if (with_tag)
+    {
+      copy_tag (tag);
+      *res_p++ = SIZE_KGTIME*3;
+    }
+
+  do_p = get_do_entry (GPG_DO_KGTIME_SIG);
+  do_data = (const uint8_t *)do_p->obj;
+  if (do_data)
+    memcpy (res_p, &do_data[1], SIZE_KGTIME);
+  else
+    memset (res_p, 0, SIZE_KGTIME);
+  res_p += SIZE_KGTIME;
+
+  do_p = get_do_entry (GPG_DO_KGTIME_DEC);
+  do_data = (const uint8_t *)do_p->obj;
+  if (do_data)
+    memcpy (res_p, &do_data[1], SIZE_KGTIME);
+  else
+    memset (res_p, 0, SIZE_KGTIME);
+  res_p += SIZE_KGTIME;
+
+  do_p = get_do_entry (GPG_DO_KGTIME_AUT);
+  do_data = (const uint8_t *)do_p->obj;
+  if (do_data)
+    memcpy (res_p, &do_data[1], SIZE_KGTIME);
+  else
+    memset (res_p, 0, SIZE_KGTIME);
+  res_p += SIZE_KGTIME;
+}
+
+static void
+put_hex (uint8_t nibble)
+{
+  uint8_t c;
+
+  if (nibble < 0x0a)
+    c = '0' + nibble;
+  else
+    c = 'a' + nibble - 0x0a;
+
+  _write (&c, 1);
+}
+
+static void
+o_put_byte (uint8_t b)
+{
+  _write (" ", 1);
+  put_hex (b >> 4);
+  put_hex (b &0x0f);
+}
+
+/*
+ * 4d, xx, xx:    Extended Header List
+ *   b6 00 (SIG) / b8 00 (DEC) / a4 00 (AUT)
+ *   7f48, xx: cardholder private key template
+ *       91 xx
+ *       92 xx
+ *       93 xx
+ *   5f48, xx: cardholder privatge key
+ */
+static void
+proc_key_import (uint16_t tag, uint8_t *data, int len)
+{
+  int i;
+
+  for (i = 0; i < len; i++)
+    {
+      o_put_byte (data[i]);
+      if ((i & 0x0f) == 0x0f)
+       _write ("\r\n", 2);
+    }
+  _write ("\r\n", 2);
+
+  write_res_apdu (NULL, 0, 0x65, 0x81); /* memory failure */
+}
+
+static const uint16_t const cn_ch_data[] = {
+  3,
+  GPG_DO_NAME,
+  GPG_DO_LANGUAGE,
+  GPG_DO_SEX,
+};
+
+static const uint16_t const cn_app_data[] = {
+  10,
+  GPG_DO_AID,
+  GPG_DO_HIST_BYTES,
+  /* XXX Discretionary data objects 0x0073 ??? */
+  GPG_DO_EXTCAP,
+  GPG_DO_ALG_SIG, GPG_DO_ALG_DEC, GPG_DO_ALG_AUT,
+  GPG_DO_PW_STATUS,
+  GPG_DO_FP_ALL, GPG_DO_CAFP_ALL, GPG_DO_KGTIME_ALL
+};
+
+static const uint16_t const cn_ss_temp[] = { 1, GPG_DO_DS_COUNT };
+
+static struct do_table_entry
+gpg_do_table[] = {
+  /* Pseudo DO (private): not user accessible */
+  { GNUK_DO_KEYPTR_SIG, DO_KEYPTR, AC_NEVER, AC_NEVER, NULL },
+  { GNUK_DO_KEYPTR_DEC, DO_KEYPTR, AC_NEVER, AC_NEVER, NULL },
+  { GNUK_DO_KEYPTR_AUT, DO_KEYPTR, AC_NEVER, AC_NEVER, NULL },
+  { GNUK_DO_HASH_PW3, DO_HASH, AC_NEVER, AC_NEVER, NULL },
+  /* Pseudo DO: calculated */
+  { GPG_DO_HIST_BYTES, DO_PROC_READ, AC_ALWAYS, AC_NEVER, do_hist_bytes },
+  { GPG_DO_FP_ALL, DO_PROC_READ, AC_ALWAYS, AC_NEVER, do_fp_all },
+  { GPG_DO_CAFP_ALL, DO_PROC_READ, AC_ALWAYS, AC_NEVER, do_cafp_all },
+  { GPG_DO_KGTIME_ALL, DO_PROC_READ, AC_ALWAYS, AC_NEVER, do_kgtime_all },
+  /* Fixed data */
+  { GPG_DO_AID, DO_FIXED, AC_ALWAYS, AC_NEVER, aid },
+  { GPG_DO_EXTCAP, DO_FIXED, AC_ALWAYS, AC_NEVER, extended_capabilities },
+  { GPG_DO_ALG_SIG, DO_FIXED, AC_ALWAYS, AC_NEVER, algorithm_attr },
+  { GPG_DO_ALG_DEC, DO_FIXED, AC_ALWAYS, AC_NEVER, algorithm_attr },
+  { GPG_DO_ALG_AUT, DO_FIXED, AC_ALWAYS, AC_NEVER, algorithm_attr },
+  /* Variable(s): Fixed size, not changeable by user */
+  { GPG_DO_DS_COUNT, DO_VAR, AC_ALWAYS, AC_NEVER, NULL },
+  /* Variables: Fixed size */
+  { GPG_DO_PW_STATUS, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  { GPG_DO_SEX, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  { GPG_DO_FP_SIG, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  { GPG_DO_FP_DEC, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  { GPG_DO_FP_AUT, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  { GPG_DO_CAFP_1, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  { GPG_DO_CAFP_2, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  { GPG_DO_CAFP_3, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  { GPG_DO_KGTIME_SIG, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  { GPG_DO_KGTIME_DEC, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  { GPG_DO_KGTIME_AUT, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  /* Variables: Variable size */
+  { GPG_DO_LOGIN_DATA, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  { GPG_DO_URL, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  { GPG_DO_NAME, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  { GPG_DO_LANGUAGE, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  { GPG_DO_CH_CERTIFICATE, DO_VAR, AC_ALWAYS, AC_ADMIN_AUTHORIZED, NULL },
+  /* Variable(s): Variable size, write only by user */
+  { GPG_DO_RESETTING_CODE, DO_VAR, AC_NEVER, AC_ADMIN_AUTHORIZED, NULL },
+  /* Compound data: Read access only */
+  { GPG_DO_CH_DATA, DO_CN_READ, AC_ALWAYS, AC_NEVER, cn_ch_data },
+  { GPG_DO_APP_DATA, DO_CN_READ, AC_ALWAYS, AC_NEVER, cn_app_data },
+  { GPG_DO_SS_TEMP, DO_CN_READ, AC_ALWAYS, AC_NEVER, cn_ss_temp },
+  /* Compound data: Write access only*/
+  { GPG_DO_KEY_IMPORT, DO_PROC_WRITE, AC_NEVER, AC_ADMIN_AUTHORIZED,
+    proc_key_import },
+};
+
+#define NUM_DO_ENTRIES (int)(sizeof (gpg_do_table) / sizeof (struct do_table_entry))
+
+extern const uint8_t const do_5e[];
+extern const uint8_t const do_c4[];
+extern const uint8_t const do_c7[];
+extern const uint8_t const do_ca[];
+extern const uint8_t const do_ce[];
+extern const uint8_t const do_5b[];
+extern const uint8_t const do_5f2d[];
+extern const uint8_t const do_5f35[];
+extern const uint8_t const do_93[];
+extern const uint8_t const do_5f50[];
+
+/*
+ * Initialize GPG_DO_TABLE reading from Flash ROM
+ */
+int
+gpg_do_table_init (void)
+{
+  struct do_table_entry *do_p;
+
+  do_p = get_do_entry (GPG_DO_LOGIN_DATA);
+  do_p->obj = do_5e;
+  do_p = get_do_entry (GPG_DO_PW_STATUS);
+  do_p->obj = do_c4;
+#if 0
+  do_p = get_do_entry (GPG_DO_FP_SIG);
+  do_p->obj = do_c7;
+  do_p = get_do_entry (GPG_DO_CAFP_1);
+  do_p->obj = do_ca;
+  do_p = get_do_entry (GPG_DO_KGTIME_SIG);
+  do_p->obj = do_ce;
+#endif
+  do_p = get_do_entry (GPG_DO_NAME);
+  do_p->obj = do_5b;
+  do_p = get_do_entry (GPG_DO_LANGUAGE);
+  do_p->obj = do_5f2d;
+  do_p = get_do_entry (GPG_DO_SEX);
+  do_p->obj = do_5f35;
+  do_p = get_do_entry (GPG_DO_DS_COUNT);
+  do_p->obj = do_93;
+  do_p = get_do_entry (GPG_DO_URL);
+  do_p->obj = do_5f50;
+
+  return 0;
+}
+
+static struct do_table_entry *
+get_do_entry (uint16_t tag)
+{
+  int i;
+
+  for (i = 0; i < NUM_DO_ENTRIES; i++)
+    if (gpg_do_table[i].tag == tag)
+      return &gpg_do_table[i];
+
+  return NULL;
+}
+
+static void
+copy_do_1 (uint16_t tag, const uint8_t *do_data)
+{
+  int len;
+
+  if (with_tag)
+    {
+      copy_tag (tag);
+
+      if (do_data[0] < 127)
+       len = do_data[0] + 1;
+      else if (do_data[1] == 0x81)
+       len = do_data[1] + 2;
+      else                             /* 0x82 */
+       len = ((do_data[1] << 8) | do_data[2]) + 3;
+    }
+  else
+    {
+      if (do_data[0] < 127)
+       {
+         len = do_data[0];
+         do_data++;
+       }
+      else if (do_data[1] == 0x81)
+       {
+         len = do_data[1];
+         do_data += 2;
+       }
+      else                             /* 0x82 */
+       {
+         len = ((do_data[1] << 8) | do_data[2]);
+         do_data += 3;
+       }
+    }
+
+  memcpy (res_p, do_data, len);
+  res_p += len;
+}
+
+static int
+copy_do (struct do_table_entry *do_p)
+{
+  if (do_p == NULL)
+    return 0;
+
+  if (ac_check_status (do_p->ac_read) == 0)
+    return -1;
+
+  switch (do_p->do_type)
+    {
+    case DO_FIXED:
+    case DO_VAR:
+      {
+       const uint8_t *do_data = (const uint8_t *)do_p->obj;
+       if (do_data == NULL)
+         return 0;
+       else
+         copy_do_1 (do_p->tag, do_data);
+       break;
+      }
+    case DO_CN_READ:
+      {
+       int i;
+       const uint16_t *cn_data = (const uint16_t *)do_p->obj;
+       int num_components = cn_data[0];
+       uint8_t *len_p;
+
+       copy_tag (do_p->tag);
+       *res_p++ = 0x81;
+       len_p = res_p;
+       *res_p++ = 0;           /* for now */
+       with_tag = 1;
+
+       for (i = 0; i < num_components; i++)
+         {
+           uint16_t tag0;
+           struct do_table_entry *do0_p;
+
+           tag0 = cn_data[i+1];
+           do0_p = get_do_entry (tag0);
+           if (copy_do (do0_p) < 0)
+             return -1;
+         }
+
+       *len_p = (res_p - len_p);
+       break;
+      }
+    case DO_PROC_READ:
+      {
+       void (*do_func)(uint16_t) = (void (*)(uint16_t))do_p->obj;
+
+       do_func (do_p->tag);
+       break;
+      }
+    case DO_PROC_WRITE:
+    case DO_HASH:
+    case DO_KEYPTR:
+      return -1;
+    }
+
+  return 1;
+}
+
+/*
+ * Process GET_DATA request on Data Object specified by TAG
+ *   Call write_res_adpu to fill data returned
+ */
+void
+gpg_do_get_data (uint16_t tag)
+{
+  struct do_table_entry *do_p = get_do_entry (tag);
+
+  res_p = res_APDU;
+  with_tag = 0;
+
+#ifdef DEBUG
+  put_string ("   ");
+  put_short (tag);
+#endif
+
+  if (do_p)
+    {
+      if (copy_do (do_p) < 0)
+       /* Overwrite partially written result  */
+       write_res_apdu (NULL, 0, 0x69, 0x82);
+      else
+       {
+         *res_p++ = 0x90;
+         *res_p++ = 0x00;
+         res_APDU_size = res_p - res_APDU;
+       }
+    }
+  else
+    /* No record */
+      write_res_apdu (NULL, 0, 0x6a, 0x88);
+}
+
+void
+gpg_do_put_data (uint16_t tag, uint8_t *data, int len)
+{
+  struct do_table_entry *do_p = get_do_entry (tag);
+
+#ifdef DEBUG
+  put_string ("   ");
+  put_short (tag);
+#endif
+
+  if (do_p)
+    {
+      if (ac_check_status (do_p->ac_write) == 0)
+       {
+         write_res_apdu (NULL, 0, 0x69, 0x82);
+         return;
+       }
+
+      switch (do_p->do_type)
+       {
+       case DO_FIXED:
+       case DO_CN_READ:
+       case DO_PROC_READ:
+       case DO_HASH:
+       case DO_KEYPTR:
+         write_res_apdu (NULL, 0, 0x69, 0x82);
+         break;
+       case DO_VAR:
+         {
+#if 0
+           const uint8_t *do_data = (const uint8_t *)do_p->obj;
+
+           flash_do_release (do_data);
+#endif
+           if (tag == GPG_DO_PW_STATUS)
+             {
+               /* XXX: only the first byte can be changed */
+             }
+           else
+             {
+               if (len == 0)
+                 /* make DO empty */
+                 do_p->obj = NULL;
+               else
+                 {
+                   do_p->obj = flash_do_write (tag, data, len);
+                   if (do_p->obj)
+                     write_res_apdu (NULL, 0, 0x90, 0x00); /* success */
+                   else
+                     write_res_apdu (NULL, 0, 0x65, 0x81); /* memory failure */
+                 }
+             }
+
+           /*
+            *
+            */
+           if (tag == GPG_DO_RESETTING_CODE)
+             {
+               /* XXX: Changing Resetting code,
+                * we need to reset RC counter in GPG_DO_PW_STATUS */
+             }
+           break;
+         }
+       case DO_PROC_WRITE:
+         {
+           void (*proc_func)(uint16_t, uint8_t *, int)
+             = (void (*)(uint16_t, uint8_t *, int))do_p->obj;
+
+           proc_func (tag, data, len);
+           break;
+         }
+       }
+    }
+  else
+    /* No record */
+    write_res_apdu (NULL, 0, 0x6a, 0x88);
+}
diff --git a/src/rsa-sign.c b/src/rsa-sign.c
new file mode 100644 (file)
index 0000000..7f129ed
--- /dev/null
@@ -0,0 +1,118 @@
+#include "ch.h"
+#include "gnuk.h"
+#include <polarssl/config.h>
+#include <polarssl/rsa.h>
+
+static unsigned char output[256];
+
+/* big endian */
+static const unsigned char p[64] = {
+  0xe3,0xec,0x42,0x6c,0x23,0x37,0x1f,0x96,
+  0x55,0x2f,0x1d,0x2a,0x37,0xd2,0x66,0x43,
+  0x3c,0xb1,0xa5,0x24,0x47,0x8e,0x29,0x86,
+  0xee,0xec,0xa9,0x86,0x1e,0x05,0xfb,0xfa,
+  0x00,0x0e,0x69,0xbc,0x60,0x47,0x1c,0x00,
+  0x96,0xdc,0x30,0x00,0x05,0xfb,0xe0,0x00,
+  0xae,0x05,0x38,0x38,0xf9,0x7e,0xa6,0xae,
+  0xf6,0x90,0x68,0x48,0xf5,0x23,0x7f,0x3d,
+};
+
+static const unsigned char q[64] = {
+  0xf2,0x8c,0xa0,0x24,0x38,0x7c,0x6e,0x66,
+  0x9c,0x39,0xe9,0x4d,0x2b,0xe3,0x94,0xd1,
+  0x93,0x3f,0x17,0xcb,0x3f,0x4e,0x8d,0xa4,
+  0xdd,0x1f,0xee,0x00,0x7d,0x8c,0x5e,0xbb,
+  0xc7,0x80,0x1a,0xf5,0x79,0x80,0x63,0x5a,
+  0xc7,0xa2,0xb7,0x92,0x75,0x26,0xda,0xd4,
+  0xc9,0x9f,0x83,0x58,0x81,0x0a,0x53,0xa3,
+  0xe4,0x0b,0xd1,0xde,0xe2,0x33,0xf2,0x9b,
+};
+
+/* dq = 1/e mod (p - 1) */
+static const unsigned char dp[64] = {
+  0x44,0x60,0x63,0x88,0xe7,0x83,0xa9,0x01,
+  0x43,0xaa,0xef,0xb7,0xf3,0xa9,0x36,0x2e,
+  0xa3,0xad,0xb3,0x9a,0x4f,0xb1,0x31,0x7a,
+  0x1e,0x81,0x77,0x56,0x19,0xf9,0xb7,0x9f,
+  0x47,0x97,0x0b,0x57,0x8d,0x16,0xa8,0x2a,
+  0xf1,0x17,0x3b,0x7b,0x36,0x50,0x5a,0xe2,
+  0x39,0x52,0xad,0x8c,0x42,0x25,0x21,0xc2,
+  0x49,0x8c,0x07,0x0d,0x24,0x25,0xb3,0x0d,
+};
+
+/* dq = 1/e mod (q - 1) */
+static const unsigned char dq[64] = {
+  0x6c,0xbe,0xbd,0xe1,0xdf,0x6d,0x72,0x76,
+  0x10,0xdf,0x2a,0x09,0x8e,0x7e,0xe7,0xaf,
+  0x1a,0xcc,0x73,0xd7,0x8d,0x57,0xa3,0xcb,
+  0xe1,0xd4,0x39,0xfa,0x00,0x50,0x19,0xfd,
+  0x28,0xd1,0xf7,0xc4,0x4d,0x28,0x51,0xe3,
+  0x56,0x94,0x4e,0xa7,0x9c,0x5c,0xc2,0x4a,
+  0x1a,0xe7,0xa8,0x94,0xda,0xae,0x0d,0x97,
+  0xf2,0x5b,0x96,0x49,0xce,0xb3,0x29,0xb7,
+};
+
+/* q_inv = 1/q mod p */
+static const unsigned char q_inv[64] = {
+  0x19,0x77,0x6a,0xc8,0xd7,0x2b,0x9f,0x82,
+  0x2d,0xbd,0x05,0x89,0xd8,0x0f,0x1e,0xb6,
+  0x19,0x82,0x58,0x2f,0x7f,0xfd,0xee,0x50,
+  0x00,0x75,0x85,0x69,0x64,0x37,0x32,0xa0,
+  0x62,0x55,0x5b,0x13,0x71,0x9e,0x4e,0x1f,
+  0x93,0x4c,0xa2,0x77,0x6c,0x70,0x07,0xa6,
+  0xfb,0xd5,0x4e,0x94,0xab,0xbd,0xa0,0x0e,
+  0x0d,0x42,0x07,0x9d,0xbb,0x5d,0xbc,0x75,
+};
+
+unsigned char *
+rsa_sign (unsigned char *raw_message)
+{
+  rsa_context ctx;
+  mpi P1, Q1, H;
+  int len;
+
+  len = (cmd_APDU[5]<<8) | cmd_APDU[6]; /* cmd_APDU_size - 6 */
+
+  mpi_init( &P1, &Q1, &H, NULL );
+  rsa_init( &ctx, RSA_PKCS_V15, 0 );
+
+#if 0
+  ctx.len = 2048 / 8;
+#else
+  ctx.len = 1024 / 8;
+  mpi_read_string( &ctx.E, 16, "10001" );
+  mpi_read_binary (&ctx.P, p, ctx.len / 2);
+  mpi_read_binary (&ctx.Q, q, ctx.len / 2);
+  mpi_mul_mpi( &ctx.N, &ctx.P, &ctx.Q );
+  mpi_sub_int( &P1, &ctx.P, 1 );
+  mpi_sub_int( &Q1, &ctx.Q, 1 );
+  mpi_mul_mpi( &H, &P1, &Q1 );
+  mpi_inv_mod( &ctx.D , &ctx.E, &H  );
+  mpi_read_binary (&ctx.DP, dp, ctx.len / 2);
+  mpi_read_binary (&ctx.DQ, dq, ctx.len / 2);
+  mpi_read_binary (&ctx.QP, q_inv, ctx.len / 2);
+#endif
+
+  put_string ("RSA...");
+  {
+    int r;
+    if ((r = rsa_check_privkey( &ctx )) == 0)
+      put_string ("ok...");
+    else
+      {
+       put_string ("failed.\r\n");
+       put_byte (r);
+       return output;
+      }
+  }
+
+#if 0
+  rsa_pkcs1_sign( &ctx, RSA_PRIVATE, SIG_RSA_RAW, len, raw_message, output);
+  put_string ("done.\r\n");
+  return output;
+#else
+  rsa_pkcs1_sign( &ctx, RSA_PRIVATE, SIG_RSA_RAW, len, raw_message, output );
+  put_string ("done.\r\n");
+  return output;
+#endif
+}
index 6e53209..9fe30cc 100644 (file)
@@ -1,4 +1,4 @@
-RSADIR = ../../polarssl-0.13.1
+RSADIR = ../polarssl-0.14.0
 RSASRCDIR = $(RSADIR)/library
 RSAINCDIR = $(RSADIR)/include
-RSASRC = $(RSASRCDIR)/bignum.c $(RSASRCDIR)/rsa.c rsa_sign.c
+RSASRC = $(RSASRCDIR)/bignum.c $(RSASRCDIR)/rsa.c rsa-sign.c
diff --git a/src/rsa_sign.c b/src/rsa_sign.c
deleted file mode 100644 (file)
index 8e548f7..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-#include "ch.h"
-#include "gnuk.h"
-#include <polarssl/config.h>
-#include <polarssl/rsa.h>
-
-static unsigned char output[256];
-
-/* big endian */
-static const unsigned char p[64] = {
-  0xe3,0xec,0x42,0x6c,0x23,0x37,0x1f,0x96,
-  0x55,0x2f,0x1d,0x2a,0x37,0xd2,0x66,0x43,
-  0x3c,0xb1,0xa5,0x24,0x47,0x8e,0x29,0x86,
-  0xee,0xec,0xa9,0x86,0x1e,0x05,0xfb,0xfa,
-  0x00,0x0e,0x69,0xbc,0x60,0x47,0x1c,0x00,
-  0x96,0xdc,0x30,0x00,0x05,0xfb,0xe0,0x00,
-  0xae,0x05,0x38,0x38,0xf9,0x7e,0xa6,0xae,
-  0xf6,0x90,0x68,0x48,0xf5,0x23,0x7f,0x3d,
-};
-
-static const unsigned char q[64] = {
-  0xf2,0x8c,0xa0,0x24,0x38,0x7c,0x6e,0x66,
-  0x9c,0x39,0xe9,0x4d,0x2b,0xe3,0x94,0xd1,
-  0x93,0x3f,0x17,0xcb,0x3f,0x4e,0x8d,0xa4,
-  0xdd,0x1f,0xee,0x00,0x7d,0x8c,0x5e,0xbb,
-  0xc7,0x80,0x1a,0xf5,0x79,0x80,0x63,0x5a,
-  0xc7,0xa2,0xb7,0x92,0x75,0x26,0xda,0xd4,
-  0xc9,0x9f,0x83,0x58,0x81,0x0a,0x53,0xa3,
-  0xe4,0x0b,0xd1,0xde,0xe2,0x33,0xf2,0x9b,
-};
-
-/* dq = 1/e mod (p - 1) */
-static const unsigned char dp[64] = {
-  0x44,0x60,0x63,0x88,0xe7,0x83,0xa9,0x01,
-  0x43,0xaa,0xef,0xb7,0xf3,0xa9,0x36,0x2e,
-  0xa3,0xad,0xb3,0x9a,0x4f,0xb1,0x31,0x7a,
-  0x1e,0x81,0x77,0x56,0x19,0xf9,0xb7,0x9f,
-  0x47,0x97,0x0b,0x57,0x8d,0x16,0xa8,0x2a,
-  0xf1,0x17,0x3b,0x7b,0x36,0x50,0x5a,0xe2,
-  0x39,0x52,0xad,0x8c,0x42,0x25,0x21,0xc2,
-  0x49,0x8c,0x07,0x0d,0x24,0x25,0xb3,0x0d,
-};
-
-/* dq = 1/e mod (q - 1) */
-static const unsigned char dq[64] = {
-  0x6c,0xbe,0xbd,0xe1,0xdf,0x6d,0x72,0x76,
-  0x10,0xdf,0x2a,0x09,0x8e,0x7e,0xe7,0xaf,
-  0x1a,0xcc,0x73,0xd7,0x8d,0x57,0xa3,0xcb,
-  0xe1,0xd4,0x39,0xfa,0x00,0x50,0x19,0xfd,
-  0x28,0xd1,0xf7,0xc4,0x4d,0x28,0x51,0xe3,
-  0x56,0x94,0x4e,0xa7,0x9c,0x5c,0xc2,0x4a,
-  0x1a,0xe7,0xa8,0x94,0xda,0xae,0x0d,0x97,
-  0xf2,0x5b,0x96,0x49,0xce,0xb3,0x29,0xb7,
-};
-
-/* q_inv = 1/q mod p */
-static const unsigned char q_inv[64] = {
-  0x19,0x77,0x6a,0xc8,0xd7,0x2b,0x9f,0x82,
-  0x2d,0xbd,0x05,0x89,0xd8,0x0f,0x1e,0xb6,
-  0x19,0x82,0x58,0x2f,0x7f,0xfd,0xee,0x50,
-  0x00,0x75,0x85,0x69,0x64,0x37,0x32,0xa0,
-  0x62,0x55,0x5b,0x13,0x71,0x9e,0x4e,0x1f,
-  0x93,0x4c,0xa2,0x77,0x6c,0x70,0x07,0xa6,
-  0xfb,0xd5,0x4e,0x94,0xab,0xbd,0xa0,0x0e,
-  0x0d,0x42,0x07,0x9d,0xbb,0x5d,0xbc,0x75,
-};
-
-unsigned char *
-rsa_sign (unsigned char *raw_message)
-{
-  rsa_context ctx;
-  mpi P1, Q1, H;
-  int len;
-
-  len = (cmd_APDU[5]<<8) | cmd_APDU[6]; /* cmd_APDU_size - 6 */
-
-  mpi_init( &P1, &Q1, &H, NULL );
-  rsa_init( &ctx, RSA_PKCS_V15, 0, NULL, NULL );
-
-#if 0
-  ctx.len = 2048 / 8;
-#else
-  ctx.len = 1024 / 8;
-  mpi_read_string( &ctx.E, 16, "10001" );
-  mpi_read_binary (&ctx.P, p, ctx.len / 2);
-  mpi_read_binary (&ctx.Q, q, ctx.len / 2);
-  mpi_mul_mpi( &ctx.N, &ctx.P, &ctx.Q );
-  mpi_sub_int( &P1, &ctx.P, 1 );
-  mpi_sub_int( &Q1, &ctx.Q, 1 );
-  mpi_mul_mpi( &H, &P1, &Q1 );
-  mpi_inv_mod( &ctx.D , &ctx.E, &H  );
-  mpi_read_binary (&ctx.DP, dp, ctx.len / 2);
-  mpi_read_binary (&ctx.DQ, dq, ctx.len / 2);
-  mpi_read_binary (&ctx.QP, q_inv, ctx.len / 2);
-#endif
-
-  put_string ("RSA...");
-  {
-    int r;
-    if ((r = rsa_check_privkey( &ctx )) == 0)
-      put_string ("ok...");
-    else
-      {
-       put_string ("failed.\r\n");
-       put_byte (r);
-       return output;
-      }
-  }
-
-#if 0
-  rsa_pkcs1_sign( &ctx, RSA_PRIVATE, SIG_RSA_RAW, len, raw_message, output);
-  put_string ("done.\r\n");
-  return output;
-#else
-  rsa_pkcs1_sign( &ctx, RSA_PRIVATE, SIG_RSA_RAW, len, raw_message, output );
-  put_string ("done.\r\n");
-  return output;
-#endif
-}
index 37c2777..11f8f0f 100644 (file)
@@ -1,36 +1,26 @@
+/* USB configuration file for USB-FS-Device_Lib */
 /*
-(C) COPYRIGHT 2010 STMicroelectronics
-usb_conf.h
-MCD Application Team
-V3.1.1
-04/07/2010
-Virtual COM Port Demo configuration  header
-*/
+ * For detail, please see the documentation of 
+ * STM32F10x USB Full Speed Device Library (USB-FS-Device_Lib)
+ * by STMicroelectronics
+ */
 
 #ifndef __USB_CONF_H
 #define __USB_CONF_H
 
-/*-------------------------------------------------------------*/
-/* EP_NUM */
-/* defines how many endpoints are used by the device */
-/*-------------------------------------------------------------*/
-
+#ifdef ENABLE_VIRTUAL_COM_PORT
 #define EP_NUM                          (6)
+#else
+#define EP_NUM                          (3)
+#endif
 
-/*-------------------------------------------------------------*/
-/* --------------   Buffer Description Table  -----------------*/
-/*-------------------------------------------------------------*/
-/* buffer table base address */
-/* buffer table base address */
 #define BTABLE_ADDRESS      (0x00)
 
 /* EP0  */
-/* rx/tx buffer base address */
 #define ENDP0_RXADDR        (0x40)
 #define ENDP0_TXADDR        (0x80)
 
 /* EP1  */
-/* tx buffer base address */
 #define ENDP1_TXADDR        (0xC0)
 /* EP2 */
 #define ENDP2_TXADDR        (0x100)
@@ -43,39 +33,6 @@ Virtual COM Port Demo configuration  header
 /* EP5 */
 #define ENDP5_RXADDR        (0x1C0)
 
-/*-------------------------------------------------------------*/
-/* -------------------   ISTR events  -------------------------*/
-/*-------------------------------------------------------------*/
-/* IMR_MSK */
-/* mask defining which events has to be handled */
-/* by the device application software */
 #define IMR_MSK (CNTR_CTRM  | CNTR_SOFM  | CNTR_RESETM )
 
-/*#define CTR_CALLBACK*/
-/*#define DOVR_CALLBACK*/
-/*#define ERR_CALLBACK*/
-/*#define WKUP_CALLBACK*/
-/*#define SUSP_CALLBACK*/
-/*#define RESET_CALLBACK*/
-/*#define SOF_CALLBACK*/
-/*#define ESOF_CALLBACK*/
-
-#if 0
-#define  EP1_IN_Callback   NOP_Process
-#define  EP2_IN_Callback   NOP_Process
-#define  EP3_IN_Callback   NOP_Process
-#define  EP4_IN_Callback   NOP_Process
-#define  EP5_IN_Callback   NOP_Process
-#define  EP6_IN_Callback   NOP_Process
-#define  EP7_IN_Callback   NOP_Process
-
-#define  EP1_OUT_Callback   NOP_Process
-#define  EP2_OUT_Callback   NOP_Process
-#define  EP3_OUT_Callback   NOP_Process
-#define  EP4_OUT_Callback   NOP_Process
-#define  EP5_OUT_Callback   NOP_Process
-#define  EP6_OUT_Callback   NOP_Process
-#define  EP7_OUT_Callback   NOP_Process
-#endif
-
 #endif /* __USB_CONF_H */
index 3547ff5..9e0ecfd 100644 (file)
@@ -1,8 +1,2 @@
-/**
- * @brief USB interrupt priority level setting.
- */
-#if !defined(STM32_USB_IRQ_PRIORITY) || defined(__DOXYGEN__)
 #define STM32_USB_IRQ_PRIORITY     11
-#endif
-
 void usb_lld_init (void);
index 73e8d4e..e8df21f 100644 (file)
@@ -1,10 +1,27 @@
 /*
-usb_prop.c
-MCD Application Team
-V3.1.1
-04/07/2010
-All processing related to Virtual Com Port Demo
-*/
+ * usb_prop.c - glue/interface code between Gnuk and USB-FS-Device_Lib
+ *
+ * Copyright (C) 2010 Free Software Initiative of Japan
+ * Author: NIIBE Yutaka <gniibe@fsij.org>
+ *
+ * This file is a part of Gnuk, a GnuPG USB Token implementation.
+ *
+ * Gnuk 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.
+ *
+ * Gnuk 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 <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "config.h"
 
 #include "usb_lib.h"
 #include "usb_conf.h"
@@ -13,56 +30,16 @@ All processing related to Virtual Com Port Demo
 #include "usb_pwr.h"
 #include "hw_config.h"
 
-#if 0
-static uint8_t Request = 0;
+#ifdef ENABLE_VIRTUAL_COM_PORT
+#include "usb-cdc-vport.c"
 #endif
 
-typedef struct
-{
-  uint32_t bitrate;
-  uint8_t format;
-  uint8_t paritytype;
-  uint8_t datatype;
-} LINE_CODING;
-
-static LINE_CODING linecoding = {
-  115200, /* baud rate*/
-  0x00,   /* stop bits-1*/
-  0x00,   /* parity - none*/
-  0x08    /* no. of bits 8*/
-};
-
-static uint8_t *Virtual_Com_Port_GetLineCoding(uint16_t Length)
-{
-  if (Length == 0)
-    {
-      pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
-      return NULL;
-    }
-
-  return (uint8_t *)&linecoding;
-}
-
-static uint8_t *Virtual_Com_Port_SetLineCoding(uint16_t Length)
-{
-  if (Length == 0)
-    {
-      pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
-      return NULL;
-    }
-
-  return (uint8_t *)&linecoding;
-}
-
-
-#define GNUK_MAX_PACKET_SIZE 64
-
 static void
 gnuk_device_init (void)
 {
-
-  /* Update the serial number string descriptor with the data from the unique
-  ID*/
+  /*
+   * Update the serial number string descriptor (if needed)
+   */
   Get_SerialNum ();
 
   pInformation->Current_Configuration = 0;
@@ -79,13 +56,13 @@ gnuk_device_init (void)
 static void
 gnuk_device_reset (void)
 {
-  /* Set Virtual_Com_Port DEVICE as not configured */
+  /* Set DEVICE as not configured */
   pInformation->Current_Configuration = 0;
 
   /* Current Feature initialization */
   pInformation->Current_Feature = Config_Descriptor.Descriptor[7];
 
-  /* Set Virtual_Com_Port DEVICE with the default Interface*/
+  /* Set DEVICE with the default Interface*/
   pInformation->Current_Interface = 0;
 
   SetBTABLE (BTABLE_ADDRESS);
@@ -99,6 +76,7 @@ gnuk_device_reset (void)
   SetEPRxCount (ENDP0, GNUK_MAX_PACKET_SIZE);
   SetEPRxValid (ENDP0);
 
+#ifdef ENABLE_VIRTUAL_COM_PORT
   /* Initialize Endpoint 1 */
   SetEPType (ENDP1, EP_BULK);
   SetEPTxAddr (ENDP1, ENDP1_TXADDR);
@@ -117,6 +95,7 @@ gnuk_device_reset (void)
   SetEPRxCount (ENDP3, VIRTUAL_COM_PORT_DATA_SIZE);
   SetEPRxStatus (ENDP3, EP_RX_VALID);
   SetEPTxStatus (ENDP3, EP_TX_DIS);
+#endif
 
   /* Initialize Endpoint 4 */
   SetEPType (ENDP4, EP_BULK);
@@ -127,7 +106,7 @@ gnuk_device_reset (void)
   /* Initialize Endpoint 5 */
   SetEPType (ENDP5, EP_BULK);
   SetEPRxAddr (ENDP5, ENDP5_RXADDR);
-  SetEPRxCount (ENDP5, VIRTUAL_COM_PORT_DATA_SIZE); /* XXX */
+  SetEPRxCount (ENDP5, GNUK_MAX_PACKET_SIZE);
   SetEPRxStatus (ENDP5, EP_RX_VALID);
   SetEPTxStatus (ENDP5, EP_TX_DIS);
 
@@ -157,10 +136,6 @@ gnuk_device_SetDeviceAddress (void)
 static void
 gnuk_device_Status_In (void)
 {
-#if 0
-  if (Request == SET_LINE_CODING)
-    Request = 0;
-#endif
 }
 
 /* OUT to port 0 */
@@ -169,65 +144,6 @@ gnuk_device_Status_Out (void)
 {
 }
 
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_Data_Setup
-* Description    : handle the data class specific requests
-* Input          : Request Nb.
-* Output         : None.
-* Return         : USB_UNSUPPORT or USB_SUCCESS.
-*******************************************************************************/
-static RESULT
-Virtual_Com_Port_Data_Setup (uint8_t RequestNo)
-{
-  uint8_t    *(*CopyRoutine)(uint16_t);
-
-  CopyRoutine = NULL;
-
-  if (RequestNo == GET_LINE_CODING)
-    {
-      if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
-       CopyRoutine = Virtual_Com_Port_GetLineCoding;
-    }
-  else if (RequestNo == SET_LINE_CODING)
-    {
-      if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
-       CopyRoutine = Virtual_Com_Port_SetLineCoding;
-#if 0
-      Request = SET_LINE_CODING;
-#endif
-    }
-
-  if (CopyRoutine == NULL)
-    return USB_UNSUPPORT;
-
-  pInformation->Ctrl_Info.CopyData = CopyRoutine;
-  pInformation->Ctrl_Info.Usb_wOffset = 0;
-  (*CopyRoutine) (0);
-
-  return USB_SUCCESS;
-}
-
-/*******************************************************************************
-* Function Name  : Virtual_Com_Port_NoData_Setup.
-* Description    : handle the no data class specific requests.
-* Input          : Request Nb.
-* Output         : None.
-* Return         : USB_UNSUPPORT or USB_SUCCESS.
-*******************************************************************************/
-static RESULT
-Virtual_Com_Port_NoData_Setup (uint8_t RequestNo)
-{
-  if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
-    {
-      if (RequestNo == SET_COMM_FEATURE)
-       return USB_SUCCESS;
-      else if (RequestNo == SET_CONTROL_LINE_STATE)
-       return USB_SUCCESS;
-    }
-
-  return USB_UNSUPPORT;
-}
-
 static uint8_t *
 gnuk_device_GetDeviceDescriptor (uint16_t Length)
 {
@@ -261,7 +177,7 @@ gnuk_device_Get_Interface_Setting (uint8_t Interface, uint8_t AlternateSetting)
 
   return USB_SUCCESS;
 }
-\f
+
 /*
  * Interface to USB core
  */
@@ -271,8 +187,13 @@ DEVICE_PROP Device_Property = {
   gnuk_device_reset,
   gnuk_device_Status_In,
   gnuk_device_Status_Out,
+#ifdef ENABLE_VIRTUAL_COM_PORT
   Virtual_Com_Port_Data_Setup,
   Virtual_Com_Port_NoData_Setup,
+#else
+  NULL,
+  NULL,
+#endif
   gnuk_device_Get_Interface_Setting,
   gnuk_device_GetDeviceDescriptor,
   gnuk_device_GetConfigDescriptor,
index ab42890..df6af01 100644 (file)
@@ -1,25 +1,6 @@
-/*
-(C) COPYRIGHT 2010 STMicroelectronics
-usb_prop.h
-MCD Application Team
-V3.1.1
-04/07/2010
-All processing related to Virtual COM Port Demo (Endpoint 0)
-*/
-
 #ifndef __usb_prop_H
 #define __usb_prop_H
 
-#define SEND_ENCAPSULATED_COMMAND   0x00
-#define GET_ENCAPSULATED_RESPONSE   0x01
-#define SET_COMM_FEATURE            0x02
-#define GET_COMM_FEATURE            0x03
-#define CLEAR_COMM_FEATURE          0x04
-#define SET_LINE_CODING             0x20
-#define GET_LINE_CODING             0x21
-#define SET_CONTROL_LINE_STATE      0x22
-#define SEND_BREAK                  0x23
-
 extern ONE_DESCRIPTOR Device_Descriptor;
 extern ONE_DESCRIPTOR Config_Descriptor;
 extern ONE_DESCRIPTOR String_Descriptor[4];
diff --git a/src/usbcdc.mk b/src/usbcdc.mk
deleted file mode 100644 (file)
index 3f163a5..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-USBCDCDIR = ../USBCDC
-USBCDCSRC= $(USBCDCDIR)/usb_endp.c $(USBCDCDIR)/usb_istr.c \
-          $(USBCDCDIR)/usb_pwr.c
diff --git a/src/vcomport.mk b/src/vcomport.mk
new file mode 100644 (file)
index 0000000..0325ec2
--- /dev/null
@@ -0,0 +1,2 @@
+VCOMDIR = ../Virtual_COM_Port
+VCOMSRC= $(VCOMDIR)/usb_endp.c $(VCOMDIR)/usb_istr.c $(VCOMDIR)/usb_pwr.c