Trung Nguyen
/
FINAL_PROJECT_4180
asdasdasd
Fork of FINAL_PROJECT_4180 by
FPScanner.h@14:ca57ad53761b, 2016-11-23 (annotated)
- Committer:
- xemnas214
- Date:
- Wed Nov 23 01:07:10 2016 +0000
- Revision:
- 14:ca57ad53761b
- Parent:
- 2:1b1c0502bb08
iotlockkkk;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nyengele | 2:1b1c0502bb08 | 1 | /* |
nyengele | 2:1b1c0502bb08 | 2 | FPScanner.h v1.0 - Library for controlling the GT-511C3 Finger Print Scanner (FPS) |
nyengele | 2:1b1c0502bb08 | 3 | Created by Josh Hawley, July 23rd 2013 |
nyengele | 2:1b1c0502bb08 | 4 | Licensed for non-commercial use, must include this license message |
nyengele | 2:1b1c0502bb08 | 5 | basically, Feel free to hack away at it, but just give me credit for my work =) |
nyengele | 2:1b1c0502bb08 | 6 | TLDR; Wil Wheaton's Law |
nyengele | 2:1b1c0502bb08 | 7 | */ |
nyengele | 2:1b1c0502bb08 | 8 | |
nyengele | 2:1b1c0502bb08 | 9 | #ifndef FPScanner_H |
nyengele | 2:1b1c0502bb08 | 10 | #define FPScanner_H |
nyengele | 2:1b1c0502bb08 | 11 | |
nyengele | 2:1b1c0502bb08 | 12 | #include "mbed.h" |
nyengele | 2:1b1c0502bb08 | 13 | |
nyengele | 2:1b1c0502bb08 | 14 | typedef uint8_t byte; |
nyengele | 2:1b1c0502bb08 | 15 | typedef uint16_t word; |
nyengele | 2:1b1c0502bb08 | 16 | |
nyengele | 2:1b1c0502bb08 | 17 | |
nyengele | 2:1b1c0502bb08 | 18 | class Command_Packet |
nyengele | 2:1b1c0502bb08 | 19 | { |
nyengele | 2:1b1c0502bb08 | 20 | public: |
nyengele | 2:1b1c0502bb08 | 21 | class Commands |
nyengele | 2:1b1c0502bb08 | 22 | { |
nyengele | 2:1b1c0502bb08 | 23 | public: |
nyengele | 2:1b1c0502bb08 | 24 | enum Commands_Enum |
nyengele | 2:1b1c0502bb08 | 25 | { |
nyengele | 2:1b1c0502bb08 | 26 | NotSet = 0x00, // Default value for enum. Scanner will return error if sent this. |
nyengele | 2:1b1c0502bb08 | 27 | Open = 0x01, // Open Initialization |
nyengele | 2:1b1c0502bb08 | 28 | Close = 0x02, // Close Termination |
nyengele | 2:1b1c0502bb08 | 29 | UsbInternalCheck = 0x03, // UsbInternalCheck Check if the connected USB device is valid |
nyengele | 2:1b1c0502bb08 | 30 | ChangeEBaudRate = 0x04, // ChangeBaudrate Change UART baud rate |
nyengele | 2:1b1c0502bb08 | 31 | SetIAPMode = 0x05, // SetIAPMode Enter IAP Mode In this mode, FW Upgrade is available |
nyengele | 2:1b1c0502bb08 | 32 | CmosLed = 0x12, // CmosLed Control CMOS LED |
nyengele | 2:1b1c0502bb08 | 33 | GetEnrollCount = 0x20, // Get enrolled fingerprint count |
nyengele | 2:1b1c0502bb08 | 34 | CheckEnrolled = 0x21, // Check whether the specified ID is already enrolled |
nyengele | 2:1b1c0502bb08 | 35 | EnrollStart = 0x22, // Start an enrollment |
nyengele | 2:1b1c0502bb08 | 36 | Enroll1 = 0x23, // Make 1st template for an enrollment |
nyengele | 2:1b1c0502bb08 | 37 | Enroll2 = 0x24, // Make 2nd template for an enrollment |
nyengele | 2:1b1c0502bb08 | 38 | Enroll3 = 0x25, // Make 3rd template for an enrollment, merge three templates into one template, save merged template to the database |
nyengele | 2:1b1c0502bb08 | 39 | IsPressFinger = 0x26, // Check if a finger is placed on the sensor |
nyengele | 2:1b1c0502bb08 | 40 | DeleteID = 0x40, // Delete the fingerprint with the specified ID |
nyengele | 2:1b1c0502bb08 | 41 | DeleteAll = 0x41, // Delete all fingerprints from the database |
nyengele | 2:1b1c0502bb08 | 42 | Verify1_1 = 0x50, // Verification of the capture fingerprint image with the specified ID |
nyengele | 2:1b1c0502bb08 | 43 | Identify1_N = 0x51, // Identification of the capture fingerprint image with the database |
nyengele | 2:1b1c0502bb08 | 44 | VerifyTemplate1_1 = 0x52, // Verification of a fingerprint template with the specified ID |
nyengele | 2:1b1c0502bb08 | 45 | IdentifyTemplate1_N = 0x53, // Identification of a fingerprint template with the database |
nyengele | 2:1b1c0502bb08 | 46 | CaptureFinger = 0x60, // Capture a fingerprint image(256x256) from the sensor |
nyengele | 2:1b1c0502bb08 | 47 | MakeTemplate = 0x61, // Make template for transmission |
nyengele | 2:1b1c0502bb08 | 48 | GetImage = 0x62, // Download the captured fingerprint image(256x256) |
nyengele | 2:1b1c0502bb08 | 49 | GetRawImage = 0x63, // Capture & Download raw fingerprint image(320x240) |
nyengele | 2:1b1c0502bb08 | 50 | GetTemplate = 0x70, // Download the template of the specified ID |
nyengele | 2:1b1c0502bb08 | 51 | SetTemplate = 0x71, // Upload the template of the specified ID |
nyengele | 2:1b1c0502bb08 | 52 | GetDatabaseStart = 0x72, // Start database download, obsolete |
nyengele | 2:1b1c0502bb08 | 53 | GetDatabaseEnd = 0x73, // End database download, obsolete |
nyengele | 2:1b1c0502bb08 | 54 | UpgradeFirmware = 0x80, // Not supported |
nyengele | 2:1b1c0502bb08 | 55 | UpgradeISOCDImage = 0x81, // Not supported |
nyengele | 2:1b1c0502bb08 | 56 | Ack = 0x30, // Acknowledge. |
nyengele | 2:1b1c0502bb08 | 57 | Nack = 0x31 // Non-acknowledge |
nyengele | 2:1b1c0502bb08 | 58 | }; |
nyengele | 2:1b1c0502bb08 | 59 | }; |
nyengele | 2:1b1c0502bb08 | 60 | |
nyengele | 2:1b1c0502bb08 | 61 | Commands::Commands_Enum Command; |
nyengele | 2:1b1c0502bb08 | 62 | byte Parameter[4]; // Parameter 4 bytes, changes meaning depending on command |
nyengele | 2:1b1c0502bb08 | 63 | byte* GetPacketBytes(); // returns the bytes to be transmitted |
nyengele | 2:1b1c0502bb08 | 64 | void ParameterFromInt(int i); |
nyengele | 2:1b1c0502bb08 | 65 | |
nyengele | 2:1b1c0502bb08 | 66 | Command_Packet(); |
nyengele | 2:1b1c0502bb08 | 67 | |
nyengele | 2:1b1c0502bb08 | 68 | private: |
nyengele | 2:1b1c0502bb08 | 69 | static const byte COMMAND_START_CODE_1 = 0x55; // Static byte to mark the beginning of a command packet - never changes |
nyengele | 2:1b1c0502bb08 | 70 | static const byte COMMAND_START_CODE_2 = 0xAA; // Static byte to mark the beginning of a command packet - never changes |
nyengele | 2:1b1c0502bb08 | 71 | static const byte COMMAND_DEVICE_ID_1 = 0x01; // Device ID Byte 1 (lesser byte) - theoretically never changes |
nyengele | 2:1b1c0502bb08 | 72 | static const byte COMMAND_DEVICE_ID_2 = 0x00; // Device ID Byte 2 (greater byte) - theoretically never changes |
nyengele | 2:1b1c0502bb08 | 73 | byte command[2]; // Command 2 bytes |
nyengele | 2:1b1c0502bb08 | 74 | |
nyengele | 2:1b1c0502bb08 | 75 | word _CalculateChecksum(); // Checksum is calculated using byte addition |
nyengele | 2:1b1c0502bb08 | 76 | byte GetHighByte(word w); |
nyengele | 2:1b1c0502bb08 | 77 | byte GetLowByte(word w); |
nyengele | 2:1b1c0502bb08 | 78 | }; |
nyengele | 2:1b1c0502bb08 | 79 | |
nyengele | 2:1b1c0502bb08 | 80 | |
nyengele | 2:1b1c0502bb08 | 81 | /* |
nyengele | 2:1b1c0502bb08 | 82 | Response_Packet represents the returned data from the finger print scanner |
nyengele | 2:1b1c0502bb08 | 83 | */ |
nyengele | 2:1b1c0502bb08 | 84 | class Response_Packet |
nyengele | 2:1b1c0502bb08 | 85 | { |
nyengele | 2:1b1c0502bb08 | 86 | public: |
nyengele | 2:1b1c0502bb08 | 87 | class ErrorCodes |
nyengele | 2:1b1c0502bb08 | 88 | { |
nyengele | 2:1b1c0502bb08 | 89 | public: |
nyengele | 2:1b1c0502bb08 | 90 | enum Errors_Enum |
nyengele | 2:1b1c0502bb08 | 91 | { |
nyengele | 2:1b1c0502bb08 | 92 | NO_ERROR = 0x0000, // Default value. no error |
nyengele | 2:1b1c0502bb08 | 93 | NACK_TIMEOUT = 0x1001, // Obsolete, capture timeout |
nyengele | 2:1b1c0502bb08 | 94 | NACK_INVALID_BAUDRATE = 0x1002, // Obsolete, Invalid serial baud rate |
nyengele | 2:1b1c0502bb08 | 95 | NACK_INVALID_POS = 0x1003, // The specified ID is not between 0~199 |
nyengele | 2:1b1c0502bb08 | 96 | NACK_IS_NOT_USED = 0x1004, // The specified ID is not used |
nyengele | 2:1b1c0502bb08 | 97 | NACK_IS_ALREADY_USED = 0x1005, // The specified ID is already used |
nyengele | 2:1b1c0502bb08 | 98 | NACK_COMM_ERR = 0x1006, // Communication Error |
nyengele | 2:1b1c0502bb08 | 99 | NACK_VERIFY_FAILED = 0x1007, // 1:1 Verification Failure |
nyengele | 2:1b1c0502bb08 | 100 | NACK_IDENTIFY_FAILED = 0x1008, // 1:N Identification Failure |
nyengele | 2:1b1c0502bb08 | 101 | NACK_DB_IS_FULL = 0x1009, // The database is full |
nyengele | 2:1b1c0502bb08 | 102 | NACK_DB_IS_EMPTY = 0x100A, // The database is empty |
nyengele | 2:1b1c0502bb08 | 103 | NACK_TURN_ERR = 0x100B, // Obsolete, Invalid order of the enrollment (The order was not as: EnrollStart -> Enroll1 -> Enroll2 -> Enroll3) |
nyengele | 2:1b1c0502bb08 | 104 | NACK_BAD_FINGER = 0x100C, // Too bad fingerprint |
nyengele | 2:1b1c0502bb08 | 105 | NACK_ENROLL_FAILED = 0x100D, // Enrollment Failure |
nyengele | 2:1b1c0502bb08 | 106 | NACK_IS_NOT_SUPPORTED = 0x100E, // The specified command is not supported |
nyengele | 2:1b1c0502bb08 | 107 | NACK_DEV_ERR = 0x100F, // Device Error, especially if Crypto-Chip is trouble |
nyengele | 2:1b1c0502bb08 | 108 | NACK_CAPTURE_CANCELED = 0x1010, // Obsolete, The capturing is canceled |
nyengele | 2:1b1c0502bb08 | 109 | NACK_INVALID_PARAM = 0x1011, // Invalid parameter |
nyengele | 2:1b1c0502bb08 | 110 | NACK_FINGER_IS_NOT_PRESSED = 0x1012, // Finger is not pressed |
nyengele | 2:1b1c0502bb08 | 111 | INVALID = 0XFFFF // Used when parsing fails |
nyengele | 2:1b1c0502bb08 | 112 | }; |
nyengele | 2:1b1c0502bb08 | 113 | |
nyengele | 2:1b1c0502bb08 | 114 | static Errors_Enum ParseFromBytes(byte high, byte low); |
nyengele | 2:1b1c0502bb08 | 115 | }; |
nyengele | 2:1b1c0502bb08 | 116 | Response_Packet(byte* buffer); |
nyengele | 2:1b1c0502bb08 | 117 | ErrorCodes::Errors_Enum Error; |
nyengele | 2:1b1c0502bb08 | 118 | byte RawBytes[12]; |
nyengele | 2:1b1c0502bb08 | 119 | byte ParameterBytes[4]; |
nyengele | 2:1b1c0502bb08 | 120 | byte ResponseBytes[2]; |
nyengele | 2:1b1c0502bb08 | 121 | bool ACK; |
nyengele | 2:1b1c0502bb08 | 122 | static const byte COMMAND_START_CODE_1 = 0x55; // Static byte to mark the beginning of a command packet - never changes |
nyengele | 2:1b1c0502bb08 | 123 | static const byte COMMAND_START_CODE_2 = 0xAA; // Static byte to mark the beginning of a command packet - never changes |
nyengele | 2:1b1c0502bb08 | 124 | static const byte COMMAND_DEVICE_ID_1 = 0x01; // Device ID Byte 1 (lesser byte) - theoretically never changes |
nyengele | 2:1b1c0502bb08 | 125 | static const byte COMMAND_DEVICE_ID_2 = 0x00; // Device ID Byte 2 (greater byte) - theoretically never changes |
nyengele | 2:1b1c0502bb08 | 126 | int IntFromParameter(); |
nyengele | 2:1b1c0502bb08 | 127 | |
nyengele | 2:1b1c0502bb08 | 128 | private: |
nyengele | 2:1b1c0502bb08 | 129 | bool CheckParsing(byte b, byte propervalue, byte alternatevalue); |
nyengele | 2:1b1c0502bb08 | 130 | word CalculateChecksum(byte* buffer, int length); |
nyengele | 2:1b1c0502bb08 | 131 | byte GetHighByte(word w); |
nyengele | 2:1b1c0502bb08 | 132 | byte GetLowByte(word w); |
nyengele | 2:1b1c0502bb08 | 133 | }; |
nyengele | 2:1b1c0502bb08 | 134 | |
nyengele | 2:1b1c0502bb08 | 135 | |
nyengele | 2:1b1c0502bb08 | 136 | /* |
nyengele | 2:1b1c0502bb08 | 137 | Object for controlling the GT-511C3 Finger Print Scanner (FPS) |
nyengele | 2:1b1c0502bb08 | 138 | */ |
nyengele | 2:1b1c0502bb08 | 139 | class FPScanner |
nyengele | 2:1b1c0502bb08 | 140 | { |
nyengele | 2:1b1c0502bb08 | 141 | |
nyengele | 2:1b1c0502bb08 | 142 | public: |
nyengele | 2:1b1c0502bb08 | 143 | |
nyengele | 2:1b1c0502bb08 | 144 | // Creates a new object to interface with the fingerprint scanner |
nyengele | 2:1b1c0502bb08 | 145 | FPScanner(PinName tx, PinName rx); |
nyengele | 2:1b1c0502bb08 | 146 | |
nyengele | 2:1b1c0502bb08 | 147 | //Initialises the device and gets ready for commands |
nyengele | 2:1b1c0502bb08 | 148 | void Open(); |
nyengele | 2:1b1c0502bb08 | 149 | |
nyengele | 2:1b1c0502bb08 | 150 | // Does not actually do anything (according to the datasheet) |
nyengele | 2:1b1c0502bb08 | 151 | // I implemented open, so had to do closed too... lol |
nyengele | 2:1b1c0502bb08 | 152 | void Close(); |
nyengele | 2:1b1c0502bb08 | 153 | |
nyengele | 2:1b1c0502bb08 | 154 | // Turns on or off the LED backlight |
nyengele | 2:1b1c0502bb08 | 155 | // LED must be on to see fingerprints |
nyengele | 2:1b1c0502bb08 | 156 | // Parameter: true turns on the backlight, false turns it off |
nyengele | 2:1b1c0502bb08 | 157 | // Returns: True if successful, false if not |
nyengele | 2:1b1c0502bb08 | 158 | bool SetLED(bool on); |
nyengele | 2:1b1c0502bb08 | 159 | |
nyengele | 2:1b1c0502bb08 | 160 | // Changes the baud rate of the connection |
nyengele | 2:1b1c0502bb08 | 161 | // Parameter: 9600 - 115200 |
nyengele | 2:1b1c0502bb08 | 162 | // Returns: True if success, false if invalid baud |
nyengele | 2:1b1c0502bb08 | 163 | // NOTE: Untested (don't have a logic level changer and a voltage divider is too slow) |
nyengele | 2:1b1c0502bb08 | 164 | bool ChangeBaudRate(int baud); |
nyengele | 2:1b1c0502bb08 | 165 | |
nyengele | 2:1b1c0502bb08 | 166 | // Gets the number of enrolled fingerprints |
nyengele | 2:1b1c0502bb08 | 167 | // Return: The total number of enrolled fingerprints |
nyengele | 2:1b1c0502bb08 | 168 | int GetEnrollCount(); |
nyengele | 2:1b1c0502bb08 | 169 | |
nyengele | 2:1b1c0502bb08 | 170 | // checks to see if the ID number is in use or not |
nyengele | 2:1b1c0502bb08 | 171 | // Parameter: 0-199 |
nyengele | 2:1b1c0502bb08 | 172 | // Return: True if the ID number is enrolled, false if not |
nyengele | 2:1b1c0502bb08 | 173 | bool CheckEnrolled(int id); |
nyengele | 2:1b1c0502bb08 | 174 | |
nyengele | 2:1b1c0502bb08 | 175 | // Starts the Enrollment Process |
nyengele | 2:1b1c0502bb08 | 176 | // Parameter: 0-199 |
nyengele | 2:1b1c0502bb08 | 177 | // Return: |
nyengele | 2:1b1c0502bb08 | 178 | // 0 - ACK |
nyengele | 2:1b1c0502bb08 | 179 | // 1 - Database is full |
nyengele | 2:1b1c0502bb08 | 180 | // 2 - Invalid Position |
nyengele | 2:1b1c0502bb08 | 181 | // 3 - Position(ID) is already used |
nyengele | 2:1b1c0502bb08 | 182 | int EnrollStart(int id); |
nyengele | 2:1b1c0502bb08 | 183 | |
nyengele | 2:1b1c0502bb08 | 184 | // Gets the first scan of an enrollment |
nyengele | 2:1b1c0502bb08 | 185 | // Return: |
nyengele | 2:1b1c0502bb08 | 186 | // 0 - ACK |
nyengele | 2:1b1c0502bb08 | 187 | // 1 - Enroll Failed |
nyengele | 2:1b1c0502bb08 | 188 | // 2 - Bad finger |
nyengele | 2:1b1c0502bb08 | 189 | // 3 - ID in use |
nyengele | 2:1b1c0502bb08 | 190 | int Enroll1(); |
nyengele | 2:1b1c0502bb08 | 191 | |
nyengele | 2:1b1c0502bb08 | 192 | // Gets the Second scan of an enrollment |
nyengele | 2:1b1c0502bb08 | 193 | // Return: |
nyengele | 2:1b1c0502bb08 | 194 | // 0 - ACK |
nyengele | 2:1b1c0502bb08 | 195 | // 1 - Enroll Failed |
nyengele | 2:1b1c0502bb08 | 196 | // 2 - Bad finger |
nyengele | 2:1b1c0502bb08 | 197 | // 3 - ID in use |
nyengele | 2:1b1c0502bb08 | 198 | int Enroll2(); |
nyengele | 2:1b1c0502bb08 | 199 | |
nyengele | 2:1b1c0502bb08 | 200 | // Gets the Third scan of an enrollment |
nyengele | 2:1b1c0502bb08 | 201 | // Finishes Enrollment |
nyengele | 2:1b1c0502bb08 | 202 | // Return: |
nyengele | 2:1b1c0502bb08 | 203 | // 0 - ACK |
nyengele | 2:1b1c0502bb08 | 204 | // 1 - Enroll Failed |
nyengele | 2:1b1c0502bb08 | 205 | // 2 - Bad finger |
nyengele | 2:1b1c0502bb08 | 206 | // 3 - ID in use |
nyengele | 2:1b1c0502bb08 | 207 | int Enroll3(); |
nyengele | 2:1b1c0502bb08 | 208 | |
nyengele | 2:1b1c0502bb08 | 209 | // Checks to see if a finger is pressed on the FPS |
nyengele | 2:1b1c0502bb08 | 210 | // Return: true if finger pressed, false if not |
nyengele | 2:1b1c0502bb08 | 211 | bool IsPressFinger(); |
nyengele | 2:1b1c0502bb08 | 212 | |
nyengele | 2:1b1c0502bb08 | 213 | // Deletes the specified ID (enrollment) from the database |
nyengele | 2:1b1c0502bb08 | 214 | // Returns: true if successful, false if position invalid |
nyengele | 2:1b1c0502bb08 | 215 | bool DeleteID(int ID); |
nyengele | 2:1b1c0502bb08 | 216 | |
nyengele | 2:1b1c0502bb08 | 217 | // Deletes all IDs (enrollments) from the database |
nyengele | 2:1b1c0502bb08 | 218 | // Returns: true if successful, false if db is empty |
nyengele | 2:1b1c0502bb08 | 219 | bool DeleteAll(); |
nyengele | 2:1b1c0502bb08 | 220 | |
nyengele | 2:1b1c0502bb08 | 221 | // Checks the currently pressed finger against a specific ID |
nyengele | 2:1b1c0502bb08 | 222 | // Parameter: 0-199 (id number to be checked) |
nyengele | 2:1b1c0502bb08 | 223 | // Returns: |
nyengele | 2:1b1c0502bb08 | 224 | // 0 - Verified OK (the correct finger) |
nyengele | 2:1b1c0502bb08 | 225 | // 1 - Invalid Position |
nyengele | 2:1b1c0502bb08 | 226 | // 2 - ID is not in use |
nyengele | 2:1b1c0502bb08 | 227 | // 3 - Verified FALSE (not the correct finger) |
nyengele | 2:1b1c0502bb08 | 228 | int Verify1_1(int id); |
nyengele | 2:1b1c0502bb08 | 229 | |
nyengele | 2:1b1c0502bb08 | 230 | // Checks the currently pressed finger against all enrolled fingerprints |
nyengele | 2:1b1c0502bb08 | 231 | // Returns: |
nyengele | 2:1b1c0502bb08 | 232 | // 0-199: Verified against the specified ID (found, and here is the ID number) |
nyengele | 2:1b1c0502bb08 | 233 | // 200: Failed to find the fingerprint in the database |
nyengele | 2:1b1c0502bb08 | 234 | int Identify1_N(); |
nyengele | 2:1b1c0502bb08 | 235 | |
nyengele | 2:1b1c0502bb08 | 236 | // Captures the currently pressed finger into onboard ram |
nyengele | 2:1b1c0502bb08 | 237 | // Parameter: true for high quality image(slower), false for low quality image (faster) |
nyengele | 2:1b1c0502bb08 | 238 | // Generally, use high quality for enrollment, and low quality for verification/identification |
nyengele | 2:1b1c0502bb08 | 239 | // Returns: True if ok, false if no finger pressed |
nyengele | 2:1b1c0502bb08 | 240 | bool CaptureFinger(bool highquality); |
nyengele | 2:1b1c0502bb08 | 241 | |
nyengele | 2:1b1c0502bb08 | 242 | |
nyengele | 2:1b1c0502bb08 | 243 | // resets the Data_Packet class, and gets ready to download |
nyengele | 2:1b1c0502bb08 | 244 | // Not implemented due to memory restrictions on the arduino |
nyengele | 2:1b1c0502bb08 | 245 | // may revisit this if I find a need for it |
nyengele | 2:1b1c0502bb08 | 246 | //void StartDataDownload(); |
nyengele | 2:1b1c0502bb08 | 247 | |
nyengele | 2:1b1c0502bb08 | 248 | // Returns the next data packet |
nyengele | 2:1b1c0502bb08 | 249 | // Not implemented due to memory restrictions on the arduino |
nyengele | 2:1b1c0502bb08 | 250 | // may revisit this if I find a need for it |
nyengele | 2:1b1c0502bb08 | 251 | //Data_Packet GetNextDataPacket(); |
nyengele | 2:1b1c0502bb08 | 252 | |
nyengele | 2:1b1c0502bb08 | 253 | private: |
nyengele | 2:1b1c0502bb08 | 254 | void SendCommand(byte cmd[], int length); |
nyengele | 2:1b1c0502bb08 | 255 | Response_Packet* GetResponse(); |
nyengele | 2:1b1c0502bb08 | 256 | PinName pin_RX,pin_TX; |
nyengele | 2:1b1c0502bb08 | 257 | Serial _serial; |
nyengele | 2:1b1c0502bb08 | 258 | }; |
nyengele | 2:1b1c0502bb08 | 259 | |
nyengele | 2:1b1c0502bb08 | 260 | |
nyengele | 2:1b1c0502bb08 | 261 | #endif // FPScanner_H |
nyengele | 2:1b1c0502bb08 | 262 |