diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/.nojekyll @@ -0,0 +1 @@ + diff --git a/Adafruit_UBX.cpp b/Adafruit_UBX.cpp deleted file mode 100644 index c0b7b6b..0000000 --- a/Adafruit_UBX.cpp +++ /dev/null @@ -1,451 +0,0 @@ -/*! - * @file Adafruit_UBX.cpp - * - * @mainpage Arduino library for UBX protocol from u-blox GPS/RTK modules - * - * @section intro_sec Introduction - * - * This is a library for parsing UBX protocol messages from u-blox GPS/RTK modules. - * It works with any Stream-based interface including UART and DDC (I2C). - * - * Designed specifically to work with u-blox GPS/RTK modules - * like NEO-M8P, ZED-F9P, etc. - * - * @section author Author - * - * Written by Your Name for Project Name. - * - * @section license License - * - * MIT license, all text above must be included in any redistribution - */ - -#include "Adafruit_UBX.h" - - - -/*! - * @brief Constructor - * @param stream Reference to a Stream object (Serial, Adafruit_UBloxDDC, etc.) - */ -Adafruit_UBX::Adafruit_UBX(Stream &stream) { - _stream = &stream; - onUBXMessage = NULL; -} - -/*! - * @brief Initializes the UBX parser - * @return Always returns true (initialization is trivial) - */ -bool Adafruit_UBX::begin() { - resetParser(); - return true; -} - - - - -/*! - * @brief Configure the GPS module to output only UBX protocol (disables NMEA) - * @param portID Port identifier (UBX_PORT_DDC, UBX_PORT_UART1, etc.) - * @param checkAck Whether to wait for acknowledgment - * @param timeout_ms Maximum time to wait for acknowledgment in milliseconds - * @return UBXSendStatus indicating success, failure, or timeout - */ -UBXSendStatus Adafruit_UBX::setUBXOnly(UBXPortId portID, bool checkAck, uint16_t timeout_ms) { - UBX_CFG_PRT_t cfgPrt; - - // Zero out the structure - memset(&cfgPrt, 0, sizeof(cfgPrt)); - - // Set the port ID - cfgPrt.fields.portID = portID; - - // Configure the port appropriately - switch (portID) { - case UBX_PORT_DDC: // I2C/DDC port - // Set the I2C address to 0x42 (the default) - // For DDC, the mode field contains the I2C address in bits 7:1 - cfgPrt.fields.mode = 0x42 << 1; // 0x84 - - // Set protocol masks to UBX only - cfgPrt.fields.inProtoMask = UBX_PROTOCOL_UBX; - cfgPrt.fields.outProtoMask = UBX_PROTOCOL_UBX; - break; - - case UBX_PORT_UART1: // Fall through - case UBX_PORT_UART2: // UART ports - // Keep current baud rate (baudRate = 0 keeps current setting) - // Set 8N1 mode for binary protocol - cfgPrt.fields.mode = UBX_UART_MODE_8N1; - // Set protocol masks to UBX only - cfgPrt.fields.inProtoMask = UBX_PROTOCOL_UBX; - cfgPrt.fields.outProtoMask = UBX_PROTOCOL_UBX; - break; - - case UBX_PORT_USB: // USB port - // Set protocol masks to UBX only - cfgPrt.fields.inProtoMask = UBX_PROTOCOL_UBX; - cfgPrt.fields.outProtoMask = UBX_PROTOCOL_UBX; - break; - - case UBX_PORT_SPI: // SPI port - // Set protocol masks to UBX only - cfgPrt.fields.outProtoMask = UBX_PROTOCOL_UBX; - break; - - default: - if (verbose_debug > 0) { - Serial.println(F("UBX: Invalid port ID")); - } - return UBX_SEND_FAIL; // Invalid port ID - } - - // Send the message and wait for acknowledgment if requested - if (checkAck) { - return sendMessageWithAck(UBX_CLASS_CFG, UBX_CFG_PRT, cfgPrt.raw, sizeof(cfgPrt), timeout_ms); - } else { - if (sendMessage(UBX_CLASS_CFG, UBX_CFG_PRT, cfgPrt.raw, sizeof(cfgPrt))) { - return UBX_SEND_SUCCESS; - } else { - return UBX_SEND_FAIL; - } - } -} - - - - -/*! - * @brief Sets the callback function for UBX messages - * @param callback Function pointer to call when a complete UBX message is received - */ -void Adafruit_UBX::setMessageCallback(UBXMessageCallback callback) { - onUBXMessage = callback; -} - -/*! - * @brief Reset the parser state machine - */ -void Adafruit_UBX::resetParser() { - _parserState = WAIT_SYNC_1; - _payloadCounter = 0; - _payloadLength = 0; -} - -/*! - * @brief Calculate UBX checksum according to protocol - * @param buffer Pointer to the data buffer - * @param len Length of data to checksum - * @param checksumA Reference to store the first checksum byte - * @param checksumB Reference to store the second checksum byte - */ -void Adafruit_UBX::calculateChecksum(uint8_t *buffer, uint16_t len, uint8_t &checksumA, uint8_t &checksumB) { - checksumA = 0; - checksumB = 0; - - for (uint16_t i = 0; i < len; i++) { - checksumA += buffer[i]; - checksumB += checksumA; - } -} - -/*! - * @brief Check for new UBX messages and parse them - * @return True if a complete message was parsed - */ -bool Adafruit_UBX::checkMessages() { - bool messageReceived = false; - - // Process all available bytes - while (_stream->available()) { - uint8_t incomingByte = _stream->read(); - - // State machine for UBX protocol parsing - switch (_parserState) { - case WAIT_SYNC_1: - if (incomingByte == UBX_SYNC_CHAR_1) { - _parserState = WAIT_SYNC_2; - _buffer[0] = incomingByte; // Store for checksum calculation - } - break; - - case WAIT_SYNC_2: - if (incomingByte == UBX_SYNC_CHAR_2) { - _parserState = GET_CLASS; - _buffer[1] = incomingByte; // Store for checksum calculation - } else { - resetParser(); // Invalid sync char, reset - } - break; - - case GET_CLASS: - _msgClass = incomingByte; - _buffer[2] = incomingByte; // Store for checksum calculation - _parserState = GET_ID; - break; - - case GET_ID: - _msgId = incomingByte; - _buffer[3] = incomingByte; // Store for checksum calculation - _parserState = GET_LENGTH_1; - break; - - case GET_LENGTH_1: - _payloadLength = incomingByte; - _buffer[4] = incomingByte; // Store for checksum calculation - _parserState = GET_LENGTH_2; - break; - - case GET_LENGTH_2: - _payloadLength |= (incomingByte << 8); - _buffer[5] = incomingByte; // Store for checksum calculation - - if (_payloadLength > MAX_PAYLOAD_SIZE) { - resetParser(); // Payload too large, reset - } else { - _payloadCounter = 0; - _parserState = GET_PAYLOAD; - } - break; - - case GET_PAYLOAD: - if (_payloadCounter < _payloadLength) { - _buffer[6 + _payloadCounter] = incomingByte; - _payloadCounter++; - - if (_payloadCounter == _payloadLength) { - _parserState = GET_CHECKSUM_A; - } - } - break; - - case GET_CHECKSUM_A: - // Calculate expected checksum - calculateChecksum(_buffer + 2, _payloadLength + 4, _checksumA, _checksumB); - - if (incomingByte == _checksumA) { - _parserState = GET_CHECKSUM_B; // Checksum A matches - } else { - resetParser(); // Invalid checksum, reset - } - break; - - case GET_CHECKSUM_B: - if (incomingByte == _checksumB) { - // We have a valid message! - if (onUBXMessage != NULL) { - onUBXMessage(_msgClass, _msgId, _payloadLength, _buffer + 6); // Call the callback with the message - } - messageReceived = true; - - _lastMsgClass = _msgClass; - _lastMsgId = _msgId; - _lastPayloadLength = _payloadLength; - - // Store a small copy of the payload if it's within size limits - if (_payloadLength <= sizeof(_lastPayload)) { - memcpy(_lastPayload, _buffer + 6, _payloadLength); - } - - if (verbose_debug > 0) { - Serial.print("UBX RX: "); - - // Print header (sync chars, class, id, length) - Serial.print("HDR[B5 62 "); - if (_msgClass < 0x10) Serial.print("0"); - Serial.print(_msgClass, HEX); - Serial.print(" "); - if (_msgId < 0x10) Serial.print("0"); - Serial.print(_msgId, HEX); - Serial.print(" "); - - uint8_t lenLSB = _payloadLength & 0xFF; - uint8_t lenMSB = (_payloadLength >> 8) & 0xFF; - if (lenLSB < 0x10) Serial.print("0"); - Serial.print(lenLSB, HEX); - Serial.print(" "); - if (lenMSB < 0x10) Serial.print("0"); - Serial.print(lenMSB, HEX); - Serial.print("] "); - - // Print payload if verbose debug is enabled - if (verbose_debug > 1 && _payloadLength > 0) { - Serial.print("PL["); - for (uint16_t i = 0; i < _payloadLength; i++) { - if (_buffer[6 + i] < 0x10) Serial.print("0"); - Serial.print(_buffer[6 + i], HEX); - Serial.print(" "); - } - Serial.print("] "); - } - - // Print checksum - Serial.print("CS["); - if (_checksumA < 0x10) Serial.print("0"); - Serial.print(_checksumA, HEX); - Serial.print(" "); - if (_checksumB < 0x10) Serial.print("0"); - Serial.print(_checksumB, HEX); - Serial.println("]"); - } - } - - resetParser(); // Reset for next message - break; - } - } - - return messageReceived; -} - - -/*! - * @brief Send a UBX message and wait for acknowledgment - * @param msgClass Message class - * @param msgId Message ID - * @param payload Pointer to the payload data - * @param length Length of payload - * @param timeout_ms Maximum time to wait for acknowledgment - * @return UBXSendStatus indicating success, failure, or timeout - */ -UBXSendStatus Adafruit_UBX::sendMessageWithAck(uint8_t msgClass, uint8_t msgId, uint8_t *payload, uint16_t length, uint16_t timeout_ms = 500) { - // First send the message - if (!sendMessage(msgClass, msgId, payload, length)) { - if (verbose_debug > 0) { - Serial.println(F("UBX ACK: SEND FAIL")); - } - return UBX_SEND_FAIL; - } - - uint32_t startTime = millis(); - - // Check for messages until timeout - while ((millis() - startTime) < timeout_ms) { - // Process incoming bytes - if (checkMessages()) { - // If we have a message handler, it will be called from checkMessages - // We need to check our last received message - if (_lastMsgClass == UBX_CLASS_ACK) { - if (_lastMsgId == UBX_ACK_ACK && _lastPayloadLength >= 2) { - // ACK-ACK message - if (_lastPayload[0] == msgClass && _lastPayload[1] == msgId) { - if (verbose_debug > 0) { - Serial.print(F("UBX ACK: SUCCESS for message class 0x")); - if (msgClass < 0x10) Serial.print("0"); - Serial.print(msgClass, HEX); - Serial.print(" ID 0x"); - if (msgId < 0x10) Serial.print("0"); - Serial.println(msgId, HEX); - } - return UBX_SEND_SUCCESS; - } - } else if (_lastMsgId == UBX_ACK_NAK && _lastPayloadLength >= 2) { - // ACK-NAK message - if (_lastPayload[0] == msgClass && _lastPayload[1] == msgId) { - if (verbose_debug > 0) { - Serial.print(F("UBX ACK: NAK for message class 0x")); - if (msgClass < 0x10) Serial.print("0"); - Serial.print(msgClass, HEX); - Serial.print(" ID 0x"); - if (msgId < 0x10) Serial.print("0"); - Serial.println(msgId, HEX); - } - return UBX_SEND_NAK; - } - } - } - } - - // Short delay - delay(1); - } - - if (verbose_debug > 0) { - Serial.print(F("UBX ACK: TIMEOUT waiting for ACK/NAK for message class 0x")); - if (msgClass < 0x10) Serial.print("0"); - Serial.print(msgClass, HEX); - Serial.print(" ID 0x"); - if (msgId < 0x10) Serial.print("0"); - Serial.println(msgId, HEX); - } - - return UBX_SEND_TIMEOUT; -} - - -/*! - * @brief Send a UBX message to the GPS module - * @param msgClass Message class - * @param msgId Message ID - * @param payload Pointer to the payload data (can be NULL for zero-length payload) - * @param length Length of payload - * @return True if message was sent successfully - */ -bool Adafruit_UBX::sendMessage(uint8_t msgClass, uint8_t msgId, uint8_t *payload, uint16_t length) { - // Buffer for message (2 sync chars + class + id + 2 length bytes + payload + 2 checksum bytes) - uint8_t msgBuffer[length + 8]; - - // Sync characters - msgBuffer[0] = UBX_SYNC_CHAR_1; - msgBuffer[1] = UBX_SYNC_CHAR_2; - - // Message class and ID - msgBuffer[2] = msgClass; - msgBuffer[3] = msgId; - - // Length (little endian) - msgBuffer[4] = length & 0xFF; - msgBuffer[5] = (length >> 8) & 0xFF; - - // Payload - if (payload != NULL && length > 0) { - memcpy(&msgBuffer[6], payload, length); - } - - // Calculate checksum - uint8_t checksumA, checksumB; - calculateChecksum(&msgBuffer[2], length + 4, checksumA, checksumB); - - msgBuffer[6 + length] = checksumA; - msgBuffer[7 + length] = checksumB; - - // Debug output - if (verbose_debug > 0) { - Serial.print("UBX TX: "); - - // Print header (sync chars, class, id, length) - Serial.print("HDR["); - for (int i = 0; i < 6; i++) { - if (msgBuffer[i] < 0x10) Serial.print("0"); - Serial.print(msgBuffer[i], HEX); - Serial.print(" "); - } - Serial.print("] "); - - // Print payload if verbose debug is enabled - if (verbose_debug > 1 && length > 0) { - Serial.print("PL["); - for (uint16_t i = 0; i < length; i++) { - if (msgBuffer[6 + i] < 0x10) Serial.print("0"); - Serial.print(msgBuffer[6 + i], HEX); - Serial.print(" "); - } - Serial.print("] "); - } - - // Print checksum - Serial.print("CS["); - if (checksumA < 0x10) Serial.print("0"); - Serial.print(checksumA, HEX); - Serial.print(" "); - if (checksumB < 0x10) Serial.print("0"); - Serial.print(checksumB, HEX); - Serial.println("]"); - } - - // Send the message - size_t written = _stream->write(msgBuffer, length + 8); - - return (written == length + 8); -} diff --git a/Adafruit_UBX.h b/Adafruit_UBX.h deleted file mode 100644 index 6691e12..0000000 --- a/Adafruit_UBX.h +++ /dev/null @@ -1,98 +0,0 @@ -/*! - * @file Adafruit_UBX.h - * - * Arduino library for parsing UBX protocol from u-blox GPS/RTK modules. - * - * This library can use any Stream object as input (UART, DDC, or other). - * - * Adafruit invests time and resources providing this open source code, - * please support Adafruit and open-source hardware by purchasing - * products from Adafruit! - * - * Written by Your Name for Project Name. - * - * MIT license, all text here must be included in any redistribution. - */ - -#ifndef ADAFRUIT_UBX_H -#define ADAFRUIT_UBX_H - -#include -#include -#include "Adafruit_uBlox_typedef.h" - -// UBX protocol constants -#define UBX_SYNC_CHAR_1 0xB5 // First UBX protocol sync char (µ) -#define UBX_SYNC_CHAR_2 0x62 // Second UBX protocol sync char (b) -// UBX ACK Message IDs -#define UBX_ACK_NAK 0x00 // Message Not Acknowledged -#define UBX_ACK_ACK 0x01 // Message Acknowledged - -// Callback function type for UBX messages - defined at global scope so other classes can use it -typedef void (*UBXMessageCallback)(uint8_t msgClass, uint8_t msgId, uint16_t payloadLen, uint8_t *payload); - - -/*! - * @brief Class for parsing UBX protocol messages from u-blox GPS/RTK modules - */ -class Adafruit_UBX { - public: - // Constructor - Adafruit_UBX(Stream &stream); - uint8_t verbose_debug = 0; // 0=off, 1=basic, 2=verbose - - // Basic methods - bool begin(); - - bool checkMessages(); // Message parsing - bool sendMessage(uint8_t msgClass, uint8_t msgId, uint8_t *payload, uint16_t length); // Send a UBX message - UBXSendStatus sendMessageWithAck(uint8_t msgClass, uint8_t msgId, uint8_t *payload, uint16_t length, uint16_t timeout_ms = 500); - - // Configure port to use UBX protocol only (disable NMEA) - UBXSendStatus setUBXOnly(UBXPortId portID, bool checkAck = true, uint16_t timeout_ms = 500); - - void setMessageCallback(UBXMessageCallback callback); // Set callback function - UBXMessageCallback onUBXMessage; // Callback for message received - - private: - Stream *_stream; // Stream interface for reading data - - // Buffer for reading messages - static const uint16_t MAX_PAYLOAD_SIZE = 64; // Maximum UBX payload size - uint8_t _buffer[MAX_PAYLOAD_SIZE + 8]; // Buffer for message (header, payload, checksum) - - // Parser state machine - enum ParserState { - WAIT_SYNC_1, // Waiting for first sync char (0xB5) - WAIT_SYNC_2, // Waiting for second sync char (0x62) - GET_CLASS, // Reading message class - GET_ID, // Reading message ID - GET_LENGTH_1, // Reading length LSB - GET_LENGTH_2, // Reading length MSB - GET_PAYLOAD, // Reading payload - GET_CHECKSUM_A, // Reading checksum A - GET_CHECKSUM_B // Reading checksum B - }; - - ParserState _parserState = WAIT_SYNC_1; // Current state of the parser - uint8_t _msgClass; // Message class of current message - uint8_t _msgId; // Message ID of current message - uint16_t _payloadLength; // Length of current message payload - uint16_t _payloadCounter; // Counter for payload bytes received - uint8_t _checksumA; // Running checksum A - uint8_t _checksumB; // Running checksum B - - // Calculate checksum for a block of data - void calculateChecksum(uint8_t *buffer, uint16_t len, uint8_t &checksumA, uint8_t &checksumB); - - // Reset parser state - void resetParser(); - - // Add to private section of Adafruit_UBX.h - uint8_t _lastMsgClass; // Class of last message - uint8_t _lastMsgId; // ID of last message - uint16_t _lastPayloadLength; // Length of last message payload - uint8_t _lastPayload[8]; // Buffer for small payloads (like ACK messages) -}; - -#endif // ADAFRUIT_UBX_H diff --git a/Adafruit_UBloxDDC.cpp b/Adafruit_UBloxDDC.cpp deleted file mode 100644 index b4c8e95..0000000 --- a/Adafruit_UBloxDDC.cpp +++ /dev/null @@ -1,222 +0,0 @@ -/*! - * @file Adafruit_UBloxDDC.cpp - * - * @mainpage Arduino library for u-blox GPS/RTK modules over DDC (I2C) - * - * @section intro_sec Introduction - * - * This is a library for the u-blox GPS/RTK modules using I2C interface (DDC) - * - * Designed specifically to work with u-blox GPS/RTK modules - * like NEO-M8P, ZED-F9P, etc. - * - * @section dependencies Dependencies - * - * This library depends on: - * Adafruit_BusIO - * - * @section author Author - * - * Written by Your Name for Project Name. - * - * @section license License - * - * MIT license, all text above must be included in any redistribution - */ - -#include "Adafruit_UBloxDDC.h" - -/*! - * @brief Constructor - * @param address - * i2c address (default 0x42) - * @param wire - * TwoWire instance (default &Wire) - */ -Adafruit_UBloxDDC::Adafruit_UBloxDDC(uint8_t address, TwoWire *wire) { - _i2cDevice = new Adafruit_I2CDevice(address, wire); -} - -/*! - * @brief Destructor - frees allocated resources - */ -Adafruit_UBloxDDC::~Adafruit_UBloxDDC() { - if (_i2cDevice) { - delete _i2cDevice; - } -} - -/*! - * @brief Initializes the GPS module and I2C interface - * @return True if GPS module responds, false on any failure - */ -bool Adafruit_UBloxDDC::begin() { - return _i2cDevice->begin(); -} - -/*! - * @brief Gets the number of bytes available for reading - * @return Number of bytes available, or 0 if no data or error - */ -int Adafruit_UBloxDDC::available() { - uint8_t buffer[2]; - - // Create a register for reading bytes available - Adafruit_BusIO_Register bytesAvailableReg = Adafruit_BusIO_Register(_i2cDevice, REG_BYTES_AVAILABLE_MSB, 2); - - if (!bytesAvailableReg.read(buffer, 2)) { - return 0; - } - - uint16_t bytesAvailable = (uint16_t)buffer[0] << 8; - bytesAvailable |= buffer[1]; - - return bytesAvailable; -} - -/*! - * @brief Reads a single byte from the data stream - * @return -1 if no data available or error, otherwise the byte read (0-255) - */ -int Adafruit_UBloxDDC::read() { - // If we have a peeked byte, return it - if (_hasPeeked) { - _hasPeeked = false; - return _lastByte; - } - - uint8_t value; - - // Create a register for the data stream - Adafruit_BusIO_Register dataStreamReg = Adafruit_BusIO_Register(_i2cDevice, REG_DATA_STREAM, 1); - - if (!dataStreamReg.read(&value, 1)) { - return -1; - } - - return value; -} - -/*! - * @brief Peek at the next available byte without removing it from the stream - * @return -1 if no data available or error, otherwise the byte (0-255) - */ -int Adafruit_UBloxDDC::peek() { - // If we've already peeked, return the last byte - if (_hasPeeked) { - return _lastByte; - } - - // Otherwise, read a byte and store it - _lastByte = read(); - if (_lastByte != -1) { - _hasPeeked = true; - } - - return _lastByte; -} - -/*! - * @brief Write a single byte (required by Stream but not suitable for I2C) - * @param val Byte to write - * @return Always returns 0 as single-byte writes aren't supported on I2C - */ -size_t Adafruit_UBloxDDC::write(uint8_t val) { - // Single-byte writes aren't suitable for I2C/DDC - // This shouldn't be called if properly using the multi-byte version - return 0; -} - -/*! - * @brief Write multiple bytes at once (required for I2C/DDC) - * @param buffer Pointer to data buffer - * @param size Number of bytes to write - * @return Number of bytes written - */ -size_t Adafruit_UBloxDDC::write(const uint8_t *buffer, size_t size) { - // For I2C/DDC, we need at least 2 bytes for a write - if (size < 2) { - // Single-byte writes aren't supported - return 0; - } - - // Use Adafruit_BusIO to handle the I2C transaction - if (_i2cDevice->write(buffer, size)) { - return size; - } - return 0; -} - -/*! - * @brief Read multiple bytes from the data stream - * @param buffer Pointer to buffer to store data - * @param length Maximum number of bytes to read - * @return Number of bytes actually read, which may be less than requested - */ -uint16_t Adafruit_UBloxDDC::readBytes(uint8_t* buffer, uint16_t length) { - if (buffer == nullptr || length == 0) { - return 0; - } - - uint16_t bytesRead = 0; - uint16_t bytesAvailable = available(); - - // Don't try to read more bytes than are available - length = min(length, bytesAvailable); - - // Handle any peeked byte first - if (_hasPeeked && length > 0) { - buffer[0] = _lastByte; - _hasPeeked = false; - bytesRead = 1; - } - - if (bytesRead >= length) { - return bytesRead; - } - - // Create a register for the data stream - Adafruit_BusIO_Register dataStreamReg = Adafruit_BusIO_Register(_i2cDevice, REG_DATA_STREAM, 1); - - while (bytesRead < length) { - // Calculate chunk size (I2C has a limit on bytes per transfer) - uint16_t chunkSize = min(length - bytesRead, (uint16_t)32); - - if (!dataStreamReg.read(&buffer[bytesRead], chunkSize)) { - break; - } - - bytesRead += chunkSize; - } - - return bytesRead; -} - -/*! - * @brief Read a complete message from the device - * @param buffer Pointer to buffer to store message data - * @param maxLength Maximum length of buffer - * @return Number of bytes read into the buffer - */ -uint16_t Adafruit_UBloxDDC::readMessage(uint8_t* buffer, uint16_t maxLength) { - uint16_t bytesAvailable = available(); - - if (bytesAvailable == 0) { - return 0; - } - - // Limit to buffer size - uint16_t bytesToRead = min(bytesAvailable, maxLength); - return readBytes(buffer, bytesToRead); -} - -/*! - * @brief Read a message into the internal buffer and return a pointer to it - * @param messageLength Pointer to variable to store message length - * @return Pointer to internal buffer containing the message - */ -uint8_t* Adafruit_UBloxDDC::readMessage(uint16_t* messageLength) { - *messageLength = readMessage(_buffer, MAX_BUFFER_SIZE); - return _buffer; -} - diff --git a/Adafruit_UBloxDDC.h b/Adafruit_UBloxDDC.h deleted file mode 100644 index b5138db..0000000 --- a/Adafruit_UBloxDDC.h +++ /dev/null @@ -1,68 +0,0 @@ -/*! - * @file Adafruit_UBloxDDC.h - * - * Arduino library for interfacing with u-blox GPS/RTK modules over I2C (DDC). - * - * This library implements the Stream interface, allowing it to be used with - * existing GPS parsing libraries like TinyGPS++. - * - * Adafruit invests time and resources providing this open source code, - * please support Adafruit and open-source hardware by purchasing - * products from Adafruit! - * - * Written by Your Name for Project Name. - * - * MIT license, all text here must be included in any redistribution. - */ - -#ifndef ADAFRUIT_UBLOXDDC_H -#define ADAFRUIT_UBLOXDDC_H - -#include -#include -#include -#include - -/*! - * @brief Arduino library for interfacing with u-blox GPS/RTK modules over I2C - */ -class Adafruit_UBloxDDC : public Stream { - private: - Adafruit_I2CDevice *_i2cDevice; ///< Underlying I2C device - - // Register addresses - static const uint8_t REG_DATA_STREAM = 0xFF; ///< Register for reading data stream - static const uint8_t REG_BYTES_AVAILABLE_MSB = 0xFD; ///< MSB of bytes available - static const uint8_t REG_BYTES_AVAILABLE_LSB = 0xFE; ///< LSB of bytes available - - // Buffer for reading messages - static const uint16_t MAX_BUFFER_SIZE = 128; ///< Maximum buffer size for messages - uint8_t _buffer[MAX_BUFFER_SIZE]; ///< Internal buffer for messages - - // Last byte read for peek() implementation - int _lastByte = -1; ///< Last byte read by peek() - bool _hasPeeked = false; ///< Indicates if we have a peeked byte waiting - - public: - // Constructor & destructor - Adafruit_UBloxDDC(uint8_t address = 0x42, TwoWire *wire = &Wire); - ~Adafruit_UBloxDDC(); - - // Basic methods - bool begin(); - - // Stream interface implementation - virtual int available() override; - virtual int read() override; - virtual int peek() override; - // Stream interface implementation - virtual size_t write(uint8_t) override; - virtual size_t write(const uint8_t *buffer, size_t size) override; - - // Additional methods - uint16_t readBytes(uint8_t* buffer, uint16_t length); - uint16_t readMessage(uint8_t* buffer, uint16_t maxLength); - uint8_t* readMessage(uint16_t* messageLength); -}; - -#endif // ADAFRUIT_UBLOXDDC_H diff --git a/Adafruit_uBlox_typedef.h b/Adafruit_uBlox_typedef.h deleted file mode 100644 index f8e44b2..0000000 --- a/Adafruit_uBlox_typedef.h +++ /dev/null @@ -1,107 +0,0 @@ -/*! - * @file Adafruit_uBlox_typedef.h - * - * Type definitions for u-blox GPS/RTK module messages - * - * Adafruit invests time and resources providing this open source code, - * please support Adafruit and open-source hardware by purchasing - * products from Adafruit! - * - * Written by Your Name for Project Name. - * - * MIT license, all text here must be included in any redistribution. - */ - -#ifndef ADAFRUIT_UBLOX_TYPEDEF_H -#define ADAFRUIT_UBLOX_TYPEDEF_H - -#include - -// UBX Message Classes -typedef enum { - UBX_CLASS_NAV = 0x01, // Navigation Results - UBX_CLASS_RXM = 0x02, // Receiver Manager Messages - UBX_CLASS_INF = 0x04, // Information Messages - UBX_CLASS_ACK = 0x05, // Acknowledgements - UBX_CLASS_CFG = 0x06, // Configuration - UBX_CLASS_UPD = 0x09, // Firmware Update - UBX_CLASS_MON = 0x0A, // Monitoring - UBX_CLASS_AID = 0x0B, // AssistNow Aiding - UBX_CLASS_TIM = 0x0D, // Timing - UBX_CLASS_ESF = 0x10, // External Sensor Fusion - UBX_CLASS_MGA = 0x13, // Multiple GNSS Assistance - UBX_CLASS_LOG = 0x21, // Logging - UBX_CLASS_SEC = 0x27, // Security - UBX_CLASS_HNR = 0x28, // High Rate Navigation - UBX_CLASS_NMEA = 0xF0 // NMEA Standard Messages -} UBXMessageClass; - -// UBX CFG Message IDs -typedef enum { - UBX_CFG_PRT = 0x00, // Port Configuration - UBX_CFG_MSG = 0x01, // Message Configuration - UBX_CFG_RST = 0x04, // Reset Receiver - UBX_CFG_RATE = 0x08, // Navigation/Measurement Rate Settings - UBX_CFG_CFG = 0x09, // Clear, Save, and Load Configurations - UBX_CFG_NAVX5 = 0x23, // Navigation Engine Settings - UBX_CFG_GNSS = 0x3E, // GNSS Configuration - UBX_CFG_PMS = 0x86 // Power Mode Setup -} UBXCfgMessageId; - -// Return values for functions that wait for acknowledgment -typedef enum { - UBX_SEND_SUCCESS = 0, // Message was acknowledged (ACK) - UBX_SEND_NAK, // Message was not acknowledged (NAK) - UBX_SEND_FAIL, // Failed to send the message - UBX_SEND_TIMEOUT // Timed out waiting for ACK/NAK -} UBXSendStatus; - -// Port ID enum for different interfaces -typedef enum { - UBX_PORT_DDC = 0, // I2C / DDC port - UBX_PORT_UART1 = 1, // UART1 port - UBX_PORT_UART2 = 2, // UART2 port - UBX_PORT_USB = 3, // USB port - UBX_PORT_SPI = 4 // SPI port -} UBXPortId; - -// UART mode flags (Charlen, Parity & Stop bit settings) -typedef enum { - UBX_UART_MODE_8N1 = 0x000, // 8-bit, no parity, 1 stop bit - UBX_UART_MODE_8E1 = 0x100, // 8-bit, even parity, 1 stop bit - UBX_UART_MODE_8O1 = 0x200, // 8-bit, odd parity, 1 stop bit - UBX_UART_MODE_7N1 = 0x400, // 7-bit, no parity, 1 stop bit - UBX_UART_MODE_7E1 = 0x500, // 7-bit, even parity, 1 stop bit - UBX_UART_MODE_7O1 = 0x600, // 7-bit, odd parity, 1 stop bit - UBX_UART_MODE_7N2 = 0x800, // 7-bit, no parity, 2 stop bits - UBX_UART_MODE_7E2 = 0x900, // 7-bit, even parity, 2 stop bits - UBX_UART_MODE_7O2 = 0xA00, // 7-bit, odd parity, 2 stop bits - UBX_UART_MODE_8N2 = 0xC00, // 8-bit, no parity, 2 stop bits - UBX_UART_MODE_8E2 = 0xD00, // 8-bit, even parity, 2 stop bits - UBX_UART_MODE_8O2 = 0xE00 // 8-bit, odd parity, 2 stop bits -} UBXUARTMode; - -// Protocol flags for inProtoMask and outProtoMask -#define UBX_PROTOCOL_UBX 0x0001 // UBX protocol -#define UBX_PROTOCOL_NMEA 0x0002 // NMEA protocol -#define UBX_PROTOCOL_RTCM 0x0004 // RTCM2 protocol (only for inProtoMask) -#define UBX_PROTOCOL_RTCM3 0x0020 // RTCM3 protocol - -// CFG-PRT (Port Configuration) Message -// Total size: 20 bytes -typedef union { - struct { - uint8_t portID; // Port identifier (0=DDC/I2C, 1=UART1, 2=UART2, 3=USB, 4=SPI) - uint8_t reserved1; // Reserved - uint16_t txReady; // TX ready PIN configuration - uint32_t mode; // UART mode (bit field) or Reserved for non-UART ports - uint32_t baudRate; // Baudrate in bits/second (UART only) - uint16_t inProtoMask; // Input protocol mask - uint16_t outProtoMask; // Output protocol mask - uint16_t flags; // Flags bit field - uint16_t reserved2; // Reserved - } fields; - uint8_t raw[20]; -} UBX_CFG_PRT_t; - -#endif // ADAFRUIT_UBLOX_TYPEDEF_H diff --git a/html/_adafruit___u_b_x_8cpp.html b/html/_adafruit___u_b_x_8cpp.html new file mode 100644 index 0000000..0b0c266 --- /dev/null +++ b/html/_adafruit___u_b_x_8cpp.html @@ -0,0 +1,74 @@ + + + + + + + +Adafruit uBlox Library: Adafruit_UBX.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Adafruit_UBX.cpp File Reference
+
+
+
#include "Adafruit_UBX.h"
+
+ + + + diff --git a/html/_adafruit___u_b_x_8h.html b/html/_adafruit___u_b_x_8h.html new file mode 100644 index 0000000..84ff22d --- /dev/null +++ b/html/_adafruit___u_b_x_8h.html @@ -0,0 +1,147 @@ + + + + + + + +Adafruit uBlox Library: Adafruit_UBX.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
Adafruit_UBX.h File Reference
+
+
+
#include "Adafruit_uBlox_Ubx_Messages.h"
+#include "Adafruit_uBlox_typedef.h"
+#include <Arduino.h>
+#include <Stream.h>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  Adafruit_UBX
 Class for parsing UBX protocol messages from u-blox GPS/RTK modules. More...
 
