You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
3.9 KiB
140 lines
3.9 KiB
/******************************************************************************
|
|
*
|
|
* Copyright (C) 2018 ST Microelectronics S.A.
|
|
*
|
|
* 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 TPDU_H_
|
|
#define TPDU_H_
|
|
|
|
//*********************************** Includes *********************************
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "Atp.h"
|
|
|
|
//************************************ Defines *********************************
|
|
#define NAD_OFFSET_IN_TPDU 0
|
|
#define PCB_OFFSET_IN_TPDU 1
|
|
#define LEN_OFFSET_IN_TPDU 2
|
|
#define DATA_OFFSET_IN_TPDU 3
|
|
|
|
#define TPDU_MAX_LENGTH 259
|
|
#define TPDU_PROLOGUE_LENGTH 3
|
|
#define TPDU_MAX_DATA_LENGTH 254
|
|
#define TPDU_CRC_LENGTH 2
|
|
#define TPDU_LRC_LENGTH 1
|
|
|
|
//************************************ Structs *********************************
|
|
typedef struct {
|
|
uint8_t nad;
|
|
uint8_t pcb;
|
|
uint8_t len;
|
|
uint8_t *data;
|
|
uint16_t checksum;
|
|
} Tpdu;
|
|
|
|
typedef enum { IBlock, RBlock, SBlock } TpduType;
|
|
|
|
typedef enum { ErrorFree, ChecksumError, OtherErrors } RBlockType;
|
|
|
|
//************************************ Functions *******************************
|
|
|
|
/**
|
|
* Forms a byte array representing the given TPDU.
|
|
*
|
|
* @param structTpdu The TPDU struct to be converted to byte array.
|
|
* @param baTpdu The memory position where to store the formed byte array.
|
|
*
|
|
* @return The length of the formed array
|
|
*/
|
|
uint16_t Tpdu_toByteArray(Tpdu *structTpdu, uint8_t *baTpdu);
|
|
|
|
/**
|
|
* Checks that the checksum in the TPDU is as expected.
|
|
*
|
|
* @param tpdu The TPDU whose checksum needs to be checked.
|
|
*
|
|
* @return true if checksum is ok, false otherwise.
|
|
*/
|
|
bool Tpdu_isChecksumOk(Tpdu *tpdu);
|
|
|
|
/**
|
|
* Forms a TPDU with the specified fields.
|
|
*
|
|
* @param nad The NAD byte of the TPDU.
|
|
* @param pac The PCB byte of the TPDU.
|
|
* @param len The length of the data.
|
|
* @param data The data of the TPDU.
|
|
* @pram tpdu The memory position where the formed TPDU will be stored.
|
|
*
|
|
* @return 0 if everything went ok, -1 otherwise.
|
|
*/
|
|
int Tpdu_formTpdu(uint8_t nad, uint8_t pcb, uint8_t len, uint8_t *data,
|
|
Tpdu *tpdu);
|
|
|
|
/**
|
|
* Returns the checksum value in the form of a byte array.
|
|
*
|
|
* @param tpdu The TPDU struct from where to get the checksum value.
|
|
* @param checksumBytes The memory position where to store the result.
|
|
*/
|
|
void Tpdu_getChecksumBytes(Tpdu *tpdu, uint8_t *checksumBytes);
|
|
|
|
/**
|
|
* Gets the value of the checksum stored in the array.
|
|
*
|
|
* @param array The array that contains the checksum.
|
|
* @param checksumStartPosition The position where the checksum starts in array.
|
|
*
|
|
* @return The value of the checksum.
|
|
*/
|
|
uint16_t Tpdu_getChecksumValue(uint8_t *array, int checksumStartPosition,
|
|
ChecksumType checksumType);
|
|
|
|
/**
|
|
* Returns the type of the TPDU.
|
|
*
|
|
* @param the tpdu the type has to be get.
|
|
*
|
|
* @return The TPDU type of the tpdu.
|
|
*/
|
|
TpduType Tpdu_getType(Tpdu *tpdu);
|
|
|
|
/**
|
|
* Copy Tpdu Struct.
|
|
*
|
|
* @param dest
|
|
* src
|
|
*
|
|
* @return void
|
|
*/
|
|
void Tpdu_copy(Tpdu *dest, Tpdu *src);
|
|
|
|
/**
|
|
* Converts a TPDU into a hex string.
|
|
*
|
|
* @param tpdu The TPDU to be converted to a string.
|
|
* @param hexStringBuffer The output buffer.
|
|
*/
|
|
void Tpdu_toHexString(Tpdu *tpdu, uint8_t *hexStringBuffer);
|
|
|
|
#endif /* TPDU_H_ */
|