1 /***************************************************************************
2 * Copyright (c) 2024 Microsoft Corporation
3 *
4 * This program and the accompanying materials are made available under the
5 * terms of the MIT License which is available at
6 * https://opensource.org/licenses/MIT.
7 *
8 * SPDX-License-Identifier: MIT
9 **************************************************************************/
10
11
12 /**************************************************************************/
13 /**************************************************************************/
14 /** */
15 /** USBX Component */
16 /** */
17 /** PIMA Class */
18 /** */
19 /**************************************************************************/
20 /**************************************************************************/
21
22
23 /* Include necessary system files. */
24
25 #define UX_SOURCE_CODE
26
27 #include "ux_api.h"
28 #include "ux_host_class_pima.h"
29 #include "ux_host_stack.h"
30
31
32 /**************************************************************************/
33 /* */
34 /* FUNCTION RELEASE */
35 /* */
36 /* _ux_host_class_pima_object_open PORTABLE C */
37 /* 6.1 */
38 /* AUTHOR */
39 /* */
40 /* Chaoqiong Xiao, Microsoft Corporation */
41 /* */
42 /* DESCRIPTION */
43 /* */
44 /* This function opens an object for a read or write operation */
45 /* INPUT */
46 /* */
47 /* pima Pointer to pima class */
48 /* pima_session Pointer to pima session */
49 /* object_handle The object handle */
50 /* object Pointer to object info */
51 /* */
52 /* OUTPUT */
53 /* */
54 /* Completion Status */
55 /* */
56 /* CALLS */
57 /* */
58 /* None */
59 /* */
60 /* CALLED BY */
61 /* */
62 /* USB application */
63 /* */
64 /* RELEASE HISTORY */
65 /* */
66 /* DATE NAME DESCRIPTION */
67 /* */
68 /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */
69 /* 09-30-2020 Chaoqiong Xiao Modified comment(s), */
70 /* resulting in version 6.1 */
71 /* */
72 /**************************************************************************/
_ux_host_class_pima_object_open(UX_HOST_CLASS_PIMA * pima,UX_HOST_CLASS_PIMA_SESSION * pima_session,ULONG object_handle,UX_HOST_CLASS_PIMA_OBJECT * object)73 UINT _ux_host_class_pima_object_open(UX_HOST_CLASS_PIMA *pima,
74 UX_HOST_CLASS_PIMA_SESSION *pima_session,
75 ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object)
76 {
77
78 UX_PARAMETER_NOT_USED(object_handle);
79 UX_PARAMETER_NOT_USED(pima);
80
81 /* Check if this session is valid or not. */
82 if (pima_session -> ux_host_class_pima_session_magic != UX_HOST_CLASS_PIMA_MAGIC_NUMBER)
83 return (UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN);
84
85 /* Check if this session is opened or not. */
86 if (pima_session -> ux_host_class_pima_session_state != UX_HOST_CLASS_PIMA_SESSION_STATE_OPENED)
87 return (UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN);
88
89 /* Check if the object is already opened. */
90 if (object -> ux_host_class_pima_object_state != UX_HOST_CLASS_PIMA_OBJECT_STATE_CLOSED)
91 return (UX_HOST_CLASS_PIMA_RC_OBJECT_ALREADY_OPENED);
92
93 /* Open the object. */
94 object -> ux_host_class_pima_object_state = UX_HOST_CLASS_PIMA_OBJECT_STATE_OPENED;
95
96 /* Reset the object offset. */
97 object -> ux_host_class_pima_object_offset = 0;
98
99 /* Set the object transfer status to inactive. */
100 object -> ux_host_class_pima_object_transfer_status = UX_HOST_CLASS_PIMA_OBJECT_TRANSFER_STATUS_INACTIVE;
101
102 /* Return completion status. */
103 return(UX_SUCCESS);
104 }
105
106 /**************************************************************************/
107 /* */
108 /* FUNCTION RELEASE */
109 /* */
110 /* _uxe_host_class_pima_object_open PORTABLE C */
111 /* 6.3.0 */
112 /* AUTHOR */
113 /* */
114 /* Yajun Xia, Microsoft Corporation */
115 /* */
116 /* DESCRIPTION */
117 /* */
118 /* This function checks errors in pima object open function call. */
119 /* */
120 /* INPUT */
121 /* */
122 /* pima Pointer to pima class */
123 /* pima_session Pointer to pima session */
124 /* object_handle The object handle */
125 /* object Pointer to object info */
126 /* */
127 /* OUTPUT */
128 /* */
129 /* Completion Status */
130 /* */
131 /* CALLS */
132 /* */
133 /* _ux_host_class_pima_object_open Open pima object */
134 /* */
135 /* CALLED BY */
136 /* */
137 /* USB application */
138 /* */
139 /* RELEASE HISTORY */
140 /* */
141 /* DATE NAME DESCRIPTION */
142 /* */
143 /* 10-31-2023 Yajun xia Initial Version 6.3.0 */
144 /* */
145 /**************************************************************************/
_uxe_host_class_pima_object_open(UX_HOST_CLASS_PIMA * pima,UX_HOST_CLASS_PIMA_SESSION * pima_session,ULONG object_handle,UX_HOST_CLASS_PIMA_OBJECT * object)146 UINT _uxe_host_class_pima_object_open(UX_HOST_CLASS_PIMA *pima,
147 UX_HOST_CLASS_PIMA_SESSION *pima_session,
148 ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object)
149 {
150
151 /* Sanity checks. */
152 if ((pima == UX_NULL) || (pima_session == UX_NULL) || (object == UX_NULL))
153 return (UX_INVALID_PARAMETER);
154
155 /* Call the actual pima object open function. */
156 return (_ux_host_class_pima_object_open(pima, pima_session, object_handle, object));
157 }