| /****************************************************************************** | |
| * | |
| * 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 ATP_H_ | |
| #define ATP_H_ | |
| //************************************ Includes ******************************** | |
| #include <stdint.h> | |
| #include <string.h> | |
| //************************************ Defines ********************************* | |
| #define ATP_MAX_ALLOWED_LENGTH 39 | |
| #define EXPECTED_ATP_LENGTH 37 | |
| #define DEFAULT_PWT 50 | |
| #define LEN_LENGTH_IN_ATP 1 | |
| #define LEN_OFFSET_IN_ATP 0 | |
| #define VENDOR_ID_OFFSET_IN_ATP 1 | |
| #define VENDOR_ID_LENGTH_IN_ATP 5 | |
| #define BWT_OFFSET_IN_ATP 6 | |
| #define BWT_LENGTH_IN_ATP 2 | |
| #define CWT_OFFSET_IN_ATP 8 | |
| #define PWT_OFFSET_IN_ATP 9 | |
| #define MSF_OFFSET_IN_ATP 10 | |
| #define MSF_LENGTH_IN_ATP 2 | |
| #define CHECKSUM_TYPE_OFFSET_IN_ATP 12 | |
| #define IFSC_OFFSET_IN_ATP 13 | |
| #define HISTORICAL_CHARACTER_OFFSET_IN_ATP 14 | |
| #define HISTORICAL_CHARACTER_LENGTH_IN_ATP 22 | |
| #define CHECKSUM_OFFSET_IN_ATP 36 | |
| #define CRC_LENGTH_IN_ATP 2 | |
| //************************************ Structs ********************************* | |
| typedef enum { LRC, CRC } ChecksumType; | |
| typedef struct { | |
| uint8_t len; | |
| char vendorID[5]; | |
| uint16_t bwt; | |
| uint8_t cwt; | |
| uint8_t pwt; | |
| uint16_t msf; | |
| ChecksumType checksumType; | |
| uint8_t ifsc; | |
| char historicalCharacter[22]; | |
| uint16_t checksum; | |
| } Atp; | |
| /** | |
| * This is the extern field that the whole system will have access to. | |
| */ | |
| extern Atp ATP; | |
| /** | |
| * 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 Atp_getChecksumValue(uint8_t *array, int checksumStartPosition); | |
| /** | |
| * Sets the ATP struct that will be available for the whole system. | |
| * | |
| * @param baAtp The ATP as a byte array. | |
| * | |
| * @return 0 If everything is Ok, -1 otherwise. | |
| */ | |
| int Atp_setAtp(uint8_t *baAtp); | |
| /** | |
| * Gets the ATP stored | |
| * | |
| * | |
| * @return pointer to the ATP array. | |
| */ | |
| uint8_t *Atp_getAtp(); | |
| #endif /* ATP_H_ */ |