From c3e3521001213aae4485b1855ce8452303d755b2 Mon Sep 17 00:00:00 2001 From: "Richard Flay (Hyper)" Date: Sun, 28 Jul 2013 01:16:22 +0930 Subject: [PATCH 01/13] OP-1049: Hotfix to 13.06.02 for MPU6000 FIFO overflow on CC3D when board initialisation takes longer than 150ms. --- flight/pios/common/pios_mpu6000.c | 93 +++++++++++++++++++++++-- flight/pios/inc/pios_mpu6000.h | 109 +++++++++++++++--------------- 2 files changed, 143 insertions(+), 59 deletions(-) diff --git a/flight/pios/common/pios_mpu6000.c b/flight/pios/common/pios_mpu6000.c index 371068e0c..5ea27f0c8 100644 --- a/flight/pios/common/pios_mpu6000.c +++ b/flight/pios/common/pios_mpu6000.c @@ -64,7 +64,13 @@ static void PIOS_MPU6000_Config(struct pios_mpu6000_cfg const *cfg); static int32_t PIOS_MPU6000_SetReg(uint8_t address, uint8_t buffer); static int32_t PIOS_MPU6000_GetReg(uint8_t address); -#define GRAV 9.81f +#define GRAV 9.81f + +#ifdef PIOS_MPU6000_ACCEL +#define PIOS_MPU6000_SAMPLES_BYTES 14 +#else +#define PIOS_MPU6000_SAMPLES_BYTES 8 +#endif /** * @brief Allocate a new device @@ -489,6 +495,62 @@ int32_t PIOS_MPU6000_Test(void) return 0; } +/** + * @brief Reads the contents of the MPU6000 Interrupt Status register from an ISR + * @return The register value or -1 on failure to claim the bus + */ +static int32_t PIOS_MPU6000_GetInterruptStatusRegISR(bool *woken) +{ + /* Interrupt Status register can be read at high SPI clock speed */ + uint8_t data; + + if (PIOS_MPU6000_ClaimBusISR(woken) != 0) { + return -1; + } + PIOS_SPI_TransferByte(dev->spi_id, (0x80 | PIOS_MPU6000_INT_STATUS_REG)); + data = PIOS_SPI_TransferByte(dev->spi_id, 0); + PIOS_MPU6000_ReleaseBusISR(woken); + return data; +} + +/** + * @brief Resets the MPU6000 FIFO from an ISR + * @param woken[in,out] If non-NULL, will be set to true if woken was false and a higher priority + * task has is now eligible to run, else unchanged + * @return 0 if operation was successful + * @return -1 if unable to claim SPI bus + * @return -2 if write to the device failed + */ +static int32_t PIOS_MPU6000_ResetFifoISR(bool *woken) +{ + int32_t result = 0; + + /* Register writes must be at < 1MHz SPI clock. + * Speed can only be changed when SPI bus semaphore is held, but + * device chip select must not be enabled, so we use the direct + * SPI bus claim call here */ + if (PIOS_SPI_ClaimBusISR(dev->spi_id, woken) != 0) { + return -1; + } + /* Reduce SPI clock speed. */ + PIOS_SPI_SetClockSpeed(dev->spi_id, PIOS_SPI_PRESCALER_256); + /* Enable chip select */ + PIOS_SPI_RC_PinSet(dev->spi_id, dev->slave_num, 0); + /* Reset FIFO. */ + if (PIOS_SPI_TransferByte(dev->spi_id, 0x7f & PIOS_MPU6000_USER_CTRL_REG) != 0) { + result = -2; + } else if (PIOS_SPI_TransferByte(dev->spi_id, (dev->cfg->User_ctl | PIOS_MPU6000_USERCTL_FIFO_RST)) != 0) { + result = -2; + } + /* Disable chip select. */ + PIOS_SPI_RC_PinSet(dev->spi_id, dev->slave_num, 1); + /* Increase SPI clock speed. */ + PIOS_SPI_SetClockSpeed(dev->spi_id, PIOS_SPI_PRESCALER_16); + /* Release the SPI bus semaphore. */ + PIOS_SPI_ReleaseBusISR(dev->spi_id, woken); + return result; +} + /** * @brief Obtains the number of bytes in the FIFO. Call from ISR only. * @return the number of bytes in the FIFO @@ -542,8 +604,29 @@ bool PIOS_MPU6000_IRQHandler(void) return false; } + /* Temporary fix for OP-1049. Expected to be superceded for next major release + * by code changes for OP-1039. + * Read interrupt status register to check for FIFO overflow. Must be the + * first read after interrupt, in case the device is configured so that + * any read clears in the status register (PIOS_MPU6000_INT_CLR_ANYRD set in + * interrupt config register) */ + int32_t result; + if ((result = PIOS_MPU6000_GetInterruptStatusRegISR(&woken)) < 0) { + return woken; + } + if (result & PIOS_MPU6000_INT_STATUS_FIFO_OVERFLOW) { + /* The FIFO has overflowed, so reset it, + * to enable sample sync to be recovered. + * If the reset fails, we are in trouble, but + * we keep trying on subsequent interrupts. */ + PIOS_MPU6000_ResetFifoISR(&woken); + /* Return and wait for the next new sample. */ + return woken; + } + + /* Usual case - FIFO has not overflowed. */ mpu6000_count = PIOS_MPU6000_FifoDepthISR(&woken); - if (mpu6000_count < (int32_t)sizeof(struct pios_mpu6000_data)) { + if (mpu6000_count < PIOS_MPU6000_SAMPLES_BYTES) { return woken; } @@ -551,8 +634,8 @@ bool PIOS_MPU6000_IRQHandler(void) return woken; } - static uint8_t mpu6000_send_buf[1 + sizeof(struct pios_mpu6000_data)] = { PIOS_MPU6000_FIFO_REG | 0x80, 0, 0, 0, 0, 0, 0, 0, 0 }; - static uint8_t mpu6000_rec_buf[1 + sizeof(struct pios_mpu6000_data)]; + static uint8_t mpu6000_send_buf[1 + PIOS_MPU6000_SAMPLES_BYTES] = { PIOS_MPU6000_FIFO_REG | 0x80 }; + static uint8_t mpu6000_rec_buf[1 + PIOS_MPU6000_SAMPLES_BYTES]; if (PIOS_SPI_TransferBlock(dev->spi_id, &mpu6000_send_buf[0], &mpu6000_rec_buf[0], sizeof(mpu6000_send_buf), NULL) < 0) { PIOS_MPU6000_ReleaseBusISR(&woken); @@ -565,7 +648,7 @@ bool PIOS_MPU6000_IRQHandler(void) static struct pios_mpu6000_data data; // In the case where extras samples backed up grabbed an extra - if (mpu6000_count >= (int32_t)(sizeof(data) * 2)) { + if (mpu6000_count >= PIOS_MPU6000_SAMPLES_BYTES * 2) { mpu6000_fifo_backup++; if (PIOS_MPU6000_ClaimBusISR(&woken) != 0) { return woken; diff --git a/flight/pios/inc/pios_mpu6000.h b/flight/pios/inc/pios_mpu6000.h index 91ea89d3e..cda019edf 100644 --- a/flight/pios/inc/pios_mpu6000.h +++ b/flight/pios/inc/pios_mpu6000.h @@ -33,71 +33,72 @@ #define PIOS_MPU6000_H /* MPU6000 Addresses */ -#define PIOS_MPU6000_SMPLRT_DIV_REG 0X19 -#define PIOS_MPU6000_DLPF_CFG_REG 0X1A -#define PIOS_MPU6000_GYRO_CFG_REG 0X1B -#define PIOS_MPU6000_ACCEL_CFG_REG 0X1C -#define PIOS_MPU6000_FIFO_EN_REG 0x23 -#define PIOS_MPU6000_INT_CFG_REG 0x37 -#define PIOS_MPU6000_INT_EN_REG 0x38 -#define PIOS_MPU6000_INT_STATUS_REG 0x3A -#define PIOS_MPU6000_ACCEL_X_OUT_MSB 0x3B -#define PIOS_MPU6000_ACCEL_X_OUT_LSB 0x3C -#define PIOS_MPU6000_ACCEL_Y_OUT_MSB 0x3D -#define PIOS_MPU6000_ACCEL_Y_OUT_LSB 0x3E -#define PIOS_MPU6000_ACCEL_Z_OUT_MSB 0x3F -#define PIOS_MPU6000_ACCEL_Z_OUT_LSB 0x40 -#define PIOS_MPU6000_TEMP_OUT_MSB 0x41 -#define PIOS_MPU6000_TEMP_OUT_LSB 0x42 -#define PIOS_MPU6000_GYRO_X_OUT_MSB 0x43 -#define PIOS_MPU6000_GYRO_X_OUT_LSB 0x44 -#define PIOS_MPU6000_GYRO_Y_OUT_MSB 0x45 -#define PIOS_MPU6000_GYRO_Y_OUT_LSB 0x46 -#define PIOS_MPU6000_GYRO_Z_OUT_MSB 0x47 -#define PIOS_MPU6000_GYRO_Z_OUT_LSB 0x48 -#define PIOS_MPU6000_USER_CTRL_REG 0x6A -#define PIOS_MPU6000_PWR_MGMT_REG 0x6B -#define PIOS_MPU6000_FIFO_CNT_MSB 0x72 -#define PIOS_MPU6000_FIFO_CNT_LSB 0x73 -#define PIOS_MPU6000_FIFO_REG 0x74 -#define PIOS_MPU6000_WHOAMI 0x75 +#define PIOS_MPU6000_SMPLRT_DIV_REG 0X19 +#define PIOS_MPU6000_DLPF_CFG_REG 0X1A +#define PIOS_MPU6000_GYRO_CFG_REG 0X1B +#define PIOS_MPU6000_ACCEL_CFG_REG 0X1C +#define PIOS_MPU6000_FIFO_EN_REG 0x23 +#define PIOS_MPU6000_INT_CFG_REG 0x37 +#define PIOS_MPU6000_INT_EN_REG 0x38 +#define PIOS_MPU6000_INT_STATUS_REG 0x3A +#define PIOS_MPU6000_ACCEL_X_OUT_MSB 0x3B +#define PIOS_MPU6000_ACCEL_X_OUT_LSB 0x3C +#define PIOS_MPU6000_ACCEL_Y_OUT_MSB 0x3D +#define PIOS_MPU6000_ACCEL_Y_OUT_LSB 0x3E +#define PIOS_MPU6000_ACCEL_Z_OUT_MSB 0x3F +#define PIOS_MPU6000_ACCEL_Z_OUT_LSB 0x40 +#define PIOS_MPU6000_TEMP_OUT_MSB 0x41 +#define PIOS_MPU6000_TEMP_OUT_LSB 0x42 +#define PIOS_MPU6000_GYRO_X_OUT_MSB 0x43 +#define PIOS_MPU6000_GYRO_X_OUT_LSB 0x44 +#define PIOS_MPU6000_GYRO_Y_OUT_MSB 0x45 +#define PIOS_MPU6000_GYRO_Y_OUT_LSB 0x46 +#define PIOS_MPU6000_GYRO_Z_OUT_MSB 0x47 +#define PIOS_MPU6000_GYRO_Z_OUT_LSB 0x48 +#define PIOS_MPU6000_USER_CTRL_REG 0x6A +#define PIOS_MPU6000_PWR_MGMT_REG 0x6B +#define PIOS_MPU6000_FIFO_CNT_MSB 0x72 +#define PIOS_MPU6000_FIFO_CNT_LSB 0x73 +#define PIOS_MPU6000_FIFO_REG 0x74 +#define PIOS_MPU6000_WHOAMI 0x75 /* FIFO enable for storing different values */ -#define PIOS_MPU6000_FIFO_TEMP_OUT 0x80 -#define PIOS_MPU6000_FIFO_GYRO_X_OUT 0x40 -#define PIOS_MPU6000_FIFO_GYRO_Y_OUT 0x20 -#define PIOS_MPU6000_FIFO_GYRO_Z_OUT 0x10 -#define PIOS_MPU6000_ACCEL_OUT 0x08 +#define PIOS_MPU6000_FIFO_TEMP_OUT 0x80 +#define PIOS_MPU6000_FIFO_GYRO_X_OUT 0x40 +#define PIOS_MPU6000_FIFO_GYRO_Y_OUT 0x20 +#define PIOS_MPU6000_FIFO_GYRO_Z_OUT 0x10 +#define PIOS_MPU6000_ACCEL_OUT 0x08 /* Interrupt Configuration */ -#define PIOS_MPU6000_INT_ACTL 0x80 -#define PIOS_MPU6000_INT_OPEN 0x40 -#define PIOS_MPU6000_INT_LATCH_EN 0x20 -#define PIOS_MPU6000_INT_CLR_ANYRD 0x10 +#define PIOS_MPU6000_INT_ACTL 0x80 +#define PIOS_MPU6000_INT_OPEN 0x40 +#define PIOS_MPU6000_INT_LATCH_EN 0x20 +#define PIOS_MPU6000_INT_CLR_ANYRD 0x10 -#define PIOS_MPU6000_INTEN_OVERFLOW 0x10 -#define PIOS_MPU6000_INTEN_DATA_RDY 0x01 +#define PIOS_MPU6000_INTEN_OVERFLOW 0x10 +#define PIOS_MPU6000_INTEN_DATA_RDY 0x01 /* Interrupt status */ -#define PIOS_MPU6000_INT_STATUS_FIFO_FULL 0x80 -#define PIOS_MPU6000_INT_STATUS_IMU_RDY 0X04 -#define PIOS_MPU6000_INT_STATUS_DATA_RDY 0X01 +#define PIOS_MPU6000_INT_STATUS_FIFO_FULL 0x80 +#define PIOS_MPU6000_INT_STATUS_FIFO_OVERFLOW 0x10 +#define PIOS_MPU6000_INT_STATUS_IMU_RDY 0X04 +#define PIOS_MPU6000_INT_STATUS_DATA_RDY 0X01 /* User control functionality */ -#define PIOS_MPU6000_USERCTL_FIFO_EN 0X40 -#define PIOS_MPU6000_USERCTL_I2C_MST_EN 0x20 -#define PIOS_MPU6000_USERCTL_DIS_I2C 0X10 -#define PIOS_MPU6000_USERCTL_FIFO_RST 0X04 -#define PIOS_MPU6000_USERCTL_SIG_COND 0X02 -#define PIOS_MPU6000_USERCTL_GYRO_RST 0X01 +#define PIOS_MPU6000_USERCTL_FIFO_EN 0X40 +#define PIOS_MPU6000_USERCTL_I2C_MST_EN 0x20 +#define PIOS_MPU6000_USERCTL_DIS_I2C 0X10 +#define PIOS_MPU6000_USERCTL_FIFO_RST 0X04 +#define PIOS_MPU6000_USERCTL_SIG_COND 0X02 +#define PIOS_MPU6000_USERCTL_GYRO_RST 0X01 /* Power management and clock selection */ -#define PIOS_MPU6000_PWRMGMT_IMU_RST 0X80 -#define PIOS_MPU6000_PWRMGMT_INTERN_CLK 0X00 -#define PIOS_MPU6000_PWRMGMT_PLL_X_CLK 0X01 -#define PIOS_MPU6000_PWRMGMT_PLL_Y_CLK 0X02 -#define PIOS_MPU6000_PWRMGMT_PLL_Z_CLK 0X03 -#define PIOS_MPU6000_PWRMGMT_STOP_CLK 0X07 +#define PIOS_MPU6000_PWRMGMT_IMU_RST 0X80 +#define PIOS_MPU6000_PWRMGMT_INTERN_CLK 0X00 +#define PIOS_MPU6000_PWRMGMT_PLL_X_CLK 0X01 +#define PIOS_MPU6000_PWRMGMT_PLL_Y_CLK 0X02 +#define PIOS_MPU6000_PWRMGMT_PLL_Z_CLK 0X03 +#define PIOS_MPU6000_PWRMGMT_STOP_CLK 0X07 enum pios_mpu6000_range { PIOS_MPU6000_SCALE_250_DEG = 0x00, From 2340f4f0d9cf1d77969e7c4cfe732ec6120a5cfe Mon Sep 17 00:00:00 2001 From: Brian Webb Date: Mon, 29 Jul 2013 20:37:00 -0700 Subject: [PATCH 02/13] OP-1050: Moves LED configuration above settings erase in OPLink pios_board.c to prevent crashing when settings are erased. --- flight/targets/boards/oplinkmini/firmware/pios_board.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/flight/targets/boards/oplinkmini/firmware/pios_board.c b/flight/targets/boards/oplinkmini/firmware/pios_board.c index 5c429d57e..7192b0a4f 100644 --- a/flight/targets/boards/oplinkmini/firmware/pios_board.c +++ b/flight/targets/boards/oplinkmini/firmware/pios_board.c @@ -124,6 +124,10 @@ void PIOS_Board_Init(void) PIOS_RTC_Init(&pios_rtc_main_cfg); #endif /* PIOS_INCLUDE_RTC */ +#if defined(PIOS_INCLUDE_LED) + PIOS_LED_Init(&pios_led_cfg); +#endif /* PIOS_INCLUDE_LED */ + /* IAP System Setup */ PIOS_IAP_Init(); // check for safe mode commands from gcs @@ -141,10 +145,6 @@ void PIOS_Board_Init(void) OPLinkStatusInitialize(); #endif /* PIOS_INCLUDE_RFM22B */ -#if defined(PIOS_INCLUDE_LED) - PIOS_LED_Init(&pios_led_cfg); -#endif /* PIOS_INCLUDE_LED */ - /* Initialize the delayed callback library */ CallbackSchedulerInitialize(); From 011c0b35ab6c83947e3f5eb66b8c0595ea7e82ca Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Thu, 1 Aug 2013 22:36:37 +0200 Subject: [PATCH 03/13] OP-910 Updated WHATSNEW.txt for 13.06.03 --- WHATSNEW.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/WHATSNEW.txt b/WHATSNEW.txt index 236577e43..9f6e282ea 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -1,3 +1,12 @@ +--- RELEASE-13.06.03 --- + +This maintenance release addresses the following issues: +- FIxed CC3D attitude estimation failure after multiple settings changes and reboots. +- Fixed OPLink crashes when erasing settings + +JIRA issues addressed in this maintenance release: +OP-1049, OP-1050 + --- RELEASE-13.06.02 --- Refactoring of OPLink radio driver. Auto-configuration was removed, and a From 1c1ec8c959e9dd31679a61900862fd99a68ada06 Mon Sep 17 00:00:00 2001 From: Mathieu Rondonneau Date: Wed, 14 Aug 2013 17:01:54 -0700 Subject: [PATCH 04/13] OP-1070 GrountTruth object sent to FC. this should not be the case so remove it from periodic list. --- shared/uavobjectdefinition/groundtruth.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared/uavobjectdefinition/groundtruth.xml b/shared/uavobjectdefinition/groundtruth.xml index c852754ee..cb272ed65 100644 --- a/shared/uavobjectdefinition/groundtruth.xml +++ b/shared/uavobjectdefinition/groundtruth.xml @@ -11,8 +11,8 @@ - - + + From 42ff8a24bb5c2d2f2e23192dd86f81d3a83b9d64 Mon Sep 17 00:00:00 2001 From: Andrew Finegan Date: Fri, 19 Jul 2013 01:34:09 -0400 Subject: [PATCH 05/13] Updated urlfactory file, google maps now require ssl then recieving tiles, also updated the google map version parser to ssl --- .../libs/opmapcontrol/src/core/urlfactory.cpp | 76 +++++++++++-------- 1 file changed, 44 insertions(+), 32 deletions(-) diff --git a/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp b/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp index cd4e4d0d0..d422813c4 100644 --- a/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp +++ b/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp @@ -27,11 +27,14 @@ #include "urlfactory.h" #include + namespace core { const double UrlFactory::EarthRadiusKm = 6378.137; // WGS-84 UrlFactory::UrlFactory() { + + /// /// timeout for map connections /// @@ -87,8 +90,11 @@ void UrlFactory::TryCorrectGoogleVersions() { QMutexLocker locker(&mutex); + if (CorrectGoogleVersions && !IsCorrectGoogleVersions()) { - QNetworkReply *reply; + + + QNetworkReply *reply; QNetworkRequest qheader; QNetworkAccessManager network; QEventLoop q; @@ -101,10 +107,10 @@ void UrlFactory::TryCorrectGoogleVersions() #ifdef DEBUG_URLFACTORY qDebug() << "Correct GoogleVersion"; #endif // DEBUG_URLFACTORY - setIsCorrectGoogleVersions(true); - QString url = "http://maps.google.com"; - - qheader.setUrl(QUrl(url)); + //setIsCorrectGoogleVersions(true); + QString url = "https://maps.google.com"; + + qheader.setUrl(QUrl(url)); qheader.setRawHeader("User-Agent", UserAgent); reply = network.get(qheader); tT.start(Timeout); @@ -120,39 +126,42 @@ void UrlFactory::TryCorrectGoogleVersions() return; } QString html = QString(reply->readAll()); - QRegExp reg("\"*http://mt0.google.com/vt/lyrs=m@(\\d*)", Qt::CaseInsensitive); + QRegExp reg("\"*https://mts0.google.com/vt/lyrs=m@(\\d*)", Qt::CaseInsensitive); if (reg.indexIn(html) != -1) { QStringList gc = reg.capturedTexts(); VersionGoogleMap = QString("m@%1").arg(gc[1]); VersionGoogleMapChina = VersionGoogleMap; + VersionGoogleMapKorea = VersionGoogleMap; #ifdef DEBUG_URLFACTORY qDebug() << "TryCorrectGoogleVersions, VersionGoogleMap: " << VersionGoogleMap; #endif // DEBUG_URLFACTORY } - reg = QRegExp("\"*http://mt0.google.com/vt/lyrs=h@(\\d*)", Qt::CaseInsensitive); + reg = QRegExp("\"*https://mts0.google.com/vt/lyrs=h@(\\d*)", Qt::CaseInsensitive); if (reg.indexIn(html) != -1) { QStringList gc = reg.capturedTexts(); VersionGoogleLabels = QString("h@%1").arg(gc[1]); VersionGoogleLabelsChina = VersionGoogleLabels; + VersionGoogleLabelsKorea = VersionGoogleLabels; #ifdef DEBUG_URLFACTORY qDebug() << "TryCorrectGoogleVersions, VersionGoogleLabels: " << VersionGoogleLabels; #endif // DEBUG_URLFACTORY } - reg = QRegExp("\"*http://khm0.google.com/kh/v=(\\d*)", Qt::CaseInsensitive); + reg = QRegExp("\"*https://khms0.google.com/kh/v=(\\d*)", Qt::CaseInsensitive); if (reg.indexIn(html) != -1) { QStringList gc = reg.capturedTexts(); - VersionGoogleSatellite = gc[1]; + VersionGoogleSatellite = gc[1]; VersionGoogleSatelliteKorea = VersionGoogleSatellite; VersionGoogleSatelliteChina = "s@" + VersionGoogleSatellite; qDebug() << "TryCorrectGoogleVersions, VersionGoogleSatellite: " << VersionGoogleSatellite; } - reg = QRegExp("\"*http://mt0.google.com/vt/lyrs=t@(\\d*),r@(\\d*)", Qt::CaseInsensitive); + reg = QRegExp("\"*https://mts0.google.com/vt/lyrs=t@(\\d*),r@(\\d*)", Qt::CaseInsensitive); if (reg.indexIn(html) != -1) { QStringList gc = reg.capturedTexts(); VersionGoogleTerrain = QString("t@%1,r@%2").arg(gc[1]).arg(gc[2]); VersionGoogleTerrainChina = VersionGoogleTerrain; + VersionGoogleTerrainChina = VersionGoogleTerrain; #ifdef DEBUG_URLFACTORY qDebug() << "TryCorrectGoogleVersions, VersionGoogleTerrain: " << VersionGoogleTerrain; #endif // DEBUG_URLFACTORY @@ -169,48 +178,48 @@ QString UrlFactory::MakeImageUrl(const MapType::Types &type, const Point &pos, c switch (type) { case MapType::GoogleMap: { - QString server = "mt"; + QString server = "mts"; QString request = "vt"; QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - - return QString("http://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMap).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMap).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleSatellite: { - QString server = "khm"; + QString server = "khms"; QString request = "kh"; QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("http://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatellite).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + QString VersionGoogleSatellite = "132"; + return QString("https://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatellite).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleLabels: { - QString server = "mt"; + QString server = "mts"; QString request = "vt"; QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("http://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleLabels).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleLabels).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleTerrain: { - QString server = "mt"; + QString server = "mts"; QString request = "vt"; QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("http://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleTerrain).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("https://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleTerrain).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleMapChina: @@ -233,7 +242,7 @@ QString UrlFactory::MakeImageUrl(const MapType::Types &type, const Point &pos, c QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); - // TryCorrectGoogleVersions(); + TryCorrectGoogleVersions(); // http://khm0.google.cn/kh/v=46&x=12&y=6&z=4&s=Ga return QString("http://%1%2.google.cn/%3/lyrs=%4&gl=cn&x=%5%6&y=%7&z=%8&s=%9").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatelliteChina).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); @@ -267,42 +276,45 @@ QString UrlFactory::MakeImageUrl(const MapType::Types &type, const Point &pos, c break; case MapType::GoogleMapKorea: { - QString server = "mt"; - QString request = "mt"; + QString server = "mts"; + QString request = "vt"; QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); + TryCorrectGoogleVersions(); + // https://mts0.google.com/vt/lyrs=m@224000000&hl=ko&gl=KR&src=app&x=107&y=50&z=7&s=Gal + // https://mts0.google.com/mt/v=kr1.11&hl=ko&x=109&y=49&z=7&s= + + qDebug() << QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMapKorea).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); - // http://mt3.gmaptiles.co.kr/mt/v=kr1.11&hl=lt&x=109&y=49&z=7&s= - - QString ret = QString("http://%1%2.gmaptiles.co.kr/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMapKorea).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + QString ret = QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMapKorea).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); return ret; } break; case MapType::GoogleSatelliteKorea: { - QString server = "khm"; + QString server = "khms"; QString request = "kh"; QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); - + TryCorrectGoogleVersions(); // http://khm1.google.co.kr/kh/v=54&x=109&y=49&z=7&s= - return QString("http://%1%2.google.co.kr/%3/v=%4&x=%5%6&y=%7&z=%8&s=%9").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatelliteKorea).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("https://%1%2.google.co.kr/%3/v=%4&x=%5%6&y=%7&z=%8&s=%9").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatelliteKorea).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleLabelsKorea: { - QString server = "mt"; + QString server = "mts"; QString request = "mt"; QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); + TryCorrectGoogleVersions(); + // https://mts1.gmaptiles.co.kr/mt/v=kr1t.11&hl=lt&x=109&y=50&z=7&s=G - // http://mt1.gmaptiles.co.kr/mt/v=kr1t.11&hl=lt&x=109&y=50&z=7&s=G - - return QString("http://%1%2.gmaptiles.co.kr/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleLabelsKorea).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("https://%1%2.gmaptiles.co.kr/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleLabelsKorea).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::YahooMap: From 27aa911af2b753c282fac366979434caa23c5871 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Fri, 19 Jul 2013 14:14:24 +0000 Subject: [PATCH 06/13] OP-1044 fix slow tiles loading preventig to ask for version at each request --- .../src/libs/opmapcontrol/src/core/urlfactory.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp b/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp index d422813c4..39d2dc4c2 100644 --- a/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp +++ b/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp @@ -88,6 +88,10 @@ bool UrlFactory::IsCorrectGoogleVersions() void UrlFactory::TryCorrectGoogleVersions() { + static bool versionRetrieved = false; + if (versionRetrieved){ + return; + } QMutexLocker locker(&mutex); @@ -167,6 +171,7 @@ void UrlFactory::TryCorrectGoogleVersions() #endif // DEBUG_URLFACTORY } reply->deleteLater(); + versionRetrieved = true; } } From 05c6d12eacf6fd7d433d8ae7b9cc1682c3d7c30f Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Fri, 19 Jul 2013 14:23:41 +0000 Subject: [PATCH 07/13] OP-1044 Uncrustify --- .../libs/opmapcontrol/src/core/urlfactory.cpp | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp b/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp index 39d2dc4c2..0bc943ff4 100644 --- a/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp +++ b/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp @@ -33,8 +33,6 @@ const double UrlFactory::EarthRadiusKm = 6378.137; // WGS-84 UrlFactory::UrlFactory() { - - /// /// timeout for map connections /// @@ -89,16 +87,15 @@ bool UrlFactory::IsCorrectGoogleVersions() void UrlFactory::TryCorrectGoogleVersions() { static bool versionRetrieved = false; - if (versionRetrieved){ + + if (versionRetrieved) { return; } QMutexLocker locker(&mutex); if (CorrectGoogleVersions && !IsCorrectGoogleVersions()) { - - - QNetworkReply *reply; + QNetworkReply *reply; QNetworkRequest qheader; QNetworkAccessManager network; QEventLoop q; @@ -111,10 +108,10 @@ void UrlFactory::TryCorrectGoogleVersions() #ifdef DEBUG_URLFACTORY qDebug() << "Correct GoogleVersion"; #endif // DEBUG_URLFACTORY - //setIsCorrectGoogleVersions(true); + // setIsCorrectGoogleVersions(true); QString url = "https://maps.google.com"; - - qheader.setUrl(QUrl(url)); + + qheader.setUrl(QUrl(url)); qheader.setRawHeader("User-Agent", UserAgent); reply = network.get(qheader); tT.start(Timeout); @@ -135,7 +132,7 @@ void UrlFactory::TryCorrectGoogleVersions() QStringList gc = reg.capturedTexts(); VersionGoogleMap = QString("m@%1").arg(gc[1]); VersionGoogleMapChina = VersionGoogleMap; - VersionGoogleMapKorea = VersionGoogleMap; + VersionGoogleMapKorea = VersionGoogleMap; #ifdef DEBUG_URLFACTORY qDebug() << "TryCorrectGoogleVersions, VersionGoogleMap: " << VersionGoogleMap; #endif // DEBUG_URLFACTORY @@ -146,7 +143,7 @@ void UrlFactory::TryCorrectGoogleVersions() QStringList gc = reg.capturedTexts(); VersionGoogleLabels = QString("h@%1").arg(gc[1]); VersionGoogleLabelsChina = VersionGoogleLabels; - VersionGoogleLabelsKorea = VersionGoogleLabels; + VersionGoogleLabelsKorea = VersionGoogleLabels; #ifdef DEBUG_URLFACTORY qDebug() << "TryCorrectGoogleVersions, VersionGoogleLabels: " << VersionGoogleLabels; #endif // DEBUG_URLFACTORY @@ -154,7 +151,7 @@ void UrlFactory::TryCorrectGoogleVersions() reg = QRegExp("\"*https://khms0.google.com/kh/v=(\\d*)", Qt::CaseInsensitive); if (reg.indexIn(html) != -1) { QStringList gc = reg.capturedTexts(); - VersionGoogleSatellite = gc[1]; + VersionGoogleSatellite = gc[1]; VersionGoogleSatelliteKorea = VersionGoogleSatellite; VersionGoogleSatelliteChina = "s@" + VersionGoogleSatellite; @@ -200,8 +197,8 @@ QString UrlFactory::MakeImageUrl(const MapType::Types &type, const Point &pos, c QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - QString VersionGoogleSatellite = "132"; - return QString("https://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatellite).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + QString VersionGoogleSatellite = "132"; + return QString("https://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatellite).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleLabels: @@ -287,10 +284,10 @@ QString UrlFactory::MakeImageUrl(const MapType::Types &type, const Point &pos, c QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - // https://mts0.google.com/vt/lyrs=m@224000000&hl=ko&gl=KR&src=app&x=107&y=50&z=7&s=Gal + // https://mts0.google.com/vt/lyrs=m@224000000&hl=ko&gl=KR&src=app&x=107&y=50&z=7&s=Gal // https://mts0.google.com/mt/v=kr1.11&hl=ko&x=109&y=49&z=7&s= - - qDebug() << QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMapKorea).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + + qDebug() << QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMapKorea).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); QString ret = QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMapKorea).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); return ret; From 86a02d693e55c948d48185f7f5473ed1f9f421b3 Mon Sep 17 00:00:00 2001 From: David Date: Sat, 17 Aug 2013 00:51:09 +1000 Subject: [PATCH 08/13] Update copy data for ssl, readme is way out of date, changed one line but on a read through, it's very out of date now as things are easier now. Might be best to link to the Wiki... --- ground/openpilotgcs/copydata.pro | 10 ++++++---- make/winx86/README.txt | 6 +++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/ground/openpilotgcs/copydata.pro b/ground/openpilotgcs/copydata.pro index 4c3289264..8cef1495f 100644 --- a/ground/openpilotgcs/copydata.pro +++ b/ground/openpilotgcs/copydata.pro @@ -46,7 +46,7 @@ equals(copydata, 1) { for(dll, QT_IMAGEFORMAT_DLLS) { data_copy.commands += $(COPY_FILE) $$targetPath(\"$$[QT_INSTALL_PLUGINS]/imageformats/$$dll\") $$targetPath(\"$$GCS_APP_PATH/imageformats/$$dll\") $$addNewline() } - + # copy phonon_backend QT_PHONON_BACKEND_DLLS = phonon_ds94.dll data_copy.commands += -@$(MKDIR) $$targetPath(\"$$GCS_APP_PATH/phonon_backend\") $$addNewline() @@ -74,9 +74,11 @@ equals(copydata, 1) { # xcopy /s /e \bin\SDL.dll C:\QtSDK\Desktop\Qt\4.7.3\mingw\bin\SDL.dll # xcopy /s /e \include\SDL\* C:\QtSDK\Desktop\Qt\4.7.3\mingw\include\SDL # xcopy /s /e \lib\* C:\QtSDK\Desktop\Qt\4.7.3\mingw\lib - SDL_DLL = SDL.dll - data_copy.commands += $(COPY_FILE) $$targetPath(\"$$(QTMINGW)/$$SDL_DLL\") $$targetPath(\"$$GCS_APP_PATH/$$SDL_DLL\") $$addNewline() - + 3PARTYDLL_DLLS = SDL.dll ssleay32.dll libeay32.dll + for(dll, 3PARTYDLL_DLLS) { + data_copy.commands += $(COPY_FILE) $$targetPath(\"$$(QTMINGW)/$$dll\") $$targetPath(\"$$GCS_APP_PATH/$$dll\") $$addNewline() + } + data_copy.target = FORCE QMAKE_EXTRA_TARGETS += data_copy } diff --git a/make/winx86/README.txt b/make/winx86/README.txt index 3bc070ee1..1dc0a1668 100644 --- a/make/winx86/README.txt +++ b/make/winx86/README.txt @@ -27,7 +27,7 @@ OpenPilot. ------------------ Fortunately, it requires only few small text files since all others components should already be installed on your system as parts of msysGit, QtSDK and -CodeSourcery G++ packages required to build the OpenPilot. +Arm compiler packages required to build the OpenPilot. It is expected that you have the following tools installed into the listed locations (but any other locations are fine as well): @@ -39,8 +39,8 @@ locations (but any other locations are fine as well): - Unicode NSIS in %ProgramFiles%\NSIS\Unicode - OpenOCD in C:\OpenOCD\0.4.0\bin (optional) -The SDL library and headers should be installed into Qt directories to build -the GCS. Check the wiki or ground/openpilotgcs/copydata.pro for details. +The SDL and SSL libraries and headers should be installed into Qt directories to +build the GCS. Check the wiki or ground/openpilotgcs/copydata.pro for details. Also it is assumed that you have the C:\Program Files\Git\cmd\ directory in the PATH. Usually this is the case for msysGit installation if you have chosen From 1a27b473d553da761417bec44bb950bd115dff91 Mon Sep 17 00:00:00 2001 From: David Date: Sat, 17 Aug 2013 04:04:22 +1000 Subject: [PATCH 09/13] New CDC driver revsion --- flight/Project/Windows USB/OpenPilot-CDC.inf | 4 +++- .../Project/Windows USB/openpilot-cdc_amd64.cat | Bin 0 -> 5008 bytes flight/Project/Windows USB/openpilot-cdc_x86.cat | Bin 0 -> 5032 bytes 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 flight/Project/Windows USB/openpilot-cdc_amd64.cat create mode 100644 flight/Project/Windows USB/openpilot-cdc_x86.cat diff --git a/flight/Project/Windows USB/OpenPilot-CDC.inf b/flight/Project/Windows USB/OpenPilot-CDC.inf index 17ea68f15..cb81d5239 100644 --- a/flight/Project/Windows USB/OpenPilot-CDC.inf +++ b/flight/Project/Windows USB/OpenPilot-CDC.inf @@ -3,7 +3,9 @@ Signature = "$Windows NT$" Class = Ports ClassGuid = {4D36E978-E325-11CE-BFC1-08002BE10318} Provider = %ProviderName% -DriverVer = 10/15/2009,1.0.0.0 +DriverVer=02/22/2013,2.0.0.0 +CatalogFile.NTx86 = OpenPilot-CDC_x86.cat +CatalogFile.NTamd64 = OpenPilot-CDC_amd64.cat [MANUFACTURER] %ProviderName% = DeviceList, NTx86, NTamd64 diff --git a/flight/Project/Windows USB/openpilot-cdc_amd64.cat b/flight/Project/Windows USB/openpilot-cdc_amd64.cat new file mode 100644 index 0000000000000000000000000000000000000000..a0ad8ffe659f64ba284f9e50cf784b8de519e52b GIT binary patch literal 5008 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