+ + + + + + + + + + + + + +

+Macros

+#define UBX_SYNC_CHAR_1   0xB5
 First UBX protocol sync char (�)
 
+#define UBX_SYNC_CHAR_2   0x62
 Second UBX protocol sync char (b)
 
+#define UBX_ACK_NAK   0x00
 Message Not Acknowledged.
 
+#define UBX_ACK_ACK   0x01
 Message Acknowledged.
 
+ + + + +

+Typedefs

typedef void(* UBXMessageCallback) (uint8_t msgClass, uint8_t msgId, uint16_t payloadLen, uint8_t *payload)
 Callback function type for UBX messages - defined at global scope so other classes can use it. More...
 
+

Detailed Description

+

Arduino library for parsing UBX protocol from u-blox GPS/RTK modules.

+

This library can use any Stream object as input (UART, DDC, or other).

+

Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit!

+

Written by Limor Fried/Ladyada for Adafruit Industries.

+

MIT license, all text here must be included in any redistribution.

+

Typedef Documentation

+ +

◆ UBXMessageCallback

+ +
+
+ + + + +
typedef void(* UBXMessageCallback) (uint8_t msgClass, uint8_t msgId, uint16_t payloadLen, uint8_t *payload)
+
+ +

Callback function type for UBX messages - defined at global scope so other classes can use it.

