]> begriffs open source - cmsis-driver-validation/blob - Source/DV_USBD.c
Added link to firmware update page on CMSIS-Driver
[cmsis-driver-validation] / Source / DV_USBD.c
1 /*-----------------------------------------------------------------------------
2  *      Name:         DV_USBD.c
3  *      Purpose:      USB Device test cases
4  *----------------------------------------------------------------------------
5  *      Copyright(c) KEIL - An ARM Company
6  *----------------------------------------------------------------------------*/
7
8 #include "cmsis_dv.h" 
9 #include "DV_Config.h"
10 #include "DV_Framework.h"
11 #include "Driver_USBD.h"
12 #include <stdio.h>
13 #include <stdlib.h> 
14 #include <string.h> 
15
16 // Register Driver_USBD#
17 extern ARM_DRIVER_USBD CREATE_SYMBOL(Driver_USBD, DRV_USBD);
18 static ARM_DRIVER_USBD *drv = &CREATE_SYMBOL(Driver_USBD, DRV_USBD);
19 static ARM_USBD_CAPABILITIES capab;  
20
21 // Event flags
22 static uint8_t volatile DeviceEvent;  
23 static uint8_t volatile EndpointEvent; 
24
25 // USB Device event
26 static void USB_DeviceEvent (uint32_t event) {
27   DeviceEvent |= event;
28 }
29
30 // USB Endpoint event
31 static void USB_EndpointEvent (uint8_t endpoint, uint32_t event) {
32   (void) endpoint;
33   EndpointEvent |= event;
34 }
35
36
37 /*-----------------------------------------------------------------------------
38  *      Test cases
39  *----------------------------------------------------------------------------*/
40  
41 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
42 /**
43 \defgroup usbd_funcs USB Device Validation
44 \brief USB Device test cases
45 \details
46 The USB Device validation test checks the API interface compliance only. The section \ref usbd_comp_test explains how to run
47 the USB compliance tests. These tests check USB devices for conformance to the USB Device Framework which is required in
48 order to gain USB certification.
49 @{
50 */
51
52 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
53 /**
54 \brief Test case: USBD_GetCapabilities
55 \details
56 The test case \b USBD_GetCapabilities verifies the function \b GetCapabilities.
57 */
58 void USBD_GetCapabilities (void) {                    
59   /* Get USBD capabilities */
60   capab = drv->GetCapabilities();
61   TEST_ASSERT(&capab != NULL); 
62 }
63
64 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
65 /**
66 \brief  Test case: USBD_Initialization
67 \details
68 The test case \b USBD_Initialization verifies the USBD functions with the sequence:
69   - \b Initialize without callback
70   - \b Uninitialize
71   - \b Initialize with callback
72   - \b Uninitialize
73 */
74 void USBD_Initialization (void) { 
75
76   /* Initialize without callback */
77   TEST_ASSERT(drv->Initialize(NULL, NULL) == ARM_DRIVER_OK); 
78     
79   /* Uninitialize */
80   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
81   
82   /* Initialize with callback */
83   TEST_ASSERT(drv->Initialize(USB_DeviceEvent, USB_EndpointEvent) == ARM_DRIVER_OK); 
84   
85   /* Uninitialize */
86   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
87 }
88
89 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
90 /**
91 \brief  Test case: USBD_CheckInvalidInit
92 \details
93 The test case \b USBD_CheckInvalidInit verifies the driver behaviour when receiving an invalid initialization sequence:
94   - \b Uninitialize
95   - \b PowerControl with Power off
96   - \b PowerControl with Power on
97   - \b PowerControl with Power off
98   - \b Uninitialize
99 */
100 void USBD_CheckInvalidInit (void) { 
101
102   /* Uninitialize */
103   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
104   
105   /* Power off */
106   TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
107   
108   /* Try to power on */
109   TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) != ARM_DRIVER_OK); 
110   
111   /* Power off */
112   TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
113   
114   /* Uninitialize */
115   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
116 }
117
118 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
119 /**
120 \brief  Test case: USBD_PowerControl
121 \details
122 The test case \b USBD_PowerControl verifies the \b PowerControl function with the sequence:
123  - Initialize
124  - Power on
125  - Power low
126  - Power off
127  - Uninitialize 
128 */
129 void USBD_PowerControl (void) { 
130   int32_t val;
131   
132   /* Initialize with callback */
133   TEST_ASSERT(drv->Initialize(USB_DeviceEvent, USB_EndpointEvent) == ARM_DRIVER_OK); 
134   
135   /* Power on */
136   TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);  
137   
138   /* Power low */
139   val = drv->PowerControl (ARM_POWER_LOW);
140   if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Low power is not supported"); }
141   else { TEST_ASSERT(val == ARM_DRIVER_OK); }
142    
143   /* Power off */
144   TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
145   
146   /* Uninitialize */
147   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
148 }
149
150 /**
151 @}
152 */ 
153 // end of group usbd_funcs