blob: fcbf13e98dfa5473db1db4b9bb86aacf5c46d5a2 [file] [log] [blame]
/*
* Copyright 2012-2020 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.
*/
#ifndef PHTMLUWB_H
#define PHTMLUWB_H
#include <memory>
#include <phUwbCommon.h>
#include <phMessageQueue.h>
/*
* Message posted by Reader thread uponl
* completion of requested operation
*/
#define PH_TMLUWB_READ_MESSAGE (0xAA)
/*
* Message posted by Writer thread upon
* completion of requested operation
*/
#define PH_TMLUWB_WRITE_MESSAGE (0x55)
/*
* Value indicates to reset device
*/
#define PH_TMLUWB_RESETDEVICE (0x00008001)
/*
***************************Globals,Structure and Enumeration ******************
*/
/*
* Transaction (Tx/Rx) completion information structure of TML
*
* This structure holds the completion callback information of the
* transaction passed from the TML layer to the Upper layer
* along with the completion callback.
*
* The value of field wStatus can be interpreted as:
*
* - UWBSTATUS_SUCCESS Transaction performed
* successfully.
* - UWBSTATUS_FAILED Failed to wait on Read/Write
* operation.
* - UWBSTATUS_INSUFFICIENT_STORAGE Not enough memory to store data in
* case of read.
* - UWBSTATUS_BOARD_COMMUNICATION_ERROR Failure to Read/Write from the
* file or timeout.
*/
struct phTmlUwb_WriteTransactInfo {
tHAL_UWB_STATUS wStatus;
const uint8_t* pBuff;
size_t wLength;
};
struct phTmlUwb_ReadTransactInfo {
tHAL_UWB_STATUS wStatus;
uint8_t* pBuff;
size_t wLength;
};
// IO completion callback to Upper Layer
// pContext - Context provided by upper layer
// pInfo - Transaction info. See phTmlUwb_[Read|Write]TransactInfo
using ReadCallback = void (void *pContext, phTmlUwb_ReadTransactInfo* pInfo);
using WriteCallback = void (void *pContext, phTmlUwb_WriteTransactInfo* pInfo);
/*
* Enum definition contains supported ioctl control codes.
*
* phTmlUwb_Spi_IoCtl
*/
enum class phTmlUwb_ControlCode_t {
Invalid = 0,
SetPower,
EnableFwdMode,
EnableThroughPut,
EseReset,
};
/* Function declarations */
tHAL_UWB_STATUS phTmlUwb_Init(const char* pDevName, std::shared_ptr<MessageQueue<phLibUwb_Message>> pClientMq);
tHAL_UWB_STATUS phTmlUwb_Shutdown(void);
void phTmlUwb_Suspend(void);
void phTmlUwb_Resume(void);
// Writer: caller should call this for every write io
tHAL_UWB_STATUS phTmlUwb_Write(const uint8_t* pBuffer, size_t wLength,
WriteCallback pTmlWriteComplete,
void* pContext);
// Reader: caller calls this once, callback will be called for every received packet.
// and call StopRead() to unscribe RX packet.
tHAL_UWB_STATUS phTmlUwb_StartRead(ReadCallback pTmlReadComplete, void* pContext);
void phTmlUwb_StopRead();
void phTmlUwb_Chip_Reset(void);
void phTmlUwb_DeferredCall(std::shared_ptr<phLibUwb_Message> msg);
#endif /* PHTMLUWB_H */