+
Parameters
+ + + + + +
msgClassMessage class
msgIdMessage ID
payloadLenLength of payload data
payloadPointer to payload data
+
+
+ +
+
+
+ + + + diff --git a/html/_adafruit___u_b_x_8h_source.html b/html/_adafruit___u_b_x_8h_source.html new file mode 100644 index 0000000..8690b2b --- /dev/null +++ b/html/_adafruit___u_b_x_8h_source.html @@ -0,0 +1,89 @@ + + + + + + + +Adafruit uBlox Library: Adafruit_UBX.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Adafruit_UBX.h
+
+
+Go to the documentation of this file.
1 
17 #ifndef ADAFRUIT_UBX_H
18 #define ADAFRUIT_UBX_H
19 
21 #include "Adafruit_uBlox_typedef.h"
22 #include <Arduino.h>
23 #include <Stream.h>
24 
25 // UBX protocol constants
26 #define UBX_SYNC_CHAR_1 0xB5
27 #define UBX_SYNC_CHAR_2 0x62
28 // UBX ACK Message IDs
29 #define UBX_ACK_NAK 0x00
30 #define UBX_ACK_ACK 0x01
31 
32 
40 typedef void (*UBXMessageCallback)(uint8_t msgClass, uint8_t msgId,
41  uint16_t payloadLen, uint8_t *payload);
42 
46 class Adafruit_UBX {
47 public:
48  Adafruit_UBX(Stream &stream);
49  ~Adafruit_UBX();
50  uint8_t verbose_debug = 0;
51  // Basic methods
52  bool begin();
53  bool checkMessages(); // Message parsing
54  bool sendMessage(uint8_t msgClass, uint8_t msgId, uint8_t *payload,
55  uint16_t length); // Send a UBX message
56  UBXSendStatus sendMessageWithAck(uint8_t msgClass, uint8_t msgId,
57  uint8_t *payload, uint16_t length,
58  uint16_t timeout_ms = 500);
59 
60  // Configure port to use UBX protocol only (disable NMEA)
61  UBXSendStatus setUBXOnly(UBXPortId portID, bool checkAck = true,
62  uint16_t timeout_ms = 500);
63 
64  void setMessageCallback(UBXMessageCallback callback); // Set callback function
66 
67 private:
68  Stream *_stream; // Stream interface for reading data
69 
70  // Buffer for reading messages
71  static const uint16_t MAX_PAYLOAD_SIZE = 64; // Maximum UBX payload size
72  uint8_t _buffer[MAX_PAYLOAD_SIZE +
73  8]; // Buffer for message (header, payload, checksum)
74 
75  // Parser state machine
76  enum ParserState {
77  WAIT_SYNC_1, // Waiting for first sync char (0xB5)
78  WAIT_SYNC_2, // Waiting for second sync char (0x62)
79  GET_CLASS, // Reading message class
80  GET_ID, // Reading message ID
81  GET_LENGTH_1, // Reading length LSB
82  GET_LENGTH_2, // Reading length MSB
83  GET_PAYLOAD, // Reading payload
84  GET_CHECKSUM_A, // Reading checksum A
85  GET_CHECKSUM_B // Reading checksum B
86  };
87 
88  ParserState _parserState = WAIT_SYNC_1; // Current state of the parser
89  uint8_t _msgClass; // Message class of current message
90  uint8_t _msgId; // Message ID of current message
91  uint16_t _payloadLength; // Length of current message payload
92  uint16_t _payloadCounter; // Counter for payload bytes received
93  uint8_t _checksumA; // Running checksum A
94  uint8_t _checksumB; // Running checksum B
95 
96  // Calculate checksum for a block of data
97  void calculateChecksum(uint8_t *buffer, uint16_t len, uint8_t &checksumA,
98  uint8_t &checksumB);
99 
100  // Reset parser state
101  void resetParser();
102 
103  // Add to private section of Adafruit_UBX.h
104  uint8_t _lastMsgClass; // Class of last message
105  uint8_t _lastMsgId; // ID of last message
106  uint16_t _lastPayloadLength; // Length of last message payload
107  uint8_t _lastPayload[8]; // Buffer for small payloads (like ACK messages)
108 };
109 
110 #endif // ADAFRUIT_UBX_H
void setMessageCallback(UBXMessageCallback callback)
Sets the callback function for UBX messages.
Definition: Adafruit_UBX.cpp:130
+
void(* UBXMessageCallback)(uint8_t msgClass, uint8_t msgId, uint16_t payloadLen, uint8_t *payload)
Callback function type for UBX messages - defined at global scope so other classes can use it...
Definition: Adafruit_UBX.h:40
+
UBXSendStatus sendMessageWithAck(uint8_t msgClass, uint8_t msgId, uint8_t *payload, uint16_t length, uint16_t timeout_ms=500)
Send a UBX message and wait for acknowledgment.
Definition: Adafruit_UBX.cpp:328
+ +
bool checkMessages()
Check for new UBX messages and parse them.
Definition: Adafruit_UBX.cpp:165
+ +
UBXMessageCallback onUBXMessage
Callback for message received.
Definition: Adafruit_UBX.h:65
+
UBXPortId
Definition: Adafruit_uBlox_typedef.h:60
+
Class for parsing UBX protocol messages from u-blox GPS/RTK modules.
Definition: Adafruit_UBX.h:46
+
bool begin()
Initializes the UBX parser.
Definition: Adafruit_UBX.cpp:50
+
~Adafruit_UBX()
Destructor.
Definition: Adafruit_UBX.cpp:39
+
UBXSendStatus setUBXOnly(UBXPortId portID, bool checkAck=true, uint16_t timeout_ms=500)
Configure the GPS module to output only UBX protocol (disables NMEA)
Definition: Adafruit_UBX.cpp:62
+
bool sendMessage(uint8_t msgClass, uint8_t msgId, uint8_t *payload, uint16_t length)
Send a UBX message to the GPS module.
Definition: Adafruit_UBX.cpp:411
+
UBXSendStatus
Definition: Adafruit_uBlox_typedef.h:52
+
uint8_t verbose_debug
0=off, 1=basic, 2=verbose
Definition: Adafruit_UBX.h:50
+
Adafruit_UBX(Stream &stream)
Constructor.
Definition: Adafruit_UBX.cpp:31
+
+ + + + diff --git a/html/_adafruit___u_blox_d_d_c_8cpp.html b/html/_adafruit___u_blox_d_d_c_8cpp.html new file mode 100644 index 0000000..e39afdb --- /dev/null +++ b/html/_adafruit___u_blox_d_d_c_8cpp.html @@ -0,0 +1,88 @@ + + + + + + + +Adafruit uBlox Library: Adafruit_UBloxDDC.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Adafruit_UBloxDDC.cpp File Reference
+
+
+
#include "Adafruit_UBloxDDC.h"
+

