/******************************************************************************
 *
 *  Copyright (C) 2017 Google Inc.
 *
 *  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.
 *
 ******************************************************************************/
#ifndef _DEBUG_NFCSNOOP_
#define _DEBUG_NFCSNOOP_

#include <stdint.h>

#include <string>

#include "nfc_target.h"
#include "nfc_types.h"

#define NFCSNOOZ_CURRENT_VERSION 0x01

// The preamble is stored un-encrypted as the first part
// of the file.
typedef struct nfcsnooz_preamble_t {
  uint8_t version;
  uint64_t last_timestamp_ms;
} __attribute__((__packed__)) nfcsnooz_preamble_t;

// One header for each NCI packet
typedef struct nfcsnooz_header_t {
  uint16_t length;
  uint32_t delta_time_ms;
  uint8_t is_received;
} __attribute__((__packed__)) nfcsnooz_header_t;

// Initializes nfcsnoop memory logging and registers
void debug_nfcsnoop_init(void);

// Writes nfcsnoop data base64 encoded to fd
void debug_nfcsnoop_dump(int fd);

// capture the packet
void nfcsnoop_capture(const NFC_HDR* packet, bool is_received);

// store NCI log to file
bool storeNfcSnoopLogs(std::string filepath, off_t maxFileSize);

// check whether either buffer is under memory threshold
bool buffers_under_threshold();
#endif /* _DEBUG_NFCSNOOP_ */