$4T zYc%se(8!ZJg{5ut`exDG`tm2{p7%Sf4T~EXX8UeBO&+(k<0ohPFa0;1*%-6w_oe<0VF%ley!gc8cwzCR!!urXNG`jKea1X;b-#tFVT5R> zZ;YqcpvtzCxUOyu%|c%{#rKa`2ks!q}ZQX-!j-7Ws{d8t{bP(wOG`!{QYwbqIvv%w+MvsQ;J6(zrgy2y=1F} zS-`m@f$$O)rGpSiaoT?<1QS)GKnTWuv=9VF(FDTvQz}5tDmp4FW==lN$;G}3AH|qF zZx!Sp4lpWG>LV;_c%nZdymzGeYlL@avJW2F)X#K#eCmXZSH~t0mrCshYmra+i4Jw| zQL<9SCO%vkf3)gp!@}zNLz5EQO@w#y-q>HeRl01E?<_kvmw?F1%AyDEsXCmatyNQ< zR|-&DmMhywWOtx+$EZEEC1)xhJbyBN*6Hf|hOesEZ|ass%Q;`9hwThlb$?CsqR;iI zb!WbB9e_(^CZ{{*1kNijCeFK|te_X-JgOne!Oi;eE21W#dHKG^f{QaX^Vh$IGLn|I@w6rAks>tz8xYi}?2AJ--NYTkl3_gjZ2sc#Z^hl2Ao zB7cvWejw&}|7{D>y@j2DHSDr^u_5bnbG|f^p6`6af0aMfZ%BLEO3$EgtE29gKbD!; zy|BBq{QQd1%Sz))T&luCVzrXvj%~94yyn^o+na}CwOdoljL+I#%HEQlJ}i7@@Va3u z%3}Gux;3UAt({%0`{razi|d@xx2bk-QlU5%JGgcA?bZn!@@{@_J|X0i?XrUY+YdGE zjEo=V=zjT_wzQcOUt_qWzF&z`k*K}!B^qRS?qb{#*NuAE7Ld93 zs`inhwj?W8!Gxzn+ehs2(6}`-r)6lvqVO%53vHgv536~s_xP1}S3*9K{zmuOjDrh| MOJ;2}baa3CZw;8IX#fBK literal 0 HcmV?d00001 From c267d73b42a55a4003d352eb0c3d6185391e4c9b Mon Sep 17 00:00:00 2001 From: David Date: Sat, 17 Aug 2013 04:12:09 +1000 Subject: [PATCH 10/13] Update install script for new drivers --- package/winx86/openpilotgcs.nsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/winx86/openpilotgcs.nsi b/package/winx86/openpilotgcs.nsi index df5d34152..db6fcf7eb 100644 --- a/package/winx86/openpilotgcs.nsi +++ b/package/winx86/openpilotgcs.nsi @@ -238,7 +238,7 @@ SectionEnd ; Copy driver files Section "-Drivers" InSecDrivers SetOutPath "$INSTDIR\drivers" - File "${PROJECT_ROOT}\flight\Project\Windows USB\OpenPilot-CDC.inf" + File /r "${PROJECT_ROOT}\flight\Project\Windows USB\*" SectionEnd ; Preinstall OpenPilot CDC driver From 974367a0fc2f4b874f92345a56d877a321986f44 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sat, 17 Aug 2013 16:12:52 +0200 Subject: [PATCH 11/13] OP-910 Updated WHATSNEW.txt for 13.06.04 --- WHATSNEW.txt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/WHATSNEW.txt b/WHATSNEW.txt index 9f6e282ea..cb979bac2 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -1,11 +1,21 @@ +--- RELEASE-13.06.04 --- +This maintenance release includes the following fixes missing in the previously not released to public RELEASE-13.06.03. +- Fixed issues with Google Maps; +- Includes new signed version of CDC drivers for Windows platforms; + +JIRA issues addressed in this maintenance release: +OP-1044, OP-1070, OP-1072 +Use the following link for a comprehensive list of issues addressed by this release +http://progress.openpilot.org/browse/OP-1070 + --- RELEASE-13.06.03 --- This maintenance release addresses the following issues: -- FIxed CC3D attitude estimation failure after multiple settings changes and reboots. +- Fixed CC3D attitude estimation failure after multiple settings changes and reboots. - Fixed OPLink crashes when erasing settings JIRA issues addressed in this maintenance release: -OP-1049, OP-1050 +OP-1049, OP-1050 --- RELEASE-13.06.02 --- From 5a83ef65e50588c80c16a5c53023439d8478e858 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sat, 24 Aug 2013 16:18:10 +0200 Subject: [PATCH 12/13] OP-910 Updated WHATSNEW.txt for 13.06.04 --- WHATSNEW.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WHATSNEW.txt b/WHATSNEW.txt index cb979bac2..f1d379956 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -1,5 +1,5 @@ --- RELEASE-13.06.04 --- -This maintenance release includes the following fixes missing in the previously not released to public RELEASE-13.06.03. +This maintenance release includes the following fixes missing in (previously not released to public) RELEASE-13.06.03. - Fixed issues with Google Maps; - Includes new signed version of CDC drivers for Windows platforms; From 1c83d3ee280f9f835d4bea861d46071a5d8053f8 Mon Sep 17 00:00:00 2001 From: Corvus Corax Date: Sun, 24 Nov 2013 21:24:55 +0100 Subject: [PATCH 13/13] BUGFIX to OpLinkMini: oplinkmod needs to initialize the Callback Scheduler OPLMini does not use Systemmod but its own system module called oplinkmod - which did not initialize the callback scheduler. Making the event dispatcher a callback caused it to no longer run due to the missing callback scheduler initialization --- flight/modules/OPLink/oplinkmod.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/flight/modules/OPLink/oplinkmod.c b/flight/modules/OPLink/oplinkmod.c index a1a4a3442..994e0d5d9 100644 --- a/flight/modules/OPLink/oplinkmod.c +++ b/flight/modules/OPLink/oplinkmod.c @@ -118,6 +118,9 @@ static void systemTask(__attribute__((unused)) void *parameters) /* create all modules thread */ MODULE_TASKCREATE_ALL; + /* start the delayed callback scheduler */ + CallbackSchedulerStart(); + if (mallocFailed) { /* We failed to malloc during task creation, * system behaviour is undefined. Reset and let