Detailed Description

+

+Introduction

+

This is a library for the u-blox GPS/RTK modules using I2C interface (DDC)

+

Designed specifically to work with u-blox GPS/RTK modules like NEO-M8P, ZED-F9P, etc.

+

+Dependencies

+

This library depends on: Adafruit_BusIO

+

+Author

+

Written by Limor Fried/Ladyada for Adafruit Industries.

+

+License

+

MIT license, all text above must be included in any redistribution

+
+ + + + diff --git a/html/_adafruit___u_blox_d_d_c_8h.html b/html/_adafruit___u_blox_d_d_c_8h.html new file mode 100644 index 0000000..c62fc84 --- /dev/null +++ b/html/_adafruit___u_blox_d_d_c_8h.html @@ -0,0 +1,94 @@ + + + + + + + +Adafruit uBlox Library: Adafruit_UBloxDDC.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
Adafruit_UBloxDDC.h File Reference
+
+
+
#include <Adafruit_BusIO_Register.h>
+#include <Adafruit_I2CDevice.h>
+#include <Arduino.h>
+#include <Stream.h>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  Adafruit_UBloxDDC
 Arduino library for interfacing with u-blox GPS/RTK modules over I2C. More...
 
+

Detailed Description

+

Arduino library for interfacing with u-blox GPS/RTK modules over I2C (DDC).

