195faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna/******************************************************************************
295faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *
395faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *  Copyright (C) 2018 NXP Semiconductors
495faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *
595faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *  Licensed under the Apache License, Version 2.0 (the "License");
695faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *  you may not use this file except in compliance with the License.
795faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *  You may obtain a copy of the License at
895faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *
995faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *  http://www.apache.org/licenses/LICENSE-2.0
1095faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *
1195faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *  Unless required by applicable law or agreed to in writing, software
1295faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *  distributed under the License is distributed on an "AS IS" BASIS,
1395faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1495faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *  See the License for the specific language governing permissions and
1595faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *  limitations under the License.
1695faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna *
1795faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna ******************************************************************************/
1895faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna#include "NxpEse.h"
1995faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna#include "phNxpEse_Api.h"
2095faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna
2195faecf9216aeb01b97ca5416ef9cc085303015fLove Khannanamespace vendor {
2295faecf9216aeb01b97ca5416ef9cc085303015fLove Khannanamespace nxp {
2395faecf9216aeb01b97ca5416ef9cc085303015fLove Khannanamespace nxpese {
2495faecf9216aeb01b97ca5416ef9cc085303015fLove Khannanamespace V1_0 {
2595faecf9216aeb01b97ca5416ef9cc085303015fLove Khannanamespace implementation {
2695faecf9216aeb01b97ca5416ef9cc085303015fLove Khannausing ::android::hardware::hidl_vec;
2795faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna// Methods from ::vendor::nxp::nxpese::V1_0::INxpEse follow.
2895faecf9216aeb01b97ca5416ef9cc085303015fLove KhannaReturn<void> NxpEse::ioctl(uint64_t ioctlType,
2995faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna                           const hidl_vec<uint8_t>& inOutData,
3095faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna                           ioctl_cb _hidl_cb) {
3195faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna  ese_nxp_IoctlInOutData_t inpOutData;
3295faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna  ese_nxp_IoctlInOutData_t* pInOutData =
3395faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna      (ese_nxp_IoctlInOutData_t*)&inOutData[0];
3495faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna
3595faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna  /*data from proxy->stub is copied to local data which can be updated by
3695faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna   * underlying HAL implementation since its an inout argument*/
3795faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna  memcpy(&inpOutData, pInOutData, sizeof(ese_nxp_IoctlInOutData_t));
3895faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna  ESESTATUS status = phNxpEse_spiIoctl(ioctlType, &inpOutData);
3995faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna
4095faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna  /*copy data and additional fields indicating status of ioctl operation
4195faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna   * and context of the caller. Then invoke the corresponding proxy callback*/
4295faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna  inpOutData.out.ioctlType = ioctlType;
4395faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna  inpOutData.out.context = pInOutData->inp.context;
4495faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna  inpOutData.out.result = status;
4595faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna  hidl_vec<uint8_t> outputData;
4695faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna  outputData.setToExternal((uint8_t*)&inpOutData.out,
4795faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna                           sizeof(ese_nxp_ExtnOutputData_t));
4895faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna  _hidl_cb(outputData);
4995faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna  return Void();
5095faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna}
5195faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna
5295faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna// Methods from ::android::hidl::base::V1_0::IBase follow.
5395faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna
5495faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna}  // namespace implementation
5595faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna}  // namespace V1_0
5695faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna}  // namespace nxpese
5795faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna}  // namespace nxp
5895faecf9216aeb01b97ca5416ef9cc085303015fLove Khanna}  // namespace vendor
59