]> begriffs open source - cmsis-driver-validation/blob - Source/DV_USBH.c
Changes:
[cmsis-driver-validation] / Source / DV_USBH.c
1 /*-----------------------------------------------------------------------------
2  *      Name:         DV_USBH.c
3  *      Purpose:      USB Host test cases
4  *----------------------------------------------------------------------------
5  *      Copyright(c) KEIL - An ARM Company
6  *----------------------------------------------------------------------------*/
7 #include "cmsis_os.h" 
8 #include "cmsis_dv.h" 
9 #include "DV_Config.h"
10 #include "DV_Framework.h"
11 #include "Driver_USBH.h"
12 #include <stdio.h>
13 #include <stdlib.h> 
14 #include <string.h> 
15
16 // Register Driver_USBH#
17 extern ARM_DRIVER_USBH CREATE_SYMBOL(Driver_USBH, DRV_USBH);
18 static ARM_DRIVER_USBH *drv = &CREATE_SYMBOL(Driver_USBH, DRV_USBH);
19 static ARM_USBH_CAPABILITIES capab;  
20
21 // Event flags
22 static uint8_t volatile PortEvent;  
23 static uint8_t volatile PipeEvent; 
24
25 // USB Port event
26 static void USB_PortEvent (uint8_t port, uint32_t event) {
27   PortEvent |= event;
28 }
29
30 // USB Pipe event
31 static void USB_PipeEvent (ARM_USBH_PIPE_HANDLE pipe_hndl, uint32_t event) {
32   PipeEvent |= event;
33 }
34
35
36 /*-----------------------------------------------------------------------------
37  *      Test cases
38  *----------------------------------------------------------------------------*/
39  
40 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
41 /**
42 \defgroup usbh_funcs USB Host Validation
43 \brief USB Host test cases
44 \details
45 The USB Host validation test checks the API interface compliance only.
46 @{
47 */
48
49 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
50 /**
51 \brief Test case: USBH_GetCapabilities
52 \details
53 The test case \b USBH_GetCapabilities verifies the function \b GetCapabilities.
54 */
55 void USBH_GetCapabilities (void) {                    
56   /* Get USBH capabilities */
57   capab = drv->GetCapabilities();
58   TEST_ASSERT(&capab != NULL); 
59 }
60
61 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
62 /**
63 \brief  Test case: USBH_Initialization
64 \details
65 The test case \b USBH_Initialization verifies the USBH functions with the sequence:
66   - \b Initialize without callback
67   - \b Uninitialize
68   - \b Initialize with callback
69   - \b Uninitialize
70 */
71 void USBH_Initialization (void) { 
72     
73   /* Initialize without callback */
74   TEST_ASSERT(drv->Initialize(NULL, NULL) == ARM_DRIVER_OK); 
75     
76   /* Uninitialize */
77   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
78   
79   /* Initialize with callback */
80   TEST_ASSERT(drv->Initialize(USB_PortEvent, USB_PipeEvent) == ARM_DRIVER_OK); 
81   
82   /* Uninitialize */
83   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
84 }
85
86 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
87 /**
88 \brief  Test case: USBH_CheckInvalidInit
89 \details
90 The test case \b USBH_CheckInvalidInit verifies the driver behaviour when receiving an invalid initialization sequence:
91   - \b Uninitialize
92   - \b PowerControl with Power off
93   - \b PowerControl with Power on
94   - \b PowerControl with Power off
95   - \b Uninitialize
96 */
97 void USBH_CheckInvalidInit (void) { 
98
99   /* Uninitialize */
100   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
101   
102   /* Power off */
103   TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
104   
105   /* Try to power on */
106   TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) != ARM_DRIVER_OK); 
107   
108   /* Power off */
109   TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
110   
111   /* Uninitialize */
112   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
113 }
114
115 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
116 /**
117 \brief  Test case: USBH_PowerControl
118 \details
119 The test case \b USBH_PowerControl verifies the \b PowerControl function with the sequence:
120  - Initialize
121  - Power on
122  - Power low
123  - Power off
124  - Uninitialize 
125 */
126 void USBH_PowerControl (void) { 
127   int32_t val;
128   
129   /* Initialize with callback */
130   TEST_ASSERT(drv->Initialize(USB_PortEvent, USB_PipeEvent) == ARM_DRIVER_OK); 
131   
132   /* Power on */
133   TEST_ASSERT(drv->PowerControl (ARM_POWER_FULL) == ARM_DRIVER_OK);  
134   
135   /* Power low */
136   val = drv->PowerControl (ARM_POWER_LOW);
137   if (val == ARM_DRIVER_ERROR_UNSUPPORTED) { TEST_MESSAGE("[WARNING] Low power is not supported"); }
138   else { TEST_ASSERT(val == ARM_DRIVER_OK); }
139    
140   /* Power off */
141   TEST_ASSERT(drv->PowerControl (ARM_POWER_OFF) == ARM_DRIVER_OK);
142   
143   /* Uninitialize */
144   TEST_ASSERT(drv->Uninitialize() == ARM_DRIVER_OK); 
145 }
146
147 /**
148 @}
149 */ 
150 // end of group usbh_funcs