+

This library implements the Stream interface, allowing it to be used with existing GPS parsing libraries like TinyGPS++.

+

Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit!

+

Written by Limor Fried/Ladyada for Adafruit Industries.

+

MIT license, all text here must be included in any redistribution.

+
+ + + + diff --git a/html/_adafruit___u_blox_d_d_c_8h_source.html b/html/_adafruit___u_blox_d_d_c_8h_source.html new file mode 100644 index 0000000..6d08230 --- /dev/null +++ b/html/_adafruit___u_blox_d_d_c_8h_source.html @@ -0,0 +1,83 @@ + + + + + + + +Adafruit uBlox Library: Adafruit_UBloxDDC.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Adafruit_UBloxDDC.h
+
+
+Go to the documentation of this file.
1 
18 #ifndef ADAFRUIT_UBLOXDDC_H
19 #define ADAFRUIT_UBLOXDDC_H
20 
21 #include <Adafruit_BusIO_Register.h>
22 #include <Adafruit_I2CDevice.h>
23 #include <Arduino.h>
24 #include <Stream.h>
25 
29 class Adafruit_UBloxDDC : public Stream {
30 private:
31  Adafruit_I2CDevice *_i2cDevice;
32 
33  // Register addresses
34  static const uint8_t REG_DATA_STREAM =
35  0xFF;
36  static const uint8_t REG_BYTES_AVAILABLE_MSB =
37  0xFD;
38  static const uint8_t REG_BYTES_AVAILABLE_LSB =
39  0xFE;
40 
41  // Buffer for reading messages
42  static const uint16_t MAX_BUFFER_SIZE =
43  128;
44  uint8_t _buffer[MAX_BUFFER_SIZE];
45 
46  // Last byte read for peek() implementation
47  int _lastByte = -1;
48  bool _hasPeeked = false;
49 
50 public:
51  // Constructor & destructor
52  Adafruit_UBloxDDC(uint8_t address = 0x42, TwoWire *wire = &Wire);
54 
55  // Basic methods
56  bool begin();
57 
58  // Stream interface implementation
59  virtual int available() override;
60  virtual int read() override;
61  virtual int peek() override;
62  // Stream interface implementation
63  virtual size_t write(uint8_t) override;
64  virtual size_t write(const uint8_t *buffer, size_t size) override;
65 
66  // Additional methods
67  uint16_t readBytes(uint8_t *buffer, uint16_t length);
68  uint16_t readMessage(uint8_t *buffer, uint16_t maxLength);
69  uint8_t *readMessage(uint16_t *messageLength);
70 };
71 
72 #endif // ADAFRUIT_UBLOXDDC_H
virtual size_t write(uint8_t) override
Write a single byte (required by Stream but not suitable for I2C)
Definition: Adafruit_UBloxDDC.cpp:122
+
virtual int peek() override
Peek at the next available byte without removing it from the stream.
Definition: Adafruit_UBloxDDC.cpp:102
+
uint16_t readMessage(uint8_t *buffer, uint16_t maxLength)
Read a complete message from the device.
Definition: Adafruit_UBloxDDC.cpp:200
+
bool begin()
Initializes the GPS module and I2C interface.
Definition: Adafruit_UBloxDDC.cpp:51
+
Arduino library for interfacing with u-blox GPS/RTK modules over I2C.
Definition: Adafruit_UBloxDDC.h:29
+
uint16_t readBytes(uint8_t *buffer, uint16_t length)
Read multiple bytes from the data stream.
Definition: Adafruit_UBloxDDC.cpp:154
+
~Adafruit_UBloxDDC()
Destructor - frees allocated resources.
Definition: Adafruit_UBloxDDC.cpp:41
+
virtual int available() override
Gets the number of bytes available for reading.
Definition: Adafruit_UBloxDDC.cpp:57
+
Adafruit_UBloxDDC(uint8_t address=0x42, TwoWire *wire=&Wire)
Constructor.
Definition: Adafruit_UBloxDDC.cpp:34
+
virtual int read() override
Reads a single byte from the data stream.
Definition: Adafruit_UBloxDDC.cpp:78
+
+ + + + diff --git a/html/_adafruit__u_blox___ubx___messages_8h.html b/html/_adafruit__u_blox___ubx___messages_8h.html new file mode 100644 index 0000000..b5105ca --- /dev/null +++ b/html/_adafruit__u_blox___ubx___messages_8h.html @@ -0,0 +1,81 @@ + + + + + + + +Adafruit uBlox Library: Adafruit_uBlox_Ubx_Messages.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Adafruit_uBlox_Ubx_Messages.h File Reference
+
+
+
#include <Arduino.h>
+
+

Go to the source code of this file.

+

Detailed Description

+

Pre-built UBX message payloads for common tasks

+

Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit!

+

Written by Brent Rubell for Adafruit Industries.

+

MIT license, all text here must be included in any redistribution.

