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