82 lines
2.5 KiB
C++
82 lines
2.5 KiB
C++
/******************************************************************************
|
|
*
|
|
* Copyright 2020-2021 NXP
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
******************************************************************************/
|
|
|
|
#pragma once
|
|
#include <android-base/logging.h>
|
|
#include <android-base/stringprintf.h>
|
|
#include <hardware/hardware.h>
|
|
#include <hidl/MQDescriptor.h>
|
|
#include <hidl/Status.h>
|
|
#include <string.h>
|
|
#include "phNxpEse_Api.h"
|
|
|
|
using ::android::hardware::hidl_vec;
|
|
#define OSU_PROP_CLA 0x80
|
|
#define OSU_PROP_INS 0xDF
|
|
#define OSU_PROP_RST_P1 0xEF
|
|
|
|
#define ISO7816_BASIC_CHANNEL 0x00
|
|
#define ISO7816_CLA_OFFSET 0
|
|
#define ISO7816_INS_OFFSET 1
|
|
#define ISO7816_P1_OFFSET 2
|
|
#define ISO7816_P2_OFFSET 3
|
|
#define ISO7816_LC_OFFSET 4
|
|
#define ISO7816_EXTENDED_LC_VALUE 0
|
|
#define ISO7816_SHORT_APDU_HEADER 5
|
|
#define ISO7816_EXTENDED_APDU_HEADER 7
|
|
#define ISO7816_CLA_CHN_MASK 0x03
|
|
#define IS_OSU_MODE(...) (OsuHalExtn::getInstance().isOsuMode(__VA_ARGS__))
|
|
|
|
class OsuHalExtn {
|
|
public:
|
|
typedef enum {
|
|
NON_OSU_MODE, // Normal Mode : All HAL APIs allowed
|
|
OSU_PROP_MODE, // OSU mode : Only OSU JAR command allowed
|
|
OSU_GP_MODE, // OSU Mode : GP command in the OSU mode
|
|
OSU_RST_MODE, // OSU mode : Proprietary HARD reset
|
|
OSU_BLOCKED_MODE, // OSU mode : Command not allowed return error
|
|
} OsuApduMode;
|
|
|
|
typedef enum {
|
|
INIT,
|
|
OPENBASIC,
|
|
OPENLOGICAL,
|
|
GETATR,
|
|
TRANSMIT,
|
|
CLOSE,
|
|
} SecureElementAPI;
|
|
|
|
static OsuHalExtn& getInstance();
|
|
|
|
OsuApduMode isOsuMode(const hidl_vec<uint8_t>& evt, uint8_t type,
|
|
phNxpEse_data* pCmdData = nullptr);
|
|
bool isOsuMode(uint8_t type, uint8_t channel = 0xFF);
|
|
virtual ~OsuHalExtn();
|
|
OsuHalExtn() noexcept;
|
|
void checkAndUpdateOsuMode();
|
|
unsigned long int getOSUMaxWtxCount();
|
|
|
|
private:
|
|
bool isAppOSUMode;
|
|
bool isJcopOSUMode;
|
|
static const hidl_vec<uint8_t> osu_aid[10];
|
|
OsuApduMode checkTransmit(uint8_t* input, uint32_t* outLength,
|
|
const hidl_vec<uint8_t>& data);
|
|
bool isOsuMode();
|
|
};
|