+
+ + + + diff --git a/html/_adafruit__u_blox___ubx___messages_8h_source.html b/html/_adafruit__u_blox___ubx___messages_8h_source.html new file mode 100644 index 0000000..6a0a4d0 --- /dev/null +++ b/html/_adafruit__u_blox___ubx___messages_8h_source.html @@ -0,0 +1,73 @@ + + + + + + + +Adafruit uBlox Library: Adafruit_uBlox_Ubx_Messages.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Adafruit_uBlox_Ubx_Messages.h
+
+
+Go to the documentation of this file.
1 
15 #ifndef ADAFRUIT_UBLOX_UBX_MESSAGES
16 #define ADAFRUIT_UBLOX_UBX_MESSAGES
17 
18 #include <Arduino.h>
19 
20 // NMEA Message Configuration Commands (CFG-MSG)
21 // Format: {msgClass, msgID, rate_I2C, rate_UART1, rate_UART2, rate_USB,
22 // rate_SPI, reserved}
23 
24 // Enable specific NMEA message sentences to output on the DDC interface
25 static uint8_t UBX_CFG_MSG_NMEA_GGA_ENABLE[] = {0xF0, 0x00, 0x01, 0x00,
26  0x00, 0x00, 0x00, 0x00};
27 static uint8_t UBX_CFG_MSG_NMEA_GLL_ENABLE[] = {0xF0, 0x01, 0x01, 0x00,
28  0x00, 0x00, 0x00, 0x00};
29 static uint8_t UBX_CFG_MSG_NMEA_GSA_ENABLE[] = {0xF0, 0x02, 0x01, 0x00,
30  0x00, 0x00, 0x00, 0x00};
31 static uint8_t UBX_CFG_MSG_NMEA_GSV_ENABLE[] = {0xF0, 0x03, 0x01, 0x00,
32  0x00, 0x00, 0x00, 0x00};
33 static uint8_t UBX_CFG_MSG_NMEA_RMC_ENABLE[] = {0xF0, 0x04, 0x01, 0x00,
34  0x00, 0x00, 0x00, 0x00};
35 static uint8_t UBX_CFG_MSG_NMEA_VTG_ENABLE[] = {0xF0, 0x05, 0x01, 0x00,
36  0x00, 0x00, 0x00, 0x00};
37 // Disable specific NMEA message sentences from outputting on the DDC interface
38 static uint8_t UBX_CFG_MSG_NMEA_GGA_DISABLE[] = {0xF0, 0x00, 0x00, 0x00,
39  0x00, 0x00, 0x00, 0x00};
40 static uint8_t UBX_CFG_MSG_NMEA_GLL_DISABLE[] = {0xF0, 0x01, 0x00, 0x00,
41  0x00, 0x00, 0x00, 0x00};
42 static uint8_t UBX_CFG_MSG_NMEA_GSA_DISABLE[] = {0xF0, 0x02, 0x00, 0x00,
43  0x00, 0x00, 0x00, 0x00};
44 static uint8_t UBX_CFG_MSG_NMEA_GSV_DISABLE[] = {0xF0, 0x03, 0x00, 0x00,
45  0x00, 0x00, 0x00, 0x00};
46 static uint8_t UBX_CFG_MSG_NMEA_RMC_DISABLE[] = {0xF0, 0x04, 0x00, 0x00,
47  0x00, 0x00, 0x00, 0x00};
48 static uint8_t UBX_CFG_MSG_NMEA_VTG_DISABLE[] = {0xF0, 0x05, 0x00, 0x00,
49  0x00, 0x00, 0x00, 0x00};
50 
51 // Navigation Rate Configuration Commands (CFG-RATE)
52 // Format: {measRate_ms (2 bytes), navRate, timeRef}
53 static uint8_t UBX_CFG_RATE_1HZ[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
54 static uint8_t UBX_CFG_RATE_2HZ[] = {0xF4, 0x01, 0x01, 0x00, 0x01, 0x00};
55 static uint8_t UBX_CFG_RATE_5HZ[] = {0xC8, 0x00, 0x01, 0x00, 0x01, 0x00};
56 static uint8_t UBX_CFG_RATE_10HZ[] = {0x64, 0x00, 0x01, 0x00, 0x01, 0x00};
57 
58 #endif // ADAFRUIT_UBLOX_UBX_MESSAGES
+ + + + diff --git a/html/_adafruit__u_blox__typedef_8h.html b/html/_adafruit__u_blox__typedef_8h.html new file mode 100644 index 0000000..5508446 --- /dev/null +++ b/html/_adafruit__u_blox__typedef_8h.html @@ -0,0 +1,258 @@ + + + + + + + +Adafruit uBlox Library: Adafruit_uBlox_typedef.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
Adafruit_uBlox_typedef.h File Reference
+
+
+
#include <Arduino.h>
+
+

Go to the source code of this file.

+ + + + +

+Classes

union  UBX_CFG_PRT_t
 
+ + + + + + + + + + + + + +

+Macros

+#define UBX_PROTOCOL_UBX   0x0001
 UBX protocol.
 
+#define UBX_PROTOCOL_NMEA   0x0002
 NMEA protocol.
 
+#define UBX_PROTOCOL_RTCM   0x0004
 RTCM2 protocol (only for inProtoMask)
 
+#define UBX_PROTOCOL_RTCM3   0x0020
 RTCM3 protocol.
 
+ + + + + + + + + + + +

+Enumerations

enum  UBXMessageClass {
+  UBX_CLASS_NAV = 0x01, +UBX_CLASS_RXM = 0x02, +UBX_CLASS_INF = 0x04, +UBX_CLASS_ACK = 0x05, +
+  UBX_CLASS_CFG = 0x06, +UBX_CLASS_UPD = 0x09, +UBX_CLASS_MON = 0x0A, +UBX_CLASS_AID = 0x0B, +
+  UBX_CLASS_TIM = 0x0D, +UBX_CLASS_ESF = 0x10, +UBX_CLASS_MGA = 0x13, +UBX_CLASS_LOG = 0x21, +
+  UBX_CLASS_SEC = 0x27, +UBX_CLASS_HNR = 0x28, +UBX_CLASS_NMEA = 0xF0 +
+ }
 
enum  UBXCfgMessageId {
+  UBX_CFG_PRT = 0x00, +UBX_CFG_MSG = 0x01, +UBX_CFG_RST = 0x04, +UBX_CFG_RATE = 0x08, +
+  UBX_CFG_CFG = 0x09, +UBX_CFG_NAVX5 = 0x23, +UBX_CFG_GNSS = 0x3E, +UBX_CFG_PMS = 0x86 +
+ }
 
enum  UBXSendStatus { UBX_SEND_SUCCESS = 0, +UBX_SEND_NAK, +UBX_SEND_FAIL, +UBX_SEND_TIMEOUT + }
 
enum  UBXPortId {
+  UBX_PORT_DDC = 0, +UBX_PORT_UART1 = 1, +UBX_PORT_UART2 = 2, +UBX_PORT_USB = 3, +
+  UBX_PORT_SPI = 4 +
+ }
 
enum  UBXUARTMode {
+  UBX_UART_MODE_8N1 = 0x000, +UBX_UART_MODE_8E1 = 0x100, +UBX_UART_MODE_8O1 = 0x200, +UBX_UART_MODE_7N1 = 0x400, +
+  UBX_UART_MODE_7E1 = 0x500, +UBX_UART_MODE_7O1 = 0x600, +UBX_UART_MODE_7N2 = 0x800, +UBX_UART_MODE_7E2 = 0x900, +
+  UBX_UART_MODE_7O2 = 0xA00, +UBX_UART_MODE_8N2 = 0xC00, +UBX_UART_MODE_8E2 = 0xD00, +UBX_UART_MODE_8O2 = 0xE00 +
+ }
 
+

Detailed Description

+

Type definitions for u-blox GPS/RTK module messages

+

Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit!

+

Written by Limor Fried/Ladyada for Adafruit Industries.

+

MIT license, all text here must be included in any redistribution.

+

Enumeration Type Documentation

+ +

◆ UBXMessageClass

+ +
+
+ + + + +
enum UBXMessageClass
+
+

UBX protocol message class identifiers.

+ +
+
+ +

◆ UBXCfgMessageId

+ +
+
+ + + + +
enum UBXCfgMessageId
+
+

UBX CFG Message IDs.

+ +
+
+ +

◆ UBXSendStatus

+ +
+
+ + + + +
enum UBXSendStatus
+
+

Return values for functions that wait for acknowledgment.

+ +
+
+ +

◆ UBXPortId

+ +
+
+ + + + +
enum UBXPortId
+
+

Port ID enum for different interfaces.

+ +
+
+ +

◆ UBXUARTMode

+ +
+
+ + + + +
enum UBXUARTMode
+
+

UART mode flags (Charlen, Parity & Stop bit settings).

+ +
+
+
+ + + + diff --git a/html/_adafruit__u_blox__typedef_8h_source.html b/html/_adafruit__u_blox__typedef_8h_source.html new file mode 100644 index 0000000..9f5f9f2 --- /dev/null +++ b/html/_adafruit__u_blox__typedef_8h_source.html @@ -0,0 +1,88 @@ + + + + + + + +Adafruit uBlox Library: Adafruit_uBlox_typedef.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Adafruit_uBlox_typedef.h
+
+
+Go to the documentation of this file.
1 
15 #ifndef ADAFRUIT_UBLOX_TYPEDEF_H
16 #define ADAFRUIT_UBLOX_TYPEDEF_H
17 
18 #include <Arduino.h>
19 
21 typedef enum {
22  UBX_CLASS_NAV = 0x01, // Navigation Results
23  UBX_CLASS_RXM = 0x02, // Receiver Manager Messages
24  UBX_CLASS_INF = 0x04, // Information Messages
25  UBX_CLASS_ACK = 0x05, // Acknowledgements
26  UBX_CLASS_CFG = 0x06, // Configuration
27  UBX_CLASS_UPD = 0x09, // Firmware Update
28  UBX_CLASS_MON = 0x0A, // Monitoring
29  UBX_CLASS_AID = 0x0B, // AssistNow Aiding
30  UBX_CLASS_TIM = 0x0D, // Timing
31  UBX_CLASS_ESF = 0x10, // External Sensor Fusion
32  UBX_CLASS_MGA = 0x13, // Multiple GNSS Assistance
33  UBX_CLASS_LOG = 0x21, // Logging
34  UBX_CLASS_SEC = 0x27, // Security
35  UBX_CLASS_HNR = 0x28, // High Rate Navigation
36  UBX_CLASS_NMEA = 0xF0 // NMEA Standard Messages
38 
40 typedef enum {
41  UBX_CFG_PRT = 0x00, // Port Configuration
42  UBX_CFG_MSG = 0x01, // Message Configuration
43  UBX_CFG_RST = 0x04, // Reset Receiver
44  UBX_CFG_RATE = 0x08, // Navigation/Measurement Rate Settings
45  UBX_CFG_CFG = 0x09, // Clear, Save, and Load Configurations
46  UBX_CFG_NAVX5 = 0x23, // Navigation Engine Settings
47  UBX_CFG_GNSS = 0x3E, // GNSS Configuration
48  UBX_CFG_PMS = 0x86 // Power Mode Setup
50 
52 typedef enum {
53  UBX_SEND_SUCCESS = 0, // Message was acknowledged (ACK)
54  UBX_SEND_NAK, // Message was not acknowledged (NAK)
55  UBX_SEND_FAIL, // Failed to send the message
56  UBX_SEND_TIMEOUT // Timed out waiting for ACK/NAK
58 
60 typedef enum {
61  UBX_PORT_DDC = 0, // I2C / DDC port
62  UBX_PORT_UART1 = 1, // UART1 port
63  UBX_PORT_UART2 = 2, // UART2 port
64  UBX_PORT_USB = 3, // USB port
65  UBX_PORT_SPI = 4 // SPI port
66 } UBXPortId;
67 
69 typedef enum {
70  UBX_UART_MODE_8N1 = 0x000, // 8-bit, no parity, 1 stop bit
71  UBX_UART_MODE_8E1 = 0x100, // 8-bit, even parity, 1 stop bit
72  UBX_UART_MODE_8O1 = 0x200, // 8-bit, odd parity, 1 stop bit
73  UBX_UART_MODE_7N1 = 0x400, // 7-bit, no parity, 1 stop bit
74  UBX_UART_MODE_7E1 = 0x500, // 7-bit, even parity, 1 stop bit
75  UBX_UART_MODE_7O1 = 0x600, // 7-bit, odd parity, 1 stop bit
76  UBX_UART_MODE_7N2 = 0x800, // 7-bit, no parity, 2 stop bits
77  UBX_UART_MODE_7E2 = 0x900, // 7-bit, even parity, 2 stop bits
78  UBX_UART_MODE_7O2 = 0xA00, // 7-bit, odd parity, 2 stop bits
79  UBX_UART_MODE_8N2 = 0xC00, // 8-bit, no parity, 2 stop bits
80  UBX_UART_MODE_8E2 = 0xD00, // 8-bit, even parity, 2 stop bits
81  UBX_UART_MODE_8O2 = 0xE00 // 8-bit, odd parity, 2 stop bits
82 } UBXUARTMode;
83 
84 // Protocol flags for inProtoMask and outProtoMask
85 #define UBX_PROTOCOL_UBX 0x0001
86 #define UBX_PROTOCOL_NMEA 0x0002
87 #define UBX_PROTOCOL_RTCM 0x0004
88 #define UBX_PROTOCOL_RTCM3 0x0020
89 
90 
92 typedef union {
93  struct {
94  uint8_t
96  uint8_t reserved1;
97  uint16_t txReady;
98  uint32_t mode;
99  uint32_t baudRate;
100  uint16_t inProtoMask;
101  uint16_t outProtoMask;
102  uint16_t flags;
103  uint16_t reserved2;
104  } fields;
105  uint8_t raw[20];
106 } UBX_CFG_PRT_t;
107 
108 #endif // ADAFRUIT_UBLOX_TYPEDEF_H
uint32_t baudRate
Baudrate in bits/second (UART only)
Definition: Adafruit_uBlox_typedef.h:99
+
uint16_t reserved2
Reserved.
Definition: Adafruit_uBlox_typedef.h:103
+
uint16_t outProtoMask
Output protocol mask.
Definition: Adafruit_uBlox_typedef.h:101
+
uint16_t flags
Flags bit field.
Definition: Adafruit_uBlox_typedef.h:102
+
uint8_t portID
Port identifier (0=DDC/I2C, 1=UART1, 2=UART2, 3=USB, 4=SPI)
Definition: Adafruit_uBlox_typedef.h:95
+
UBXPortId
Definition: Adafruit_uBlox_typedef.h:60
+
uint16_t inProtoMask
Input protocol mask.
Definition: Adafruit_uBlox_typedef.h:100
+
UBXUARTMode
Definition: Adafruit_uBlox_typedef.h:69
+
uint16_t txReady
TX ready PIN configuration.
Definition: Adafruit_uBlox_typedef.h:97
+
Definition: Adafruit_uBlox_typedef.h:92
+
UBXCfgMessageId
Definition: Adafruit_uBlox_typedef.h:40
+
uint8_t reserved1
Reserved.
Definition: Adafruit_uBlox_typedef.h:96
+
UBXMessageClass
Definition: Adafruit_uBlox_typedef.h:21
+
UBXSendStatus
Definition: Adafruit_uBlox_typedef.h:52
+
uint32_t mode
UART mode (bit field) or Reserved for non-UART ports.
Definition: Adafruit_uBlox_typedef.h:98
+
+ + + + diff --git a/html/annotated.html b/html/annotated.html new file mode 100644 index 0000000..373074c --- /dev/null +++ b/html/annotated.html @@ -0,0 +1,80 @@ + + + + + + + +Adafruit uBlox Library: Class List + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+ + + + +
 CAdafruit_UBloxDDCArduino library for interfacing with u-blox GPS/RTK modules over I2C
 CAdafruit_UBXClass for parsing UBX protocol messages from u-blox GPS/RTK modules
 CUBX_CFG_PRT_t
+
+
+ + + + diff --git a/html/bc_s.png b/html/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/html/bc_s.png differ diff --git a/html/bdwn.png b/html/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/html/bdwn.png differ diff --git a/html/class_adafruit___u_b_x-members.html b/html/class_adafruit___u_b_x-members.html new file mode 100644 index 0000000..ff26513 --- /dev/null +++ b/html/class_adafruit___u_b_x-members.html @@ -0,0 +1,86 @@ + + + + + + + +Adafruit uBlox Library: Member List + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Adafruit_UBX Member List
+
+
+ +

This is the complete list of members for Adafruit_UBX, including all inherited members.

+ + + + + + + + + + + +
Adafruit_UBX(Stream &stream)Adafruit_UBX
begin()Adafruit_UBX
checkMessages()Adafruit_UBX
onUBXMessageAdafruit_UBX
sendMessage(uint8_t msgClass, uint8_t msgId, uint8_t *payload, uint16_t length)Adafruit_UBX
sendMessageWithAck(uint8_t msgClass, uint8_t msgId, uint8_t *payload, uint16_t length, uint16_t timeout_ms=500)Adafruit_UBX
setMessageCallback(UBXMessageCallback callback)Adafruit_UBX
setUBXOnly(UBXPortId portID, bool checkAck=true, uint16_t timeout_ms=500)Adafruit_UBX
verbose_debugAdafruit_UBX
~Adafruit_UBX()Adafruit_UBX
+ + + + diff --git a/html/class_adafruit___u_b_x.html b/html/class_adafruit___u_b_x.html new file mode 100644 index 0000000..47f5627 --- /dev/null +++ b/html/class_adafruit___u_b_x.html @@ -0,0 +1,378 @@ + + + + + + + +Adafruit uBlox Library: Adafruit_UBX Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
Adafruit_UBX Class Reference
+
+
+ +

Class for parsing UBX protocol messages from u-blox GPS/RTK modules. + More...

+ +

#include <Adafruit_UBX.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Adafruit_UBX (Stream &stream)
 Constructor. More...
 
~Adafruit_UBX ()
 Destructor.
 
bool begin ()
 Initializes the UBX parser. More...
 
bool checkMessages ()
 Check for new UBX messages and parse them. More...
 
bool sendMessage (uint8_t msgClass, uint8_t msgId, uint8_t *payload, uint16_t length)
 Send a UBX message to the GPS module. More...
 
UBXSendStatus sendMessageWithAck (uint8_t msgClass, uint8_t msgId, uint8_t *payload, uint16_t length, uint16_t timeout_ms=500)
 Send a UBX message and wait for acknowledgment. More...
 
UBXSendStatus setUBXOnly (UBXPortId portID, bool checkAck=true, uint16_t timeout_ms=500)
 Configure the GPS module to output only UBX protocol (disables NMEA) More...
 
void setMessageCallback (UBXMessageCallback callback)
 Sets the callback function for UBX messages. More...
 
+ + + + + + + +

+Public Attributes

+uint8_t verbose_debug = 0
 0=off, 1=basic, 2=verbose
 
+UBXMessageCallback onUBXMessage
 Callback for message received.
 
+

Detailed Description

+

Class for parsing UBX protocol messages from u-blox GPS/RTK modules.

+

Constructor & Destructor Documentation

+ +

◆ Adafruit_UBX()

+ +
+
+ + + + + + + + +
Adafruit_UBX::Adafruit_UBX (Stream & stream)
+
+ +

Constructor.

+
Parameters
+ + +
streamReference to a Stream object (Serial, Adafruit_UBloxDDC, etc.)
+
+
+ +
+
+

Member Function Documentation

+ +

◆ begin()

+ +
+
+ + + + + + + +
bool Adafruit_UBX::begin ()
+
+ +

Initializes the UBX parser.

+
Returns
Always returns true (initialization is trivial)
+ +
+
+ +

◆ checkMessages()

+ +
+
+ + + + + + + +
bool Adafruit_UBX::checkMessages ()
+
+ +

Check for new UBX messages and parse them.

+
Returns
True if a complete message was parsed
+ +
+
+ +

◆ sendMessage()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool Adafruit_UBX::sendMessage (uint8_t msgClass,
uint8_t msgId,
uint8_t * payload,
uint16_t length 
)
+
+ +

Send a UBX message to the GPS module.

+
Parameters
+ + + + + +
msgClassMessage class
msgIdMessage ID
payloadPointer to the payload data (can be NULL for zero-length payload)
lengthLength of payload
+
+
+
Returns
True if message was sent successfully
+ +
+
+ +

◆ sendMessageWithAck()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UBXSendStatus Adafruit_UBX::sendMessageWithAck (uint8_t msgClass,
uint8_t msgId,
uint8_t * payload,
uint16_t length,
uint16_t timeout_ms = 500 
)
+
+ +

Send a UBX message and wait for acknowledgment.

+
Parameters
+ + + + + + +
msgClassMessage class
msgIdMessage ID
payloadPointer to the payload data
lengthLength of payload
timeout_msMaximum time to wait for acknowledgment
+
+
+
Returns
UBXSendStatus indicating success, failure, or timeout
+ +
+
+ +

◆ setUBXOnly()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
UBXSendStatus Adafruit_UBX::setUBXOnly (UBXPortId portID,
bool checkAck = true,
uint16_t timeout_ms = 500 
)
+
+ +

Configure the GPS module to output only UBX protocol (disables NMEA)

+
Parameters
+ + + + +
portIDPort identifier (UBX_PORT_DDC, UBX_PORT_UART1, etc.)
checkAckWhether to wait for acknowledgment
timeout_msMaximum time to wait for acknowledgment in milliseconds
+
+
+
Returns
UBXSendStatus indicating success, failure, or timeout
+ +
+
+ +

◆ setMessageCallback()

+ +
+
+ + + + + + + + +
void Adafruit_UBX::setMessageCallback (UBXMessageCallback callback)
+
+ +

Sets the callback function for UBX messages.

+
Parameters
+ + +
callbackFunction pointer to call when a complete UBX message is received
+
+
+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/html/class_adafruit___u_blox_d_d_c-members.html b/html/class_adafruit___u_blox_d_d_c-members.html new file mode 100644 index 0000000..7b86b90 --- /dev/null +++ b/html/class_adafruit___u_blox_d_d_c-members.html @@ -0,0 +1,87 @@ + + + + + + + +Adafruit uBlox Library: Member List + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
Adafruit_UBloxDDC Member List
+
+
+ +

This is the complete list of members for Adafruit_UBloxDDC, including all inherited members.

+ + + + + + + + + + + + +
Adafruit_UBloxDDC(uint8_t address=0x42, TwoWire *wire=&Wire)Adafruit_UBloxDDC
available() overrideAdafruit_UBloxDDCvirtual
begin()Adafruit_UBloxDDC
peek() overrideAdafruit_UBloxDDCvirtual
read() overrideAdafruit_UBloxDDCvirtual
readBytes(uint8_t *buffer, uint16_t length)Adafruit_UBloxDDC
readMessage(uint8_t *buffer, uint16_t maxLength)Adafruit_UBloxDDC
readMessage(uint16_t *messageLength)Adafruit_UBloxDDC
write(uint8_t) overrideAdafruit_UBloxDDCvirtual
write(const uint8_t *buffer, size_t size) overrideAdafruit_UBloxDDCvirtual
~Adafruit_UBloxDDC()Adafruit_UBloxDDC
+ + + + diff --git a/html/class_adafruit___u_blox_d_d_c.html b/html/class_adafruit___u_blox_d_d_c.html new file mode 100644 index 0000000..e4c63e1 --- /dev/null +++ b/html/class_adafruit___u_blox_d_d_c.html @@ -0,0 +1,460 @@ + + + + + + + +Adafruit uBlox Library: Adafruit_UBloxDDC Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
Adafruit_UBloxDDC Class Reference
+
+
+ +

Arduino library for interfacing with u-blox GPS/RTK modules over I2C. + More...

+ +

#include <Adafruit_UBloxDDC.h>

+
+Inheritance diagram for Adafruit_UBloxDDC:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Adafruit_UBloxDDC (uint8_t address=0x42, TwoWire *wire=&Wire)
 Constructor. More...
 
~Adafruit_UBloxDDC ()
 Destructor - frees allocated resources.
 
bool begin ()
 Initializes the GPS module and I2C interface. More...
 
virtual int available () override
 Gets the number of bytes available for reading. More...
 
virtual int read () override
 Reads a single byte from the data stream. More...
 
virtual int peek () override
 Peek at the next available byte without removing it from the stream. More...
 
virtual size_t write (uint8_t) override
 Write a single byte (required by Stream but not suitable for I2C) More...
 
virtual size_t write (const uint8_t *buffer, size_t size) override
 Write multiple bytes at once (required for I2C/DDC) More...
 
uint16_t readBytes (uint8_t *buffer, uint16_t length)
 Read multiple bytes from the data stream. More...
 
uint16_t readMessage (uint8_t *buffer, uint16_t maxLength)
 Read a complete message from the device. More...
 
uint8_t * readMessage (uint16_t *messageLength)
 Read a message into the internal buffer and return a pointer to it. More...
 
+

Detailed Description

+

Arduino library for interfacing with u-blox GPS/RTK modules over I2C.

+

Constructor & Destructor Documentation

+ +

◆ Adafruit_UBloxDDC()

+ +
+
+ + + + + + + + + + + + + + + + + + +
Adafruit_UBloxDDC::Adafruit_UBloxDDC (uint8_t address = 0x42,
TwoWire * wire = &Wire 
)
+
+ +

Constructor.

+
Parameters
+ + + +
addressi2c address (default 0x42)
wireTwoWire instance (default &Wire)
+
+
+ +
+
+

Member Function Documentation

+ +

◆ begin()

+ +
+
+ + + + + + + +
bool Adafruit_UBloxDDC::begin ()
+
+ +

Initializes the GPS module and I2C interface.

+
Returns
True if GPS module responds, false on any failure
+ +
+
+ +

◆ available()

+ +
+
+ + + + + +
+ + + + + + + +
int Adafruit_UBloxDDC::available ()
+
+overridevirtual
+
+ +

Gets the number of bytes available for reading.

+
Returns
Number of bytes available, or 0 if no data or error
+ +
+
+ +

◆ read()

+ +
+
+ + + + + +
+ + + + + + + +
int Adafruit_UBloxDDC::read ()
+
+overridevirtual
+
+ +

Reads a single byte from the data stream.

+
Returns
-1 if no data available or error, otherwise the byte read (0-255)
+ +
+
+ +

◆ peek()

+ +
+
+ + + + + +
+ + + + + + + +
int Adafruit_UBloxDDC::peek ()
+
+overridevirtual
+
+ +

Peek at the next available byte without removing it from the stream.

+
Returns
-1 if no data available or error, otherwise the byte (0-255)
+ +
+
+ +

◆ write() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
size_t Adafruit_UBloxDDC::write (uint8_t val)
+
+overridevirtual
+
+ +

Write a single byte (required by Stream but not suitable for I2C)

+
Parameters
+ + +
valByte to write
+
+
+
Returns
Always returns 0 as single-byte writes aren't supported on I2C
+ +
+
+ +

◆ write() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
size_t Adafruit_UBloxDDC::write (const uint8_t * buffer,
size_t size 
)
+
+overridevirtual
+
+ +

Write multiple bytes at once (required for I2C/DDC)

+
Parameters
+ + + +
bufferPointer to data buffer
sizeNumber of bytes to write
+
+
+
Returns
Number of bytes written
+ +
+
+ +

◆ readBytes()

+ +
+
+ + + + + + + + + + + + + + + + + + +
uint16_t Adafruit_UBloxDDC::readBytes (uint8_t * buffer,
uint16_t length 
)
+
+ +

Read multiple bytes from the data stream.

+
Parameters
+ + + +
bufferPointer to buffer to store data
lengthMaximum number of bytes to read
+
+
+
Returns
Number of bytes actually read, which may be less than requested
+ +
+
+ +

◆ readMessage() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + +
uint16_t Adafruit_UBloxDDC::readMessage (uint8_t * buffer,
uint16_t maxLength 
)
+
+ +

Read a complete message from the device.

+
Parameters
+ + + +
bufferPointer to buffer to store message data
maxLengthMaximum length of buffer
+
+
+
Returns
Number of bytes read into the buffer
+ +
+
+ +

◆ readMessage() [2/2]

+ +
+
+ + + + + + + + +
uint8_t * Adafruit_UBloxDDC::readMessage (uint16_t * messageLength)
+
+ +

Read a message into the internal buffer and return a pointer to it.

+
Parameters
+ + +
messageLengthPointer to variable to store message length
+
+
+
Returns
Pointer to internal buffer containing the message
+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/html/class_adafruit___u_blox_d_d_c.png b/html/class_adafruit___u_blox_d_d_c.png new file mode 100644 index 0000000..1572a27 Binary files /dev/null and b/html/class_adafruit___u_blox_d_d_c.png differ diff --git a/html/classes.html b/html/classes.html new file mode 100644 index 0000000..26c3a9e --- /dev/null +++ b/html/classes.html @@ -0,0 +1,84 @@ + + + + + + + +Adafruit uBlox Library: Class Index + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
a | u
+ + + + + + +
  a  
+
Adafruit_UBX   
  u  
+
Adafruit_UBloxDDC   
UBX_CFG_PRT_t   
+
a | u
+
+ + + + diff --git a/html/closed.png b/html/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/html/closed.png differ diff --git a/html/doc.png b/html/doc.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/html/doc.png differ diff --git a/html/doxygen.css b/html/doxygen.css new file mode 100644 index 0000000..4f1ab91 --- /dev/null +++ b/html/doxygen.css @@ -0,0 +1,1596 @@ +/* The standard CSS for doxygen 1.8.13 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + + +/* @end */ diff --git a/html/doxygen.png b/html/doxygen.png new file mode 100644 index 0000000..3ff17d8 Binary files /dev/null and b/html/doxygen.png differ diff --git a/html/dynsections.js b/html/dynsections.js new file mode 100644 index 0000000..85e1836 --- /dev/null +++ b/html/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +Adafruit uBlox Library: File List + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
+ + + + diff --git a/html/folderclosed.png b/html/folderclosed.png new file mode 100644 index 0000000..bb8ab35 Binary files /dev/null and b/html/folderclosed.png differ diff --git a/html/folderopen.png b/html/folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/html/folderopen.png differ diff --git a/html/functions.html b/html/functions.html new file mode 100644 index 0000000..634b2ee --- /dev/null +++ b/html/functions.html @@ -0,0 +1,213 @@ + + + + + + + +Adafruit uBlox Library: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- f -

+ + +

- i -

+ + +

- m -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+ + +

- w -

+ + +

- ~ -

+
+ + + + diff --git a/html/functions_func.html b/html/functions_func.html new file mode 100644 index 0000000..510e44d --- /dev/null +++ b/html/functions_func.html @@ -0,0 +1,120 @@ + + + + + + + +Adafruit uBlox Library: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/html/functions_vars.html b/html/functions_vars.html new file mode 100644 index 0000000..45bf87f --- /dev/null +++ b/html/functions_vars.html @@ -0,0 +1,110 @@ + + + + + + + +Adafruit uBlox Library: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/html/globals.html b/html/globals.html new file mode 100644 index 0000000..a102b82 --- /dev/null +++ b/html/globals.html @@ -0,0 +1,113 @@ + + + + + + + +Adafruit uBlox Library: File Members + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented file members with links to the documentation:
+
+ + + + diff --git a/html/globals_defs.html b/html/globals_defs.html new file mode 100644 index 0000000..9d91a7b --- /dev/null +++ b/html/globals_defs.html @@ -0,0 +1,95 @@ + + + + + + + +Adafruit uBlox Library: File Members + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/html/globals_enum.html b/html/globals_enum.html new file mode 100644 index 0000000..230fec6 --- /dev/null +++ b/html/globals_enum.html @@ -0,0 +1,86 @@ + + + + + + + +Adafruit uBlox Library: File Members + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/html/globals_type.html b/html/globals_type.html new file mode 100644 index 0000000..d9e9129 --- /dev/null +++ b/html/globals_type.html @@ -0,0 +1,74 @@ + + + + + + + +Adafruit uBlox Library: File Members + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/html/hierarchy.html b/html/hierarchy.html new file mode 100644 index 0000000..5cb647e --- /dev/null +++ b/html/hierarchy.html @@ -0,0 +1,81 @@ + + + + + + + +Adafruit uBlox Library: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12]
+ + + + +
 CAdafruit_UBXClass for parsing UBX protocol messages from u-blox GPS/RTK modules
 CStream
 CAdafruit_UBloxDDCArduino library for interfacing with u-blox GPS/RTK modules over I2C
 CUBX_CFG_PRT_t
+
+
+ + + + diff --git a/html/index.html b/html/index.html new file mode 100644 index 0000000..bf002df --- /dev/null +++ b/html/index.html @@ -0,0 +1,83 @@ + + + + + + + +Adafruit uBlox Library: Arduino library for UBX protocol from u-blox GPS/RTK modules + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Arduino library for UBX protocol from u-blox GPS/RTK modules
+
+
+

+Introduction

+

This is a library for parsing UBX protocol messages from u-blox GPS/RTK modules. It works with any Stream-based interface including UART and DDC (I2C).

+

Designed specifically to work with u-blox GPS/RTK modules like NEO-M8P, ZED-F9P, etc.

+

+Author

+

Written by Limor Fried/Ladyada for Adafruit Industries.

+

+License

+

MIT license, all text above must be included in any redistribution

+
+ + + + diff --git a/html/jquery.js b/html/jquery.js new file mode 100644 index 0000000..f5343ed --- /dev/null +++ b/html/jquery.js @@ -0,0 +1,87 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + + +
+
+
UBX_CFG_PRT_t Member List
+
+
+ +

This is the complete list of members for UBX_CFG_PRT_t, including all inherited members.

+
+ + + + + + + + + + + +
baudRateUBX_CFG_PRT_t
fieldsUBX_CFG_PRT_t
flagsUBX_CFG_PRT_t
inProtoMaskUBX_CFG_PRT_t
modeUBX_CFG_PRT_t
outProtoMaskUBX_CFG_PRT_t
portIDUBX_CFG_PRT_t
rawUBX_CFG_PRT_t
reserved1UBX_CFG_PRT_t
reserved2UBX_CFG_PRT_t
txReadyUBX_CFG_PRT_t
+ + + + diff --git a/html/union_u_b_x___c_f_g___p_r_t__t.html b/html/union_u_b_x___c_f_g___p_r_t__t.html new file mode 100644 index 0000000..9b51132 --- /dev/null +++ b/html/union_u_b_x___c_f_g___p_r_t__t.html @@ -0,0 +1,132 @@ + + + + + + + +Adafruit uBlox Library: UBX_CFG_PRT_t Union Reference + + + + + + + + + +
+
+ + + + + + +
+
Adafruit uBlox Library +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+ +
+
UBX_CFG_PRT_t Union Reference
+
+
+ +

#include <Adafruit_uBlox_typedef.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+struct {
+   uint8_t   portID
 Port identifier (0=DDC/I2C, 1=UART1, 2=UART2, 3=USB, 4=SPI)
 
+   uint8_t   reserved1
 Reserved.
 
+   uint16_t   txReady
 TX ready PIN configuration.
 
+   uint32_t   mode
 UART mode (bit field) or Reserved for non-UART ports.
 
+   uint32_t   baudRate
 Baudrate in bits/second (UART only)
 
+   uint16_t   inProtoMask
 Input protocol mask.
 
+   uint16_t   outProtoMask
 Output protocol mask.
 
+   uint16_t   flags
 Flags bit field.
 
+   uint16_t   reserved2
 Reserved.
 
fields
 Fields for CFG-PRT message.
 
+uint8_t raw [20]
 Raw byte array for CFG-PRT message.
 
+

Detailed Description

+

UBX CFG-PRT (Port Configuration) message structure. 20 bytes total.

+

The documentation for this union was generated from the following file: +
+ + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..9d6a47f --- /dev/null +++ b/index.html @@ -0,0 +1,11 @@ + + + + + + Page Redirection + + + If you are not redirected automatically, follow the link to the documentation + + \ No newline at end of file