xref: /aosp_15_r20/system/chre/chpp/test/transport_util.h (revision 84e339476a462649f82315436d70fd732297a399)
1*84e33947SAndroid Build Coastguard Worker /*
2*84e33947SAndroid Build Coastguard Worker  * Copyright (C) 2024 The Android Open Source Project
3*84e33947SAndroid Build Coastguard Worker  *
4*84e33947SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*84e33947SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*84e33947SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*84e33947SAndroid Build Coastguard Worker  *
8*84e33947SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*84e33947SAndroid Build Coastguard Worker  *
10*84e33947SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*84e33947SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*84e33947SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*84e33947SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*84e33947SAndroid Build Coastguard Worker  * limitations under the License.
15*84e33947SAndroid Build Coastguard Worker  */
16*84e33947SAndroid Build Coastguard Worker 
17*84e33947SAndroid Build Coastguard Worker #ifndef CHPP_TRANSPORT_UTIL_H_
18*84e33947SAndroid Build Coastguard Worker #define CHPP_TRANSPORT_UTIL_H_
19*84e33947SAndroid Build Coastguard Worker 
20*84e33947SAndroid Build Coastguard Worker #include <stdbool.h>
21*84e33947SAndroid Build Coastguard Worker #include <stddef.h>
22*84e33947SAndroid Build Coastguard Worker #include <stdint.h>
23*84e33947SAndroid Build Coastguard Worker 
24*84e33947SAndroid Build Coastguard Worker #include "chpp/app.h"
25*84e33947SAndroid Build Coastguard Worker #include "chpp/macros.h"
26*84e33947SAndroid Build Coastguard Worker #include "chpp/platform/platform_link.h"
27*84e33947SAndroid Build Coastguard Worker #include "chpp/transport.h"
28*84e33947SAndroid Build Coastguard Worker 
29*84e33947SAndroid Build Coastguard Worker #ifdef __cplusplus
30*84e33947SAndroid Build Coastguard Worker extern "C" {
31*84e33947SAndroid Build Coastguard Worker #endif
32*84e33947SAndroid Build Coastguard Worker 
33*84e33947SAndroid Build Coastguard Worker CHPP_PACKED_START
34*84e33947SAndroid Build Coastguard Worker struct ChppTestResponse {
35*84e33947SAndroid Build Coastguard Worker   char preamble0;
36*84e33947SAndroid Build Coastguard Worker   char preamble1;
37*84e33947SAndroid Build Coastguard Worker   struct ChppTransportHeader transportHeader;
38*84e33947SAndroid Build Coastguard Worker   struct ChppAppHeader appHeader;
39*84e33947SAndroid Build Coastguard Worker } CHPP_PACKED_ATTR;
40*84e33947SAndroid Build Coastguard Worker CHPP_PACKED_END
41*84e33947SAndroid Build Coastguard Worker 
42*84e33947SAndroid Build Coastguard Worker #ifdef __cplusplus
43*84e33947SAndroid Build Coastguard Worker }
44*84e33947SAndroid Build Coastguard Worker #endif
45*84e33947SAndroid Build Coastguard Worker 
46*84e33947SAndroid Build Coastguard Worker namespace chpp::test {
47*84e33947SAndroid Build Coastguard Worker 
48*84e33947SAndroid Build Coastguard Worker namespace {
49*84e33947SAndroid Build Coastguard Worker 
50*84e33947SAndroid Build Coastguard Worker // Preamble as separate bytes for testing
51*84e33947SAndroid Build Coastguard Worker constexpr uint8_t kChppPreamble0 = 0x68;
52*84e33947SAndroid Build Coastguard Worker constexpr uint8_t kChppPreamble1 = 0x43;
53*84e33947SAndroid Build Coastguard Worker 
54*84e33947SAndroid Build Coastguard Worker }  // namespace
55*84e33947SAndroid Build Coastguard Worker 
56*84e33947SAndroid Build Coastguard Worker /************************************************
57*84e33947SAndroid Build Coastguard Worker  *  Helper functions available for other tests
58*84e33947SAndroid Build Coastguard Worker  ***********************************************/
59*84e33947SAndroid Build Coastguard Worker 
60*84e33947SAndroid Build Coastguard Worker /**
61*84e33947SAndroid Build Coastguard Worker  * Wait for chppTransportDoWork() to finish after it is notified by
62*84e33947SAndroid Build Coastguard Worker  * chppEnqueueTxPacket to run.
63*84e33947SAndroid Build Coastguard Worker  */
64*84e33947SAndroid Build Coastguard Worker void WaitForTransport(struct ChppTransportState *transportContext);
65*84e33947SAndroid Build Coastguard Worker 
66*84e33947SAndroid Build Coastguard Worker /**
67*84e33947SAndroid Build Coastguard Worker  * Validates a ChppTestResponse. Since the error field within the
68*84e33947SAndroid Build Coastguard Worker  * ChppAppHeader struct is optional (and not used for common services), this
69*84e33947SAndroid Build Coastguard Worker  * function returns the error field to be checked if desired, depending on the
70*84e33947SAndroid Build Coastguard Worker  * service.
71*84e33947SAndroid Build Coastguard Worker  *
72*84e33947SAndroid Build Coastguard Worker  * @param buf Buffer containing response.
73*84e33947SAndroid Build Coastguard Worker  * @param ackSeq Ack sequence to be verified.
74*84e33947SAndroid Build Coastguard Worker  * @param handle Handle number to be verified
75*84e33947SAndroid Build Coastguard Worker  * @param transactionID Transaction ID to be verified.
76*84e33947SAndroid Build Coastguard Worker  *
77*84e33947SAndroid Build Coastguard Worker  * @return The error field within the ChppAppHeader struct that is used by some
78*84e33947SAndroid Build Coastguard Worker  * but not all services.
79*84e33947SAndroid Build Coastguard Worker  */
80*84e33947SAndroid Build Coastguard Worker uint8_t validateChppTestResponse(void *buf, uint8_t ackSeq, uint8_t handle,
81*84e33947SAndroid Build Coastguard Worker                                  uint8_t transactionID);
82*84e33947SAndroid Build Coastguard Worker 
83*84e33947SAndroid Build Coastguard Worker /**
84*84e33947SAndroid Build Coastguard Worker  * Aborts a packet and validates state.
85*84e33947SAndroid Build Coastguard Worker  *
86*84e33947SAndroid Build Coastguard Worker  * @param transportcontext Maintains status for each transport layer instance.
87*84e33947SAndroid Build Coastguard Worker  */
88*84e33947SAndroid Build Coastguard Worker void endAndValidatePacket(struct ChppTransportState *transportContext);
89*84e33947SAndroid Build Coastguard Worker 
90*84e33947SAndroid Build Coastguard Worker /**
91*84e33947SAndroid Build Coastguard Worker  * Adds a preamble to a certain location in a buffer, and increases the location
92*84e33947SAndroid Build Coastguard Worker  * accordingly, to account for the length of the added preamble.
93*84e33947SAndroid Build Coastguard Worker  *
94*84e33947SAndroid Build Coastguard Worker  * @param buf Buffer.
95*84e33947SAndroid Build Coastguard Worker  * @param location Location to add the preamble, which its value will be
96*84e33947SAndroid Build Coastguard Worker  * increased accordingly.
97*84e33947SAndroid Build Coastguard Worker  */
98*84e33947SAndroid Build Coastguard Worker void addPreambleToBuf(uint8_t *buf, size_t *location);
99*84e33947SAndroid Build Coastguard Worker 
100*84e33947SAndroid Build Coastguard Worker /**
101*84e33947SAndroid Build Coastguard Worker  * Adds a transport header (with default values) to a certain location in a
102*84e33947SAndroid Build Coastguard Worker  * buffer, and increases the location accordingly, to account for the length of
103*84e33947SAndroid Build Coastguard Worker  * the added transport header.
104*84e33947SAndroid Build Coastguard Worker  *
105*84e33947SAndroid Build Coastguard Worker  * @param buf Buffer.
106*84e33947SAndroid Build Coastguard Worker  * @param location Location to add the transport header, which its value will be
107*84e33947SAndroid Build Coastguard Worker  * increased accordingly.
108*84e33947SAndroid Build Coastguard Worker  *
109*84e33947SAndroid Build Coastguard Worker  * @return Pointer to the added transport header (e.g. to modify its fields).
110*84e33947SAndroid Build Coastguard Worker  */
111*84e33947SAndroid Build Coastguard Worker ChppTransportHeader *addTransportHeaderToBuf(uint8_t *buf, size_t *location);
112*84e33947SAndroid Build Coastguard Worker 
113*84e33947SAndroid Build Coastguard Worker /**
114*84e33947SAndroid Build Coastguard Worker  * Adds an app header (with default values) to a certain location in a buffer,
115*84e33947SAndroid Build Coastguard Worker  * and increases the location accordingly, to account for the length of the
116*84e33947SAndroid Build Coastguard Worker  * added app header.
117*84e33947SAndroid Build Coastguard Worker  *
118*84e33947SAndroid Build Coastguard Worker  * @param buf Buffer.
119*84e33947SAndroid Build Coastguard Worker  * @param location Location to add the app header, which its value will be
120*84e33947SAndroid Build Coastguard Worker  * increased accordingly.
121*84e33947SAndroid Build Coastguard Worker  *
122*84e33947SAndroid Build Coastguard Worker  * @return Pointer to the added app header (e.g. to modify its fields).
123*84e33947SAndroid Build Coastguard Worker  */
124*84e33947SAndroid Build Coastguard Worker ChppAppHeader *addAppHeaderToBuf(uint8_t *buf, size_t *location);
125*84e33947SAndroid Build Coastguard Worker 
126*84e33947SAndroid Build Coastguard Worker /**
127*84e33947SAndroid Build Coastguard Worker  * Adds a transport footer to a certain location in a buffer, and increases the
128*84e33947SAndroid Build Coastguard Worker  * location accordingly, to account for the length of the added preamble.
129*84e33947SAndroid Build Coastguard Worker  *
130*84e33947SAndroid Build Coastguard Worker  * @param buf Buffer.
131*84e33947SAndroid Build Coastguard Worker  * @param location Location to add the footer. The value of location will be
132*84e33947SAndroid Build Coastguard Worker  * increased accordingly.
133*84e33947SAndroid Build Coastguard Worker  *
134*84e33947SAndroid Build Coastguard Worker  */
135*84e33947SAndroid Build Coastguard Worker void addTransportFooterToBuf(uint8_t *buf, size_t *location);
136*84e33947SAndroid Build Coastguard Worker 
137*84e33947SAndroid Build Coastguard Worker /**
138*84e33947SAndroid Build Coastguard Worker  * Opens a service and checks to make sure it was opened correctly.
139*84e33947SAndroid Build Coastguard Worker  *
140*84e33947SAndroid Build Coastguard Worker  * @param transportContext Transport layer context.
141*84e33947SAndroid Build Coastguard Worker  * @param buf Buffer.
142*84e33947SAndroid Build Coastguard Worker  * @param ackSeq Ack sequence of the packet to be sent out
143*84e33947SAndroid Build Coastguard Worker  * @param seq Sequence number of the packet to be sent out.
144*84e33947SAndroid Build Coastguard Worker  * @param handle Handle of the service to be opened.
145*84e33947SAndroid Build Coastguard Worker  * @param transactionID Transaction ID for the open request.
146*84e33947SAndroid Build Coastguard Worker  * @param command Open command.
147*84e33947SAndroid Build Coastguard Worker  */
148*84e33947SAndroid Build Coastguard Worker void openService(ChppTransportState *transportContext, uint8_t *buf,
149*84e33947SAndroid Build Coastguard Worker                  uint8_t ackSeq, uint8_t seq, uint8_t handle,
150*84e33947SAndroid Build Coastguard Worker                  uint8_t transactionID, uint16_t command,
151*84e33947SAndroid Build Coastguard Worker                  struct ChppLinuxLinkState &chppLinuxLinkContext);
152*84e33947SAndroid Build Coastguard Worker 
153*84e33947SAndroid Build Coastguard Worker /**
154*84e33947SAndroid Build Coastguard Worker  * Sends a command to a service and checks for errors.
155*84e33947SAndroid Build Coastguard Worker  *
156*84e33947SAndroid Build Coastguard Worker  * @param transportContext Transport layer context.
157*84e33947SAndroid Build Coastguard Worker  * @param buf Buffer.
158*84e33947SAndroid Build Coastguard Worker  * @param ackSeq Ack sequence of the packet to be sent out
159*84e33947SAndroid Build Coastguard Worker  * @param seq Sequence number of the packet to be sent out.
160*84e33947SAndroid Build Coastguard Worker  * @param handle Handle of the service to be opened.
161*84e33947SAndroid Build Coastguard Worker  * @param transactionID Transaction ID for the open request.
162*84e33947SAndroid Build Coastguard Worker  * @param command Command to be sent.
163*84e33947SAndroid Build Coastguard Worker  */
164*84e33947SAndroid Build Coastguard Worker void sendCommandToService(ChppTransportState *transportContext, uint8_t *buf,
165*84e33947SAndroid Build Coastguard Worker                           uint8_t ackSeq, uint8_t seq, uint8_t handle,
166*84e33947SAndroid Build Coastguard Worker                           uint8_t transactionID, uint16_t command,
167*84e33947SAndroid Build Coastguard Worker                           struct ChppLinuxLinkState &chppLinuxLinkContext);
168*84e33947SAndroid Build Coastguard Worker 
169*84e33947SAndroid Build Coastguard Worker /**
170*84e33947SAndroid Build Coastguard Worker  * Find service handle by name.
171*84e33947SAndroid Build Coastguard Worker  *
172*84e33947SAndroid Build Coastguard Worker  * @param appContext App context.
173*84e33947SAndroid Build Coastguard Worker  * @param name Service name.
174*84e33947SAndroid Build Coastguard Worker  * @param handle Output service handle if found.
175*84e33947SAndroid Build Coastguard Worker  *
176*84e33947SAndroid Build Coastguard Worker  * @return True if service found, false otherwise.
177*84e33947SAndroid Build Coastguard Worker  */
178*84e33947SAndroid Build Coastguard Worker bool findServiceHandle(ChppAppState *appContext, const char *name,
179*84e33947SAndroid Build Coastguard Worker                        uint8_t *handle);
180*84e33947SAndroid Build Coastguard Worker 
181*84e33947SAndroid Build Coastguard Worker }  // namespace chpp::test
182*84e33947SAndroid Build Coastguard Worker 
183*84e33947SAndroid Build Coastguard Worker #endif  // CHPP_TRANSPORT_UTIL_H_
184