1 /****************************************************************************** 2 * 3 * Copyright (C) 2018 ST Microelectronics S.A. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 * 18 ******************************************************************************/ 19 #ifndef ATP_H_ 20 #define ATP_H_ 21 22 //************************************ Includes ******************************** 23 #include <stdint.h> 24 #include <string.h> 25 //************************************ Defines ********************************* 26 27 #define ATP_MAX_ALLOWED_LENGTH 39 28 29 #define EXPECTED_ATP_LENGTH 37 30 31 #define DEFAULT_PWT 50 32 33 #define LEN_LENGTH_IN_ATP 1 34 #define LEN_OFFSET_IN_ATP 0 35 #define VENDOR_ID_OFFSET_IN_ATP 1 36 #define VENDOR_ID_LENGTH_IN_ATP 5 37 #define BWT_OFFSET_IN_ATP 6 38 #define BWT_LENGTH_IN_ATP 2 39 #define CWT_OFFSET_IN_ATP 8 40 #define PWT_OFFSET_IN_ATP 9 41 #define MSF_OFFSET_IN_ATP 10 42 #define MSF_LENGTH_IN_ATP 2 43 #define CHECKSUM_TYPE_OFFSET_IN_ATP 12 44 #define IFSC_OFFSET_IN_ATP 13 45 #define HISTORICAL_CHARACTER_OFFSET_IN_ATP 14 46 #define HISTORICAL_CHARACTER_LENGTH_IN_ATP 22 47 #define CHECKSUM_OFFSET_IN_ATP 36 48 #define CRC_LENGTH_IN_ATP 2 49 50 //************************************ Structs ********************************* 51 typedef enum { LRC, CRC } ChecksumType; 52 53 typedef struct { 54 uint8_t len; 55 char vendorID[5]; 56 uint16_t bwt; 57 uint8_t cwt; 58 uint8_t pwt; 59 uint16_t msf; 60 ChecksumType checksumType; 61 uint8_t ifsc; 62 char historicalCharacter[22]; 63 uint16_t checksum; 64 } Atp; 65 66 /** 67 * This is the extern field that the whole system will have access to. 68 */ 69 extern Atp ATP; 70 71 /** 72 * Gets the value of the checksum stored in the array. 73 * 74 * @param array The array that contains the checksum. 75 * @param checksumStartPosition The position where the checksum starts in array. 76 * 77 * @return The value of the checksum. 78 */ 79 uint16_t Atp_getChecksumValue(uint8_t *array, int checksumStartPosition); 80 81 /** 82 * Sets the ATP struct that will be available for the whole system. 83 * 84 * @param baAtp The ATP as a byte array. 85 * 86 * @return 0 If everything is Ok, -1 otherwise. 87 */ 88 int Atp_setAtp(uint8_t *baAtp); 89 90 /** 91 * Gets the ATP stored 92 * 93 * 94 * @return pointer to the ATP array. 95 */ 96 uint8_t *Atp_getAtp(); 97 98 #endif /* ATP_H_ */ 99