xref: /aosp_15_r20/system/chre/chpp/include/chpp/clients/loopback.h (revision 84e339476a462649f82315436d70fd732297a399)
1*84e33947SAndroid Build Coastguard Worker /*
2*84e33947SAndroid Build Coastguard Worker  * Copyright (C) 2020 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_CLIENT_LOOPBACK_H_
18*84e33947SAndroid Build Coastguard Worker #define CHPP_CLIENT_LOOPBACK_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 
26*84e33947SAndroid Build Coastguard Worker #ifdef __cplusplus
27*84e33947SAndroid Build Coastguard Worker extern "C" {
28*84e33947SAndroid Build Coastguard Worker #endif
29*84e33947SAndroid Build Coastguard Worker 
30*84e33947SAndroid Build Coastguard Worker /**
31*84e33947SAndroid Build Coastguard Worker  * Loopback Test Results.
32*84e33947SAndroid Build Coastguard Worker  */
33*84e33947SAndroid Build Coastguard Worker struct ChppLoopbackTestResult {
34*84e33947SAndroid Build Coastguard Worker   enum ChppAppErrorCode error;  // Indicates success or error type
35*84e33947SAndroid Build Coastguard Worker   size_t requestLen;   // Length of the loopback request datagram, including app
36*84e33947SAndroid Build Coastguard Worker                        // header
37*84e33947SAndroid Build Coastguard Worker   size_t responseLen;  // Length of the loopback response datagram, including
38*84e33947SAndroid Build Coastguard Worker                        // app header
39*84e33947SAndroid Build Coastguard Worker   size_t firstError;   // Location of the first incorrect byte in the response
40*84e33947SAndroid Build Coastguard Worker                        // datagram
41*84e33947SAndroid Build Coastguard Worker   size_t byteErrors;   // Number of incorrect bytes in the response datagram
42*84e33947SAndroid Build Coastguard Worker   uint64_t rttNs;      // Round trip time
43*84e33947SAndroid Build Coastguard Worker };
44*84e33947SAndroid Build Coastguard Worker 
45*84e33947SAndroid Build Coastguard Worker /**
46*84e33947SAndroid Build Coastguard Worker  * Minimum header length for a loopback packet. Everything afterwards is
47*84e33947SAndroid Build Coastguard Worker  * considered a payload and is looped back.
48*84e33947SAndroid Build Coastguard Worker  */
49*84e33947SAndroid Build Coastguard Worker #define CHPP_LOOPBACK_HEADER_LEN sizeof(struct ChppAppHeader)
50*84e33947SAndroid Build Coastguard Worker 
51*84e33947SAndroid Build Coastguard Worker /************************************************
52*84e33947SAndroid Build Coastguard Worker  *  Public functions
53*84e33947SAndroid Build Coastguard Worker  ***********************************************/
54*84e33947SAndroid Build Coastguard Worker 
55*84e33947SAndroid Build Coastguard Worker /**
56*84e33947SAndroid Build Coastguard Worker  * Initializes the client.
57*84e33947SAndroid Build Coastguard Worker  *
58*84e33947SAndroid Build Coastguard Worker  * @param appState Application layer state.
59*84e33947SAndroid Build Coastguard Worker  */
60*84e33947SAndroid Build Coastguard Worker void chppLoopbackClientInit(struct ChppAppState *appState);
61*84e33947SAndroid Build Coastguard Worker 
62*84e33947SAndroid Build Coastguard Worker /**
63*84e33947SAndroid Build Coastguard Worker  * Deinitializes the client.
64*84e33947SAndroid Build Coastguard Worker  *
65*84e33947SAndroid Build Coastguard Worker  * @param appState Application layer state.
66*84e33947SAndroid Build Coastguard Worker  */
67*84e33947SAndroid Build Coastguard Worker void chppLoopbackClientDeinit(struct ChppAppState *appState);
68*84e33947SAndroid Build Coastguard Worker 
69*84e33947SAndroid Build Coastguard Worker /**
70*84e33947SAndroid Build Coastguard Worker  * Dispatches an Rx Datagram from the transport layer that is determined to
71*84e33947SAndroid Build Coastguard Worker  * be for the CHPP Loopback Client.
72*84e33947SAndroid Build Coastguard Worker  *
73*84e33947SAndroid Build Coastguard Worker  * @param appState Application layer state.
74*84e33947SAndroid Build Coastguard Worker  * @param response Input (response) datagram. Cannot be null.
75*84e33947SAndroid Build Coastguard Worker  * @param len Length of input data in bytes.
76*84e33947SAndroid Build Coastguard Worker  */
77*84e33947SAndroid Build Coastguard Worker bool chppDispatchLoopbackServiceResponse(struct ChppAppState *appState,
78*84e33947SAndroid Build Coastguard Worker                                          const uint8_t *response, size_t len);
79*84e33947SAndroid Build Coastguard Worker 
80*84e33947SAndroid Build Coastguard Worker /**
81*84e33947SAndroid Build Coastguard Worker  * Initiates a CHPP service loopback from the client side.
82*84e33947SAndroid Build Coastguard Worker  * Note that only one loopback test may be run at any time on each client.
83*84e33947SAndroid Build Coastguard Worker  *
84*84e33947SAndroid Build Coastguard Worker  * @param appState Application layer state.
85*84e33947SAndroid Build Coastguard Worker  */
86*84e33947SAndroid Build Coastguard Worker struct ChppLoopbackTestResult chppRunLoopbackTest(struct ChppAppState *appState,
87*84e33947SAndroid Build Coastguard Worker                                                   const uint8_t *buf,
88*84e33947SAndroid Build Coastguard Worker                                                   size_t len);
89*84e33947SAndroid Build Coastguard Worker 
90*84e33947SAndroid Build Coastguard Worker #ifdef __cplusplus
91*84e33947SAndroid Build Coastguard Worker }
92*84e33947SAndroid Build Coastguard Worker #endif
93*84e33947SAndroid Build Coastguard Worker 
94*84e33947SAndroid Build Coastguard Worker #endif  // CHPP_CLIENT_LOOPBACK_H_
95